diff --git a/CFM.png b/CFM.png new file mode 100644 index 00000000..c6f6825b Binary files /dev/null and b/CFM.png differ diff --git a/Deep-Learning_CNN.pptx b/Deep-Learning_CNN.pptx new file mode 100644 index 00000000..9684ca4d Binary files /dev/null and b/Deep-Learning_CNN.pptx differ diff --git a/Image processing.ipynb b/Image processing.ipynb new file mode 100644 index 00000000..6d080d70 --- /dev/null +++ b/Image processing.ipynb @@ -0,0 +1 @@ +{"cells":[{"cell_type":"code","execution_count":4,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":144},"executionInfo":{"elapsed":2962,"status":"ok","timestamp":1729167841502,"user":{"displayName":"Dusan Dokic","userId":"04036679371909441146"},"user_tz":-120},"id":"2L2E-PdyuTm_","outputId":"aa4ea202-bed7-41d2-ccc0-af1cb1028e29"},"outputs":[{"data":{"image/png":"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","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["# 1. Data processing V1\n","\n","#Noise Addition\n","\n","#Adding random noise to the images helps the model generalize to noisy or imperfect data, which is common in real-world applications like medical imaging, security, or remote sensing.\n","\n"," #• Gaussian Noise:\n"," #• Adds Gaussian noise to simulate noisy input data.\n"," #• Helps the model become robust to noisy images (e.g., grainy or low-quality images).\n"," #• Example (custom): def add_gaussian_noise(image, mean=0, std=0.1):\n"," # noise = torch.randn(image.size()) * std + mean\n"," # noisy_image = image + noise\n"," # return torch.clamp(noisy_image, 0., 1.)\n","\n","import pickle\n","import numpy as np\n","from sklearn.model_selection import train_test_split\n","import matplotlib.pyplot as plt\n","from tensorflow.keras.preprocessing.image import ImageDataGenerator\n","import cv2\n","\n","# Function to apply Gaussian noise\n","def add_gaussian_noise(image):\n"," row, col, ch = image.shape\n"," mean = 0\n"," sigma = 0.1 # Adjust sigma to control noise level\n"," gauss = np.random.normal(mean, sigma, (row, col, ch))\n"," noisy_image = image + gauss\n"," noisy_image = np.clip(noisy_image, 0, 1) # Ensure values remain in [0, 1]\n"," return noisy_image\n","\n","# Function to apply Gaussian blur\n","def apply_gaussian_blur(image):\n"," blurred_image = cv2.GaussianBlur(image, (5, 5), 0) # Kernel size of 5x5\n"," return blurred_image\n","\n","# Load CIFAR-10 batch\n","def load_cifar_batch(file):\n"," with open(file, 'rb') as f:\n"," batch = pickle.load(f, encoding='bytes')\n"," return batch\n","\n","# Load all batches\n","batch_files = ['data_batch_1', 'data_batch_2', 'data_batch_3', 'data_batch_4', 'data_batch_5']\n","batches = [load_cifar_batch(batch_file) for batch_file in batch_files]\n","test_batch = load_cifar_batch('test_batch')\n","\n","# Extract 40% of each batch\n","train_data = []\n","train_labels = []\n","for batch in batches:\n"," data = batch[b'data'].reshape(-1, 3, 32, 32).transpose(0, 2, 3, 1) / 255.0\n"," labels = np.array(batch[b'labels'])\n","\n"," # Sample 20% of the batch\n"," data_sample, _, labels_sample, _ = train_test_split(data, labels, test_size=0.01, stratify=labels, random_state=42)\n","\n"," train_data.append(data_sample)\n"," train_labels.append(labels_sample)\n","\n","# Combine the 20% samples from each batch\n","train_data = np.concatenate(train_data, axis=0)\n","train_labels = np.concatenate(train_labels, axis=0)\n","\n","# Test data\n","test_data = test_batch[b'data'].reshape(-1, 3, 32, 32).transpose(0, 2, 3, 1) / 255.0\n","test_labels = np.array(test_batch[b'labels'])\n","\n","# Split train data into training and validation sets\n","train_data, val_data, train_labels, val_labels = train_test_split(train_data, train_labels, test_size=0.2, random_state=42)\n","\n","# Apply Gaussian noise and Gaussian blur during augmentation\n","def custom_augment(image):\n"," if np.random.rand() > 0.5:\n"," image = add_gaussian_noise(image)\n"," if np.random.rand() > 0.5:\n"," image = apply_gaussian_blur(image)\n"," return image\n","\n","# Custom data generator\n","def custom_data_generator(datagen, data, labels, batch_size):\n"," gen = datagen.flow(data, labels, batch_size=batch_size)\n"," while True:\n"," data_batch, label_batch = next(gen)\n"," for i in range(data_batch.shape[0]):\n"," data_batch[i] = custom_augment(data_batch[i])\n"," yield data_batch, label_batch\n","\n","# Data augmentation using ImageDataGenerator\n","datagen = ImageDataGenerator(\n"," rotation_range=15,\n"," width_shift_range=0.1,\n"," height_shift_range=0.1,\n"," horizontal_flip=True\n",")\n","datagen.fit(train_data)\n","\n","# Visualizing some augmented images\n","def show_augmented_images(data, labels, num_images=10):\n"," fig, axes = plt.subplots(1, num_images, figsize=(15, 15))\n"," for i in range(num_images):\n"," img = custom_augment(data[i])\n"," axes[i].imshow(img)\n"," axes[i].set_title(f\"Label: {labels[i]}\")\n"," axes[i].axis('off')\n"," plt.show()\n","\n","# Show first 10 images from the 20% sampled and augmented training set\n","show_augmented_images(train_data, train_labels)"]},{"cell_type":"code","execution_count":5,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":684},"executionInfo":{"elapsed":263,"status":"ok","timestamp":1729167843951,"user":{"displayName":"Dusan Dokic","userId":"04036679371909441146"},"user_tz":-120},"id":"CXaYm4UQuaFH","outputId":"3a1d6b4f-b4e6-4223-f066-5456ec6dc86c"},"outputs":[{"name":"stderr","output_type":"stream","text":["/usr/local/lib/python3.10/dist-packages/keras/src/layers/convolutional/base_conv.py:107: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n"," super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n"]},{"data":{"text/html":["
Model: \"sequential_1\"\n","
\n"],"text/plain":["\u001b[1mModel: \"sequential_1\"\u001b[0m\n"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓\n","┃ Layer (type)                          Output Shape                         Param # ┃\n","┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩\n","│ conv2d_3 (Conv2D)                    │ (None, 30, 30, 32)          │             896 │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ batch_normalization_3                │ (None, 30, 30, 32)          │             128 │\n","│ (BatchNormalization)                 │                             │                 │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ max_pooling2d_3 (MaxPooling2D)       │ (None, 15, 15, 32)          │               0 │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ conv2d_4 (Conv2D)                    │ (None, 13, 13, 64)          │          18,496 │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ batch_normalization_4                │ (None, 13, 13, 64)          │             256 │\n","│ (BatchNormalization)                 │                             │                 │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ max_pooling2d_4 (MaxPooling2D)       │ (None, 6, 6, 64)            │               0 │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ conv2d_5 (Conv2D)                    │ (None, 4, 4, 128)           │          73,856 │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ batch_normalization_5                │ (None, 4, 4, 128)           │             512 │\n","│ (BatchNormalization)                 │                             │                 │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ max_pooling2d_5 (MaxPooling2D)       │ (None, 2, 2, 128)           │               0 │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ flatten_1 (Flatten)                  │ (None, 512)                 │               0 │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ dense_2 (Dense)                      │ (None, 256)                 │         131,328 │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ dropout_1 (Dropout)                  │ (None, 256)                 │               0 │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ dense_3 (Dense)                      │ (None, 10)                  │           2,570 │\n","└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘\n","
\n"],"text/plain":["┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓\n","┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n","┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩\n","│ conv2d_3 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m30\u001b[0m, \u001b[38;5;34m30\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m896\u001b[0m │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ batch_normalization_3 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m30\u001b[0m, \u001b[38;5;34m30\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m128\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ max_pooling2d_3 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m15\u001b[0m, \u001b[38;5;34m15\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ conv2d_4 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m18,496\u001b[0m │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ batch_normalization_4 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m256\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ max_pooling2d_4 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m6\u001b[0m, \u001b[38;5;34m6\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ conv2d_5 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m73,856\u001b[0m │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ batch_normalization_5 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ max_pooling2d_5 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2\u001b[0m, \u001b[38;5;34m2\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ flatten_1 (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ dense_2 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m131,328\u001b[0m │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ dropout_1 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n","│ dense_3 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m2,570\u001b[0m │\n","└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘\n"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["
 Total params: 228,042 (890.79 KB)\n","
\n"],"text/plain":["\u001b[1m Total params: \u001b[0m\u001b[38;5;34m228,042\u001b[0m (890.79 KB)\n"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["
 Trainable params: 227,594 (889.04 KB)\n","
\n"],"text/plain":["\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m227,594\u001b[0m (889.04 KB)\n"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["
 Non-trainable params: 448 (1.75 KB)\n","
\n"],"text/plain":["\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m448\u001b[0m (1.75 KB)\n"]},"metadata":{},"output_type":"display_data"}],"source":["# 2 Model Architecture V1\n","\n","# Improvements: Activation change / lu\n","\n","import tensorflow as tf\n","from tensorflow.keras.models import Sequential\n","from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout, BatchNormalization\n","\n","# Build CNN model\n","model = Sequential()\n","\n","# Convolutional Layer 1\n","model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))\n","model.add(BatchNormalization())\n","model.add(MaxPooling2D(pool_size=(2, 2)))\n","\n","# Convolutional Layer 2\n","model.add(Conv2D(64, (3, 3), activation='relu'))\n","model.add(BatchNormalization())\n","model.add(MaxPooling2D(pool_size=(2, 2)))\n","\n","# Convolutional Layer 3\n","model.add(Conv2D(128, (3, 3), activation='relu'))\n","model.add(BatchNormalization())\n","model.add(MaxPooling2D(pool_size=(2, 2)))\n","\n","# Fully connected layers\n","model.add(Flatten())\n","model.add(Dense(256, activation='relu'))\n","model.add(Dropout(0.5))\n","model.add(Dense(10, activation='softmax'))\n","\n","# Compile the model\n","model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])\n","\n","# Model summary\n","model.summary()\n"]},{"cell_type":"code","execution_count":6,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":1395143,"status":"ok","timestamp":1729169245697,"user":{"displayName":"Dusan Dokic","userId":"04036679371909441146"},"user_tz":-120},"id":"KViAvYgJuiD4","outputId":"a5ac4b5e-de20-4381-e063-0a9ba5fe2dde"},"outputs":[{"name":"stdout","output_type":"stream","text":["Epoch 1/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m38s\u001b[0m 49ms/step - accuracy: 0.2985 - loss: 2.0760 - val_accuracy: 0.4313 - val_loss: 1.5405 - learning_rate: 0.0010\n","Epoch 2/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m31s\u001b[0m 45ms/step - accuracy: 0.4326 - loss: 1.5793 - val_accuracy: 0.4665 - val_loss: 1.5302 - learning_rate: 0.0010\n","Epoch 3/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.4760 - loss: 1.4557 - val_accuracy: 0.5153 - val_loss: 1.3895 - learning_rate: 0.0010\n","Epoch 4/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 44ms/step - accuracy: 0.5106 - loss: 1.3704 - val_accuracy: 0.5357 - val_loss: 1.3324 - learning_rate: 0.0010\n","Epoch 5/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.5350 - loss: 1.3137 - val_accuracy: 0.5905 - val_loss: 1.1781 - learning_rate: 0.0010\n","Epoch 6/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 45ms/step - accuracy: 0.5522 - loss: 1.2548 - val_accuracy: 0.6238 - val_loss: 1.0489 - learning_rate: 0.0010\n","Epoch 7/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.5704 - loss: 1.2165 - val_accuracy: 0.6430 - val_loss: 1.0083 - learning_rate: 0.0010\n","Epoch 8/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.5767 - loss: 1.2062 - val_accuracy: 0.6510 - val_loss: 0.9987 - learning_rate: 0.0010\n","Epoch 9/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.5957 - loss: 1.1528 - val_accuracy: 0.6633 - val_loss: 0.9617 - learning_rate: 0.0010\n","Epoch 10/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 45ms/step - accuracy: 0.5926 - loss: 1.1437 - val_accuracy: 0.6428 - val_loss: 1.0729 - learning_rate: 0.0010\n","Epoch 11/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.6085 - loss: 1.1168 - val_accuracy: 0.6912 - val_loss: 0.8830 - learning_rate: 0.0010\n","Epoch 12/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.6205 - loss: 1.0735 - val_accuracy: 0.6852 - val_loss: 0.9009 - learning_rate: 0.0010\n","Epoch 13/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.6184 - loss: 1.0875 - val_accuracy: 0.6873 - val_loss: 0.9037 - learning_rate: 0.0010\n","Epoch 14/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.6280 - loss: 1.0664 - val_accuracy: 0.7091 - val_loss: 0.8463 - learning_rate: 0.0010\n","Epoch 15/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.6361 - loss: 1.0359 - val_accuracy: 0.7112 - val_loss: 0.8212 - learning_rate: 0.0010\n","Epoch 16/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.6366 - loss: 1.0430 - val_accuracy: 0.7162 - val_loss: 0.8405 - learning_rate: 0.0010\n","Epoch 17/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.6489 - loss: 1.0065 - val_accuracy: 0.7168 - val_loss: 0.8133 - learning_rate: 0.0010\n","Epoch 18/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.6457 - loss: 1.0086 - val_accuracy: 0.7246 - val_loss: 0.8013 - learning_rate: 0.0010\n","Epoch 19/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.6555 - loss: 0.9903 - val_accuracy: 0.7266 - val_loss: 0.7926 - learning_rate: 0.0010\n","Epoch 20/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.6594 - loss: 0.9782 - val_accuracy: 0.7029 - val_loss: 0.8568 - learning_rate: 0.0010\n","Epoch 21/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 45ms/step - accuracy: 0.6584 - loss: 0.9786 - val_accuracy: 0.7325 - val_loss: 0.7796 - learning_rate: 0.0010\n","Epoch 22/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 44ms/step - accuracy: 0.6694 - loss: 0.9618 - val_accuracy: 0.7305 - val_loss: 0.7813 - learning_rate: 0.0010\n","Epoch 23/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 45ms/step - accuracy: 0.6668 - loss: 0.9602 - val_accuracy: 0.7207 - val_loss: 0.8043 - learning_rate: 0.0010\n","Epoch 24/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.6647 - loss: 0.9493 - val_accuracy: 0.6948 - val_loss: 0.9152 - learning_rate: 0.0010\n","Epoch 25/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.6664 - loss: 0.9512 - val_accuracy: 0.7325 - val_loss: 0.7803 - learning_rate: 0.0010\n","Epoch 26/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.6708 - loss: 0.9367 - val_accuracy: 0.7400 - val_loss: 0.7601 - learning_rate: 0.0010\n","Epoch 27/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.6723 - loss: 0.9279 - val_accuracy: 0.7466 - val_loss: 0.7394 - learning_rate: 0.0010\n","Epoch 28/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 45ms/step - accuracy: 0.6807 - loss: 0.9233 - val_accuracy: 0.7540 - val_loss: 0.7174 - learning_rate: 0.0010\n","Epoch 29/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.6808 - loss: 0.9215 - val_accuracy: 0.7466 - val_loss: 0.7301 - learning_rate: 0.0010\n","Epoch 30/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 45ms/step - accuracy: 0.6795 - loss: 0.9259 - val_accuracy: 0.7548 - val_loss: 0.7170 - learning_rate: 0.0010\n","Epoch 31/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 44ms/step - accuracy: 0.6885 - loss: 0.9039 - val_accuracy: 0.7428 - val_loss: 0.7522 - learning_rate: 0.0010\n","Epoch 32/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 44ms/step - accuracy: 0.6865 - loss: 0.9119 - val_accuracy: 0.7373 - val_loss: 0.7591 - learning_rate: 0.0010\n","Epoch 33/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 44ms/step - accuracy: 0.6889 - loss: 0.8989 - val_accuracy: 0.7503 - val_loss: 0.7146 - learning_rate: 0.0010\n","Epoch 34/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 45ms/step - accuracy: 0.6936 - loss: 0.8758 - val_accuracy: 0.7481 - val_loss: 0.7320 - learning_rate: 0.0010\n","Epoch 35/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 44ms/step - accuracy: 0.6943 - loss: 0.8848 - val_accuracy: 0.7601 - val_loss: 0.6970 - learning_rate: 0.0010\n","Epoch 36/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.6904 - loss: 0.8868 - val_accuracy: 0.7683 - val_loss: 0.6860 - learning_rate: 0.0010\n","Epoch 37/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m29s\u001b[0m 46ms/step - accuracy: 0.6934 - loss: 0.8867 - val_accuracy: 0.7531 - val_loss: 0.7141 - learning_rate: 0.0010\n","Epoch 38/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 46ms/step - accuracy: 0.6982 - loss: 0.8785 - val_accuracy: 0.7586 - val_loss: 0.7158 - learning_rate: 0.0010\n","Epoch 39/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m29s\u001b[0m 46ms/step - accuracy: 0.6986 - loss: 0.8751 - val_accuracy: 0.7640 - val_loss: 0.6781 - learning_rate: 0.0010\n","Epoch 40/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.6990 - loss: 0.8558 - val_accuracy: 0.7534 - val_loss: 0.7254 - learning_rate: 0.0010\n","Epoch 41/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.7005 - loss: 0.8646 - val_accuracy: 0.7609 - val_loss: 0.6983 - learning_rate: 0.0010\n","Epoch 42/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 44ms/step - accuracy: 0.7042 - loss: 0.8524 - val_accuracy: 0.7595 - val_loss: 0.7105 - learning_rate: 0.0010\n","Epoch 43/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 44ms/step - accuracy: 0.7058 - loss: 0.8531 - val_accuracy: 0.7501 - val_loss: 0.7455 - learning_rate: 0.0010\n","Epoch 44/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 45ms/step - accuracy: 0.7054 - loss: 0.8529 - val_accuracy: 0.7553 - val_loss: 0.7202 - learning_rate: 0.0010\n","Epoch 45/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 45ms/step - accuracy: 0.7055 - loss: 0.8474 - val_accuracy: 0.7738 - val_loss: 0.6592 - learning_rate: 5.0000e-04\n","Epoch 46/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 45ms/step - accuracy: 0.7178 - loss: 0.8041 - val_accuracy: 0.7785 - val_loss: 0.6613 - learning_rate: 5.0000e-04\n","Epoch 47/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 44ms/step - accuracy: 0.7178 - loss: 0.8025 - val_accuracy: 0.7788 - val_loss: 0.6423 - learning_rate: 5.0000e-04\n","Epoch 48/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 44ms/step - accuracy: 0.7252 - loss: 0.7895 - val_accuracy: 0.7830 - val_loss: 0.6273 - learning_rate: 5.0000e-04\n","Epoch 49/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 44ms/step - accuracy: 0.7219 - loss: 0.7986 - val_accuracy: 0.7806 - val_loss: 0.6303 - learning_rate: 5.0000e-04\n","Epoch 50/50\n","\u001b[1m618/618\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 44ms/step - accuracy: 0.7268 - loss: 0.7871 - val_accuracy: 0.7890 - val_loss: 0.6130 - learning_rate: 5.0000e-04\n"]}],"source":["### 3. Model Training\n","\n","\n","from tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau\n","\n","# Early stopping and learning rate reduction\n","early_stopping = EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True)\n","reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=5, min_lr=0.00001)\n","\n","# Train the model with custom augmentation\n","history = model.fit(custom_data_generator(datagen, train_data, train_labels, batch_size=64),\n"," steps_per_epoch=len(train_data) // 64,\n"," epochs=50,\n"," validation_data=(val_data, val_labels),\n"," callbacks=[early_stopping, reduce_lr])"]},{"cell_type":"code","execution_count":9,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"elapsed":2624,"status":"ok","timestamp":1729169462340,"user":{"displayName":"Dusan Dokic","userId":"04036679371909441146"},"user_tz":-120},"id":"W_OXMN4Hu4s7","outputId":"fdd3aca4-a20a-418b-f6a3-ba0a1a01dd46"},"outputs":[{"name":"stdout","output_type":"stream","text":["\u001b[1m310/310\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.7878 - loss: 0.6167\n","Validation Accuracy: 0.7890\n","\u001b[1m310/310\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step\n","Classification Report:\n"," precision recall f1-score support\n","\n"," 0 0.78 0.83 0.80 955\n"," 1 0.88 0.91 0.89 1000\n"," 2 0.71 0.73 0.72 1024\n"," 3 0.66 0.65 0.65 1050\n"," 4 0.78 0.73 0.75 941\n"," 5 0.73 0.63 0.68 965\n"," 6 0.83 0.86 0.84 1021\n"," 7 0.80 0.85 0.83 948\n"," 8 0.86 0.85 0.86 983\n"," 9 0.85 0.86 0.86 1013\n","\n"," accuracy 0.79 9900\n"," macro avg 0.79 0.79 0.79 9900\n","weighted avg 0.79 0.79 0.79 9900\n","\n"]},{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAxQAAAKnCAYAAAAfqgv+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAADHp0lEQVR4nOzdd1hT1xsH8C9LZAmCTJEhyFLcCxH3rHu0Wmet4p44cQ8E98CF4p6I27pnW60LtSoi7q2ADGUvIb8/aFPyE0dikkvg++nD8zTn3lzeI8lN3vuec66aSCQSgYiIiIiISAbqQgdARERERESqiwkFERERERHJjAkFERERERHJjAkFERERERHJjAkFERERERHJjAkFERERERHJjAkFERERERHJjAkFERERERHJjAkFERERERHJTFPoABRBp/MGoUMQRPzuX4UOQRCZ2blChyAIbc1iej1ATegAhKGuVkw7XkzlikRChyCI9KwcoUMQhJZG8TyflypZePutU224YL87/e+Vgv1uWRXevyQRERERERV6RbJCQUREREQkMzVec5cG/7WIiIiIiEhmTCiIiIiIiEhmHPJERERERJQfF8KQCisUREREREQkM1YoiIiIiIjy46RsqfBfi4iIiIiIZMYKBRERERFRfpxDIRVWKIiIiIiISGZMKIiIiIiISGYc8kRERERElB8nZUuF/1pERERERCQzViiIiIiIiPLjpGypsEJBREREREQyY0JBREREREQy45AnIiIiIqL8OClbKvzXIiIiIiIimbFCQURERESUHydlS4UVCiIiIiIikhkrFERERERE+XEOhVT4r0VERERERDJjQkFERERERDLjkCciIiIiovw4KVsqTCi+4n7QT7A1M/ikPej4PYwJvgxzIx3496mNJlWsYKCjhYdvE7Fg720cvPJcvG/V8ibw610LNRzLICdXhIOXn2Pi5qtIzfioxJ4oRmpqClavCMS5s2fwPiEezi6umDBpCiq6uwsdmkJs3RiM1SuWoluP3hgz3ldim0gkwpjhg3Dl0kXMXxKIho2bCRSlfNy4Hoatmzfg3r0IxMXGYsmylWjcNK9P2dnZWL1iOS5e+AOv37yGvr4+6tSth5GjfWBmZi5w5PKVk5ODoNUrcezIYcTHxcHU1AztOnaC96AhUCvCHzg3rodh88YNiLx3F7GxsVgauApNmqr2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/pijuBNbjcouBbbPmOOP9v/MHVi7egXWBa364j6KkPUxV2HHLshQ776o4OQicWO7rZuCsS90F5ISE+Ho5Izho8aiSrUaCo3DWE9Docf/HoY/bxPsdyfu6i3Y75aVoAlF+/btUbVqVcyeXfAVztu3b6NatWrIzZXujabohKKwkndCoSqUnVAUFsK9c4XFi0ZERZciE4rCTNkJRWFRqBOKHgImFDtVL6EQdMjT+PHjkZqa+tntjo6OOH/+vBIjIiIiIiIiaQiaUHh5fXmyj56eHho2LNp37iQiIiKiwoVzKKRTqJeNJSIiIiKiwo0JBRERERERyaxQ3ymbiIiIiEjZOORJOqxQEBERERGRzFihICIiIiLKhxUK6bBCQUREREREMmNCQUREREREMuOQJyIiIiKifDjkSTqsUBARERERkcxYoSAiIiIiyo8FCqmwQkFERERERDJjhYKIiIiIKB/OoZAOKxRERERERCQzJhRERERERCQzDnkiIiIiIsqHQ56kwwoFERERERHJjBUKIiIiIqJ8WKGQDisUREREREQkMyYUREREREQkMw55IiIiIiLKjyOepMIKBRERERERyYwVCiIiIiKifDgpWzqsUBARERERkcxYoSAiIiIiyocVCukUyYQiNTNH6BAE8T5spdAhCMKq306hQxDEs3XdhQ5BELkikdAhCKKYdhvF9TNdU6N4dlyjmP7BS2pxwAipNr6CiYiIiIhIZkWyQkFEREREJCsOeZIOKxRERERERCQzViiIiIiIiPJhhUI6rFAQEREREZHMmFAQEREREZHMOOSJiIiIiCg/jniSCisUREREREQkM1YoiIiIiIjy4aRs6bBCQUREREREMmOFgoiIiIgoH1YopMMKBRERERERyYwJBRERERERyYxDnoiIiIiI8uGQJ+mwQkFERERERDJjhYKIiIiIKD8WKKTCCgUREREREcmMCQUREREREcmMQ56IiIiIiPLhpGzpsEJBREREREQyY4WCiIiIiCgfViikwwoFERERERHJjAkFERERERHJjEOeiIiIiIjy4ZAn6TChkEHsuxisWbEEVy5dQEZGBqytbTB5hh9c3CoBADasXYWzp47jXUw0NLW04OzqhoFDR6FipcoCRy5foSE7Ebp7F96+eQMAcHCsgEFDhqK+V0OBI5PdrSXtYWOq/0n7+jMPMWHLdRye3BT1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qlatmsRs90ePHsHGxgY2NjYAgJcvX0JbWxuxsbGcR0FEREREVIx8U0LRsWNHBYdBRERERFQ4qGihQDDflFDMmDFD0XEQEREREZEKknoOBRERERER0b+kXjY2JycHS5cuRWhoKF6+fImsrCyJ7QkJCXILjoiIiIhI2XinbOlIXaGYNWsWlixZgm7duiExMRE+Pj7o3Lkz1NXVMXPmTAWESEREREREhZXUCcWOHTsQHByMsWPHQlNTEz///DPWr1+P6dOn48qVK4qIkYiIiIhIadTUhPtRRVInFNHR0XB3dwcA6OvrIzExEQDQtm1bHD16VL7RERERERFRoSZ1QmFtbY2oqCgAgIODA06dOgUACAsLg7a2tnyjIyIiIiKiQk3qSdmdOnXC2bNnUadOHYwYMQK9evXChg0b8PLlS4wZM0YRMRIRERERKY2q3rFaKFInFPPmzRP/f7du3WBra4tLly6hQoUKaNeunVyDIyIiIiKiwu2770NRt25d+Pj4oE6dOvD395dHTEREREREguGkbOnI7cZ2UVFRmDZtmrwOR0REREREKkDqIU9EREREREUZb2wnHblVKIiIiIiIqPhhQkFERERERDL75iFPPj4+X9weGxv73cHIi6YGy1TFiYZ68fx7R33IEDoEQfwd0EroEATRZPEfQocgiLM+DYQOgUjhRBAJHYJACu/nN6+4S+ebE4q///77q/s0aMATPxERERFRcfLNCcX58+cVGQcRERERUaHASdnSYUWHiIiIiIhkxoSCiIiIiIhkxvtQEBERERHlU0zXe5EZKxRERERERCQzViiIiIiIiPJhhUI6MlUoLly4gF69esHDwwNv3rwBAGzbtg0XL16Ua3BERERERFS4SZ1Q7Nu3Dy1btoSOjg7+/vtvZGZmAgASExPh7+8v9wCJiIiIiJRJTU1NsB9VJHVC4efnh6CgIAQHB0NLS0vc7unpiZs3b8o1OCIiIiIiKtykTigePHhQ4B2xDQ0N8eHDB3nEREREREREKkLqhMLCwgKPHz/+pP3ixYsoX768XIIiIiIiIhKKuppwP6pI6oTC29sbo0aNwtWrV6Gmpoa3b99ix44dGDduHIYMGaKIGImIiIiIqJCSetnYSZMmITc3F02bNkVaWhoaNGgAbW1tjBs3DiNGjFBEjERERERESqOic6MFI3VCoaamhilTpmD8+PF4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iIuLhbOLK1avXQ+TIjzkqbh+fhfXfpPiqIkEnEX29u1beHp6wsbGBjVr1sSaNWtQo0YNuLq64sGDB7hy5QoOHDiAH374QarjKrtCQcJKyzdhsjhRL6YTxrQ0iud1I/Xi2W2YeE0SOgRBvL9Y8B27izrOay9edLSEjuDzQm8JN5/kp6pWgv1uWQn6EWVlZYW///4bHh4eOHHiBEQiEa5du4ZTp07B2toaf/31l9TJBBERERERKY/gg96NjIwwb948zJs3T+hQiIiIiIhQPMcAyK6YFtGJiIiIiEgemFAQEREREZHMBB/yRERERERUmPBO2dJhhYKIiIiIiGTGCgURERERUT684i4d/nsREREREZHMmFAQEREREZHMOOSJiIiIiCgfTsqWDisUREREREQkM1YoiIiIiIjyYX1COqxQEBERERGRzFihICIiIiLKh1MopMMKBRERERERyYwJBRERERERyYxDnoiIiIiI8lHntGypsEJBREREREQyY4WCiIiIiCgfTsqWDisUREREREQkMyYUREREREQkMw55IiIiIiLKR42TsqXCCgUREREREcmMFQoiIiIionw4KVs6rFAQEREREZHMWKEgIiIiIsqHN7aTTpFMKEQikdAhCEJdvXi++EtqaQgdgiA+5hTP13l2Tq7QIQhCs5h+uCVcmC90CIIo3XmN0CEIImHfEKFDEIQIxfN8jmJ6XiuKOOSJiIiIiIhkViQrFEREREREsuKkbOmwQkFERERERDJjhYKIiIiIKB9WKKTDCsX/2rvzuJry/w/gr0qlVYU2tCiVLElZsu9jzzYMhtAwyJLs22TPvlP2nez7mhC+ttIwCGPPkhYk7bn3/P4w7q87YXR172l5PT16PNxzTue+Pq66933en3MOEREREREpjAUFEREREREpjFOeiIiIiIiyUeMlbXOFHQoiIiIiIlIYOxRERERERNkU0XsFK4wdCiIiIiIiUhg7FERERERE2fAcitxhh4KIiIiIiBTGgoKIiIiIiBTGKU9ERERERNnwTtm5ww4FEREREREpjB0KIiIiIqJseFJ27rBDQURERERECmNBQURERERECuOUJyIiIiKibHin7Nxhh4KIiIiIiBTGDgURERERUTY8KTt32KEgIiIiIiKFsaAgIiIiIiKFccoTEREREVE2vFN27rCgUMD1iHBs3rgOUVF3kBAf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1e5VKyr9xnbFVHxvj7GjRiDyejgSExNhbGICV1c3DBk2AuWsVHspZJPOeXfpUn0dTfj3rIn2tW1RuoQOYt6mYNf5h5i1MwJZ2c59mNyjBvr95AwjPS1cinqN4UHn8fDVpxvbVStfCksGNYBDGSNoa2rgaWwStp/7G0sP3MzT8yfe7h2UZ/tSlHefXnB0clLpje0EqPajWEpKMlYuW4ozoafx7u0blC5tipat22DAoMEqPfCpq5l/P7VfeZQo2nPXtjMS7bkVJWpBYWtri4iICJQsWTJP96vsgiK/UnVBkV8ou6DIr5RdUORXyi4o8itlFxT5laoLivwiLwuKgiQ/FBRiUHVBkV+woPiyglhQiDrl6cmTJ/+9ERERERGRCqlxzlOuFM1DP0RERERElCfyzUnZRERERET5QQG9YbVo2KEgIiIiIiKFsUNBRERERJQNGxS5ww4FEREREREpjAUFEREREREpjFOeiIiIiIiy45ynXGGHgoiIiIioAAoICECNGjVgYGAAU1NTdOjQAffv35fbJj09HT4+PihZsiT09fXRuXNnxMbGym0THR2NNm3aQFdXF6amphg9ejQ+fvz43TlYUBARERERZaMm4p/cCAsLg4+PD65cuYKQkBBkZWWhRYsWSElJkW0zYsQIHD58GLt370ZYWBhevXqFTp06ydZLJBK0adMGmZmZuHTpEjZt2oSNGzfijz/++P5/L0EQCt393lMzC92Qvou6etHsz0mkRfP1/igpmuOWFr5fWd+lmEbR/Pkupl40j3uZdA4UO4Io3u4dJHYEUQgomr/XdDXz7++1iCdJoj23u62hwt8bHx8PU1NThIWFoUGDBnj//j1Kly6N7du3o0uXLgCAe/fuoWLFirh8+TJq166N48ePo23btnj16hXMzMwAAEFBQRg7dizi4+OhpaX1n89bNH9TExEREREVMu/fvwcAmJiYAACuX7+OrKwsNGvWTLaNk5MTrKyscPnyZQDA5cuXUaVKFVkxAQA//fQTkpKScOfOne96Xp6UTURERESUjZh3ys7IyEBGRobcMm1tbWhra3/z+6RSKXx9fVG3bl1UrlwZAPD69WtoaWnByMhIblszMzO8fv1atk32YuLz+s/rvgc7FERERERE+URAQABKlCgh9xUQEPCf3+fj44Pbt28jODhYBSnlsUNBRERERJSNmGd3jB8/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","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["#4. Model evaluation V1\n","\n","from sklearn.metrics import confusion_matrix, classification_report\n","import seaborn as sns\n","\n","# Evaluate the model\n","val_loss, val_accuracy = model.evaluate(val_data, val_labels)\n","print(f\"Validation Accuracy: {val_accuracy:.4f}\")\n","\n","# Predictions\n","val_pred = np.argmax(model.predict(val_data), axis=1)\n","\n","# Classification report\n","print(\"Classification Report:\\n\", classification_report(val_labels, val_pred))\n","\n","# Confusion matrix\n","conf_matrix = confusion_matrix(val_labels, val_pred)\n","\n","# Plot confusion matrix\n","plt.figure(figsize=(10, 8))\n","sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues')\n","plt.xlabel('Predicted Label')\n","plt.ylabel('True Label')\n","plt.show()"]},{"cell_type":"code","execution_count":12,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":288,"status":"ok","timestamp":1729169608993,"user":{"displayName":"Dusan Dokic","userId":"04036679371909441146"},"user_tz":-120},"id":"jTdrJPfJiCRn","outputId":"d4891484-a980-4d0c-e34d-febfefc535c3"},"outputs":[{"name":"stderr","output_type":"stream","text":["WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n"]}],"source":["model.save('/content/drive/MyDrive/Colab Notebooks/model.h5') # HDF5 format"]},{"cell_type":"code","execution_count":8,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":426},"executionInfo":{"elapsed":7879,"status":"error","timestamp":1729169454702,"user":{"displayName":"Dusan Dokic","userId":"04036679371909441146"},"user_tz":-120},"id":"QpQTb1Huu8Pq","outputId":"21e5c0a9-899d-4420-9e9f-e31beba5e679"},"outputs":[{"name":"stdout","output_type":"stream","text":["Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5\n","\u001b[1m58889256/58889256\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 0us/step\n","Epoch 1/30\n","\u001b[1m 69/618\u001b[0m \u001b[32m━━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m23s\u001b[0m 43ms/step - accuracy: 0.1895 - loss: 2.2639"]},{"ename":"KeyboardInterrupt","evalue":"","output_type":"error","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[0;31m# Train the transfer learning model\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 26\u001b[0;31m history_transfer = transfer_model.fit(custom_data_generator(datagen, train_data, train_labels, batch_size=64),\n\u001b[0m\u001b[1;32m 27\u001b[0m \u001b[0msteps_per_epoch\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain_data\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m//\u001b[0m \u001b[0;36m64\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0mepochs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m30\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/keras/src/utils/traceback_utils.py\u001b[0m in \u001b[0;36merror_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 115\u001b[0m \u001b[0mfiltered_tb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 116\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 117\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 118\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 119\u001b[0m \u001b[0mfiltered_tb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_process_traceback_frames\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__traceback__\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/keras/src/backend/tensorflow/trainer.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq)\u001b[0m\n\u001b[1;32m 316\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mstep\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0miterator\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mepoch_iterator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menumerate_epoch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 317\u001b[0m \u001b[0mcallbacks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mon_train_batch_begin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 318\u001b[0;31m \u001b[0mlogs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtrain_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0miterator\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 319\u001b[0m \u001b[0mlogs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_pythonify_logs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlogs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 320\u001b[0m \u001b[0mcallbacks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mon_train_batch_end\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlogs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/tensorflow/python/util/traceback_utils.py\u001b[0m in \u001b[0;36merror_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 148\u001b[0m \u001b[0mfiltered_tb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 149\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 150\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 151\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 152\u001b[0m \u001b[0mfiltered_tb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_process_traceback_frames\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__traceback__\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 831\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 832\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mOptionalXlaContext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_jit_compile\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 833\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 834\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 835\u001b[0m \u001b[0mnew_tracing_count\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexperimental_get_tracing_count\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py\u001b[0m in \u001b[0;36m_call\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 876\u001b[0m \u001b[0;31m# In this case we have not created variables on the first call. So we can\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 877\u001b[0m \u001b[0;31m# run the first trace but we should fail if variables are created.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 878\u001b[0;31m results = tracing_compilation.call_function(\n\u001b[0m\u001b[1;32m 879\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_variable_creation_config\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 880\u001b[0m )\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/tensorflow/python/eager/polymorphic_function/tracing_compilation.py\u001b[0m in \u001b[0;36mcall_function\u001b[0;34m(args, kwargs, tracing_options)\u001b[0m\n\u001b[1;32m 137\u001b[0m \u001b[0mbound_args\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunction\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfunction_type\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbind\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 138\u001b[0m \u001b[0mflat_inputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunction\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfunction_type\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munpack_inputs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbound_args\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 139\u001b[0;31m return function._call_flat( # pylint: disable=protected-access\n\u001b[0m\u001b[1;32m 140\u001b[0m \u001b[0mflat_inputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcaptured_inputs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfunction\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcaptured_inputs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 141\u001b[0m )\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/tensorflow/python/eager/polymorphic_function/concrete_function.py\u001b[0m in \u001b[0;36m_call_flat\u001b[0;34m(self, tensor_inputs, captured_inputs)\u001b[0m\n\u001b[1;32m 1320\u001b[0m and executing_eagerly):\n\u001b[1;32m 1321\u001b[0m \u001b[0;31m# No tape is watching; skip to running the function.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1322\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_inference_function\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcall_preflattened\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1323\u001b[0m forward_backward = self._select_forward_and_backward_functions(\n\u001b[1;32m 1324\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/tensorflow/python/eager/polymorphic_function/atomic_function.py\u001b[0m in \u001b[0;36mcall_preflattened\u001b[0;34m(self, args)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mcall_preflattened\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mSequence\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTensor\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mAny\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 215\u001b[0m \u001b[0;34m\"\"\"Calls with flattened tensor inputs and returns the structured output.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 216\u001b[0;31m \u001b[0mflat_outputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcall_flat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 217\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfunction_type\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpack_output\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mflat_outputs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 218\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/tensorflow/python/eager/polymorphic_function/atomic_function.py\u001b[0m in \u001b[0;36mcall_flat\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 249\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mrecord\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstop_recording\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 250\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_bound_context\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexecuting_eagerly\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 251\u001b[0;31m outputs = self._bound_context.call_function(\n\u001b[0m\u001b[1;32m 252\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 253\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/tensorflow/python/eager/context.py\u001b[0m in \u001b[0;36mcall_function\u001b[0;34m(self, name, tensor_inputs, num_outputs)\u001b[0m\n\u001b[1;32m 1550\u001b[0m \u001b[0mcancellation_context\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcancellation\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1551\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcancellation_context\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1552\u001b[0;31m outputs = execute.execute(\n\u001b[0m\u001b[1;32m 1553\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdecode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"utf-8\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1554\u001b[0m \u001b[0mnum_outputs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnum_outputs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/tensorflow/python/eager/execute.py\u001b[0m in \u001b[0;36mquick_execute\u001b[0;34m(op_name, num_outputs, inputs, attrs, ctx, name)\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 52\u001b[0m \u001b[0mctx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mensure_initialized\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 53\u001b[0;31m tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,\n\u001b[0m\u001b[1;32m 54\u001b[0m inputs, attrs, num_outputs)\n\u001b[1;32m 55\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_NotOkStatusException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mKeyboardInterrupt\u001b[0m: "]}],"source":["#step 5 transfer learning\n","\n","\n","from tensorflow.keras.applications import VGG16\n","from tensorflow.keras.layers import GlobalAveragePooling2D\n","\n","# Load VGG16 pre-trained on ImageNet without the top layers\n","vgg_model = VGG16(weights='imagenet', include_top=False, input_shape=(32, 32, 3))\n","\n","# Freeze the pre-trained convolutional layers\n","for layer in vgg_model.layers:\n"," layer.trainable = False\n","\n","# Build transfer learning model\n","transfer_model = Sequential()\n","transfer_model.add(vgg_model)\n","transfer_model.add(GlobalAveragePooling2D()) # Global average pooling instead of flattening\n","transfer_model.add(Dense(256, activation='relu'))\n","transfer_model.add(Dropout(0.5))\n","transfer_model.add(Dense(10, activation='softmax'))\n","\n","# Compile the transfer learning model\n","transfer_model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])\n","\n","# Train the transfer learning model\n","history_transfer = transfer_model.fit(custom_data_generator(datagen, train_data, train_labels, batch_size=64),\n"," steps_per_epoch=len(train_data) // 64,\n"," epochs=30,\n"," validation_data=(val_data, val_labels),\n"," callbacks=[early_stopping, reduce_lr])\n","\n","# Evaluate the transfer learning model\n","val_loss_transfer, val_accuracy_transfer = transfer_model.evaluate(val_data, val_labels)\n","print(f\"Transfer Learning Validation Accuracy: {val_accuracy_transfer:.4f}\")"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":1096299,"status":"ok","timestamp":1729162189774,"user":{"displayName":"Kerem Senler","userId":"03147868270628383618"},"user_tz":-120},"id":"BKI9YfOPvBTd","outputId":"46fabff1-faf8-4709-c2c2-e4fdd79d661e"},"outputs":[{"name":"stdout","output_type":"stream","text":["Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz\n","\u001b[1m170498071/170498071\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 0us/step\n","Epoch 1/30\n"]},{"name":"stderr","output_type":"stream","text":["/usr/local/lib/python3.10/dist-packages/keras/src/trainers/data_adapters/py_dataset_adapter.py:121: UserWarning: Your `PyDataset` class should call `super().__init__(**kwargs)` in its constructor. `**kwargs` can include `workers`, `use_multiprocessing`, `max_queue_size`. Do not pass these arguments to `fit()`, as they will be ignored.\n"," self._warn_if_super_not_called()\n"]},{"name":"stdout","output_type":"stream","text":["\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m101s\u001b[0m 120ms/step - accuracy: 0.4245 - loss: 1.6698 - val_accuracy: 0.6230 - val_loss: 1.0731 - learning_rate: 1.0000e-04\n","Epoch 2/30\n","\u001b[1m 1/703\u001b[0m \u001b[37m━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m8s\u001b[0m 12ms/step - accuracy: 0.6875 - loss: 0.9874"]},{"name":"stderr","output_type":"stream","text":["/usr/lib/python3.10/contextlib.py:153: UserWarning: Your input ran out of data; interrupting training. Make sure that your dataset or generator can generate at least `steps_per_epoch * epochs` batches. You may need to use the `.repeat()` function when building your dataset.\n"," self.gen.throw(typ, value, traceback)\n"]},{"name":"stdout","output_type":"stream","text":["\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.6875 - loss: 0.9874 - val_accuracy: 0.6248 - val_loss: 1.0737 - learning_rate: 1.0000e-04\n","Epoch 3/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m67s\u001b[0m 95ms/step - accuracy: 0.6136 - loss: 1.1151 - val_accuracy: 0.6740 - val_loss: 0.9234 - learning_rate: 1.0000e-04\n","Epoch 4/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.6406 - loss: 0.9833 - val_accuracy: 0.6750 - val_loss: 0.9236 - learning_rate: 1.0000e-04\n","Epoch 5/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m67s\u001b[0m 95ms/step - accuracy: 0.6423 - loss: 1.0267 - val_accuracy: 0.6892 - val_loss: 0.8772 - learning_rate: 1.0000e-04\n","Epoch 6/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.5938 - loss: 1.2609 - val_accuracy: 0.6896 - val_loss: 0.8750 - learning_rate: 1.0000e-04\n","Epoch 7/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m67s\u001b[0m 95ms/step - accuracy: 0.6580 - loss: 0.9865 - val_accuracy: 0.6968 - val_loss: 0.8785 - learning_rate: 1.0000e-04\n","Epoch 8/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.6094 - loss: 1.0310 - val_accuracy: 0.6968 - val_loss: 0.8775 - learning_rate: 1.0000e-04\n","Epoch 9/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m68s\u001b[0m 95ms/step - accuracy: 0.6715 - loss: 0.9518 - val_accuracy: 0.7008 - val_loss: 0.8665 - learning_rate: 1.0000e-04\n","Epoch 10/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.6719 - loss: 0.9774 - val_accuracy: 0.7038 - val_loss: 0.8619 - learning_rate: 1.0000e-04\n","Epoch 11/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m68s\u001b[0m 96ms/step - accuracy: 0.6804 - loss: 0.9241 - val_accuracy: 0.7096 - val_loss: 0.8367 - learning_rate: 1.0000e-04\n","Epoch 12/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.6094 - loss: 0.9779 - val_accuracy: 0.7082 - val_loss: 0.8376 - learning_rate: 1.0000e-04\n","Epoch 13/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m67s\u001b[0m 95ms/step - accuracy: 0.6848 - loss: 0.9112 - val_accuracy: 0.7172 - val_loss: 0.8030 - learning_rate: 1.0000e-04\n","Epoch 14/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.7812 - loss: 0.6473 - val_accuracy: 0.7170 - val_loss: 0.8026 - learning_rate: 1.0000e-04\n","Epoch 15/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m67s\u001b[0m 95ms/step - accuracy: 0.6966 - loss: 0.8798 - val_accuracy: 0.7102 - val_loss: 0.8233 - learning_rate: 1.0000e-04\n","Epoch 16/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.5938 - loss: 1.0931 - val_accuracy: 0.7096 - val_loss: 0.8221 - learning_rate: 1.0000e-04\n","Epoch 17/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m67s\u001b[0m 95ms/step - accuracy: 0.6981 - loss: 0.8660 - val_accuracy: 0.7140 - val_loss: 0.8097 - learning_rate: 1.0000e-04\n","Epoch 18/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.6719 - loss: 0.9112 - val_accuracy: 0.7130 - val_loss: 0.8098 - learning_rate: 1.0000e-04\n","Epoch 19/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m68s\u001b[0m 95ms/step - accuracy: 0.7028 - loss: 0.8400 - val_accuracy: 0.7276 - val_loss: 0.7786 - learning_rate: 5.0000e-05\n","Epoch 20/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.7500 - loss: 0.7638 - val_accuracy: 0.7282 - val_loss: 0.7787 - learning_rate: 5.0000e-05\n","Epoch 21/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m67s\u001b[0m 95ms/step - accuracy: 0.7117 - loss: 0.8254 - val_accuracy: 0.7266 - val_loss: 0.7780 - learning_rate: 5.0000e-05\n","Epoch 22/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.5312 - loss: 1.2338 - val_accuracy: 0.7260 - val_loss: 0.7791 - learning_rate: 5.0000e-05\n","Epoch 23/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m67s\u001b[0m 95ms/step - accuracy: 0.7203 - loss: 0.7997 - val_accuracy: 0.7306 - val_loss: 0.7735 - learning_rate: 5.0000e-05\n","Epoch 24/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.7031 - loss: 0.8105 - val_accuracy: 0.7312 - val_loss: 0.7730 - learning_rate: 5.0000e-05\n","Epoch 25/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m67s\u001b[0m 95ms/step - accuracy: 0.7197 - loss: 0.7956 - val_accuracy: 0.7346 - val_loss: 0.7708 - learning_rate: 5.0000e-05\n","Epoch 26/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.6875 - loss: 0.8368 - val_accuracy: 0.7344 - val_loss: 0.7704 - learning_rate: 5.0000e-05\n","Epoch 27/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m68s\u001b[0m 95ms/step - accuracy: 0.7219 - loss: 0.7935 - val_accuracy: 0.7254 - val_loss: 0.7759 - learning_rate: 5.0000e-05\n","Epoch 28/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.8281 - loss: 0.5858 - val_accuracy: 0.7262 - val_loss: 0.7755 - learning_rate: 5.0000e-05\n","Epoch 29/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m68s\u001b[0m 95ms/step - accuracy: 0.7293 - loss: 0.7808 - val_accuracy: 0.7310 - val_loss: 0.7674 - learning_rate: 5.0000e-05\n","Epoch 30/30\n","\u001b[1m703/703\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.7188 - loss: 0.8182 - val_accuracy: 0.7304 - val_loss: 0.7686 - learning_rate: 5.0000e-05\n","\u001b[1m157/157\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.7269 - loss: 0.7629\n","InceptionV3 Transfer Learning Validation Accuracy: 0.7310\n","\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 21ms/step - accuracy: 0.7271 - loss: 0.7866\n","InceptionV3 Transfer Learning Test Accuracy: 0.7261\n"]}],"source":["# improved version of inception\n","\n","import numpy as np\n","import cv2\n","from tensorflow.keras.datasets import cifar10\n","from sklearn.model_selection import train_test_split\n","from tensorflow.keras.applications import InceptionV3\n","from tensorflow.keras.layers import GlobalAveragePooling2D, Dense, Dropout\n","from tensorflow.keras.models import Sequential\n","from tensorflow.keras.preprocessing.image import ImageDataGenerator\n","from tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau\n","import tensorflow as tf\n","\n","# Load CIFAR-10 dataset\n","(train_data, train_labels), (test_data, test_labels) = cifar10.load_data()\n","\n","# Normalize the data to be in the range [0, 1]\n","train_data = train_data.astype('float32') / 255.0\n","test_data = test_data.astype('float32') / 255.0\n","\n","# Split the training data further into train and validation sets\n","train_data, val_data, train_labels, val_labels = train_test_split(train_data, train_labels, test_size=0.1, random_state=42)\n","\n","# Function to resize images to a target size (now 75x75 for faster training)\n","def resize_images(data, size=(75, 75)):\n"," resized_data = np.array([cv2.resize(img, size) for img in data])\n"," return resized_data\n","\n","# Resize CIFAR-10 images to 75x75 to match InceptionV3 input size\n","train_data_resized = resize_images(train_data, size=(75, 75))\n","val_data_resized = resize_images(val_data, size=(75, 75))\n","test_data_resized = resize_images(test_data, size=(75, 75))\n","\n","# Simpler data augmentation (rotation, zoom, and flipping)\n","datagen = ImageDataGenerator(\n"," rotation_range=20, # Moderate rotation\n"," zoom_range=0.2, # Zoom in/out on images\n"," horizontal_flip=True, # Horizontal flipping\n"," fill_mode='nearest' # Fill mode for shifted pixels\n",")\n","datagen.fit(train_data_resized)\n","\n","# Load InceptionV3 pre-trained on ImageNet without the top layers\n","inception_model = InceptionV3(weights='imagenet', include_top=False, input_shape=(75, 75, 3))\n","\n","# Freeze all layers except the last 20 for fine-tuning\n","for layer in inception_model.layers[:-20]:\n"," layer.trainable = False\n","\n","# Build the transfer learning model\n","transfer_model = Sequential()\n","transfer_model.add(inception_model)\n","transfer_model.add(GlobalAveragePooling2D()) # Global average pooling instead of flattening\n","transfer_model.add(Dense(256, activation='relu')) # Only one dense layer to reduce complexity\n","transfer_model.add(Dropout(0.5))\n","transfer_model.add(Dense(10, activation='softmax')) # Output layer for CIFAR-10 (10 classes)\n","\n","# Compile the transfer learning model with a moderate learning rate\n","transfer_model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4), # Moderate learning rate\n"," loss='sparse_categorical_crossentropy',\n"," metrics=['accuracy'])\n","\n","# Callbacks for early stopping and learning rate reduction\n","early_stopping = EarlyStopping(monitor='val_loss', patience=8, restore_best_weights=True)\n","reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=4, min_lr=1e-6)\n","\n","# Train the transfer learning model\n","history_transfer = transfer_model.fit(\n"," datagen.flow(train_data_resized, train_labels, batch_size=64),\n"," steps_per_epoch=len(train_data_resized) // 64,\n"," epochs=30, # Reduced number of epochs for faster training\n"," validation_data=(val_data_resized, val_labels),\n"," callbacks=[early_stopping, reduce_lr]\n",")\n","\n","# Evaluate the fine-tuned transfer learning model\n","val_loss_transfer, val_accuracy_transfer = transfer_model.evaluate(val_data_resized, val_labels)\n","print(f\"InceptionV3 Transfer Learning Validation Accuracy: {val_accuracy_transfer:.4f}\")\n","\n","# Evaluate on test data\n","test_loss_transfer, test_accuracy_transfer = transfer_model.evaluate(test_data_resized, test_labels)\n","print(f\"InceptionV3 Transfer Learning Test Accuracy: {test_accuracy_transfer:.4f}\")\n"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":16112,"status":"ok","timestamp":1729167129244,"user":{"displayName":"Dusan Dokic","userId":"04036679371909441146"},"user_tz":-120},"id":"mGsEYZXDZCtH","outputId":"18717b77-7ee0-4cc3-8085-8ba496932cef"},"outputs":[{"name":"stdout","output_type":"stream","text":["Mounted at /content/drive\n"]}],"source":["from google.colab import drive\n","drive.mount('/content/drive')"]}],"metadata":{"accelerator":"GPU","colab":{"gpuType":"A100","machine_shape":"hm","provenance":[]},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.11.2"}},"nbformat":4,"nbformat_minor":0} diff --git a/README.md b/README.md deleted file mode 100644 index 65596e0e..00000000 --- a/README.md +++ /dev/null @@ -1,86 +0,0 @@ -![logo_ironhack_blue 7](https://user-images.githubusercontent.com/23629340/40541063-a07a0a8a-601a-11e8-91b5-2f13e4e6b441.png) - -# Project I | Deep Learning: Image Classification with CNN - -## Task Description - -Students will build a Convolutional Neural Network (CNN) model to classify images from a given dataset into predefined categories/classes. - -## Datasets (pick one!) - -1. The dataset for this task is the CIFAR-10 dataset, which consists of 60,000 32x32 color images in 10 classes, with 6,000 images per class. You can download the dataset from [here](https://www.cs.toronto.edu/~kriz/cifar.html). -2. The second dataset contains about 28,000 medium quality animal images belonging to 10 categories: dog, cat, horse, spyder, butterfly, chicken, sheep, cow, squirrel, elephant. The link is [here](https://www.kaggle.com/datasets/alessiocorrado99/animals10/data). - -## Assessment Components - -1. **Data Preprocessing** - - Data loading and preprocessing (e.g., normalization, resizing, augmentation). - - Create visualizations of some images, and labels. - -2. **Model Architecture** - - Design a CNN architecture suitable for image classification. - - Include convolutional layers, pooling layers, and fully connected layers. - -3. **Model Training** - - Train the CNN model using appropriate optimization techniques (e.g., stochastic gradient descent, Adam). - - Utilize techniques such as early stopping to prevent overfitting. - -4. **Model Evaluation** - - Evaluate the trained model on a separate validation set. - - Compute and report metrics such as accuracy, precision, recall, and F1-score. - - Visualize the confusion matrix to understand model performance across different classes. - -5. **Transfer Learning** - - Evaluate the accuracy of your model on a pre-trained models like ImagNet, VGG16, Inception... (pick one an justify your choice) - - You may find this [link](https://www.tensorflow.org/tutorials/images/transfer_learning_with_hub) helpful. - - [This](https://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html) is the Pytorch version. - - Perform transfer learning with your chosen pre-trained models i.e., you will probably try a few and choose the best one. - -5. **Code Quality** - - Well-structured and commented code. - - Proper documentation of functions and processes. - - Efficient use of libraries and resources. - -6. **Report** - - Write a concise report detailing the approach taken, including: - - Description of the chosen CNN architecture. - - Explanation of preprocessing steps. - - Details of the training process (e.g., learning rate, batch size, number of epochs). - - Results and analysis of models performance. - - What is your best model. Why? - - Insights gained from the experimentation process. - - Include visualizations and diagrams where necessary. - - 7. **Model deployment** - - Pick the best model - - Build an app using Flask - Can you host somewhere other than your laptop? **+5 Bonus points if you use [Tensorflow Serving](https://www.tensorflow.org/tfx/guide/serving)** - - User should be able to upload one or multiples images get predictions including probabilities for each prediction - - -## Evaluation Criteria - -- Accuracy of the trained models on the validation set. **30 points** -- Clarity and completeness of the report. **20 points** -- Quality of code implementation. **5 points** -- Proper handling of data preprocessing and models training. **30 points** -- Demonstration of understanding key concepts of deep learning. **5 points** -- Model deployment. **10 points** - - **Passing Score is 70 points**. - -## Submission Details - -- Deadline for submission: end of the week or as communicated by your teaching team. -- Submit the following: - 1. Python code files (`*.py`, `ipynb`) containing the model implementation and training process. - 2. A data folder with 5-10 images to test the deployed model/app if hosted somewhere else other than your laptop (strongly recommended! Not a must have) - 2. A PDF report documenting the approach, results, and analysis. - 3. Any additional files necessary for reproducing the results (e.g., requirements.txt, README.md). - 4. PPT presentation - -## Additional Notes - -- Students are encourage to experiment with different architectures, hyper-parameters, and optimization techniques. -- Provide guidance and resources for troubleshooting common issues during model training and evaluation. -- Students will discuss their approaches and findings in class during assessment evaluation sessions. - diff --git a/Report.docx b/Report.docx new file mode 100644 index 00000000..747ae246 Binary files /dev/null and b/Report.docx differ diff --git a/Report_Image_Processing_project.pdf b/Report_Image_Processing_project.pdf new file mode 100644 index 00000000..9db682f3 Binary files /dev/null and b/Report_Image_Processing_project.pdf differ diff --git a/app.py b/app.py new file mode 100644 index 00000000..329a10c4 --- /dev/null +++ b/app.py @@ -0,0 +1,66 @@ +from flask import Flask, request, render_template +import tensorflow as tf +import numpy as np +from PIL import Image + +# Initialize the Flask app (must be before defining routes) +app = Flask(__name__) + +# Load your pre-trained model (make sure to specify the correct path) +model = tf.keras.models.load_model("model.h5") # Adjust to your model's path + +# Class labels (for example, CIFAR-10) +labels = [ + "airplane", "automobile", "bird", "cat", "deer", + "dog", "frog", "horse", "ship", "truck" +] + +# Define a route for the homepage +@app.route('/') +def home(): + return render_template('upload.html') # Render the upload.html template + +# Define a route for handling image uploads and predictions +@app.route('/predict', methods=['POST']) +def predict(): + if 'file' not in request.files: + return "No file uploaded. Please select a file." + + file = request.files['file'] + + if file.filename == '': + return "No file selected. Please select a valid image file." + + if file: + try: + # Open the image and convert to RGB to ensure it has 3 channels + img = Image.open(file).convert('RGB') + + # Resize to match the model's input size + img = img.resize((32, 32)) + + # Convert the image to a NumPy array and normalize it + img_array = np.array(img) + img_array = np.expand_dims(img_array, axis=0) # Add batch dimension + img_array = img_array / 255.0 # Normalize the image + + # Make predictions + predictions = model.predict(img_array) + predicted_class = np.argmax(predictions) + predicted_label = labels[predicted_class] + + # Get probabilities for each class + probabilities = predictions[0] + class_probabilities = {label: f"{prob:.2f}%" for label, prob in zip(labels, probabilities * 100)} + + # Return the predicted class and probabilities + return render_template('result.html', predicted_label=predicted_label, class_probabilities=class_probabilities) + + except Exception as e: + return f"Error processing the image: {str(e)}" + + return "Something went wrong. Please try again." + +# Run the app +if __name__ == '__main__': + app.run(debug=True, host='0.0.0.0', port=5000) diff --git a/batches.meta b/batches.meta new file mode 100644 index 00000000..4467a6ec Binary files /dev/null and b/batches.meta differ diff --git a/data_batch_1 b/data_batch_1 new file mode 100644 index 00000000..ab404a5a Binary files /dev/null and b/data_batch_1 differ diff --git a/data_batch_2 b/data_batch_2 new file mode 100644 index 00000000..6bf1369a Binary files /dev/null and b/data_batch_2 differ diff --git a/data_batch_3 b/data_batch_3 new file mode 100644 index 00000000..66a0d630 Binary files /dev/null and b/data_batch_3 differ diff --git a/data_batch_4 b/data_batch_4 new file mode 100644 index 00000000..cf8d03d1 Binary files /dev/null and b/data_batch_4 differ diff --git a/data_batch_5 b/data_batch_5 new file mode 100644 index 00000000..468b2aa5 Binary files /dev/null and b/data_batch_5 differ diff --git a/model.h5 b/model.h5 new file mode 100644 index 00000000..82618425 Binary files /dev/null and b/model.h5 differ diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..1d196b6e --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +Flask==2.1.1 +tensorflow==2.17.0 +pillow==10.0.0 +numpy==1.26.4 +Werkzeug==2.0.3 # Downgraded for Flask compatibility diff --git a/result b/result new file mode 100644 index 00000000..cf442cde --- /dev/null +++ b/result @@ -0,0 +1,36 @@ + + + + + + Prediction Result + + + + +
+
+
+
+
+

Prediction Result

+

Predicted Class: {{ predicted_label }}

+
Class Probabilities:
+
    + {% for label, probability in class_probabilities.items() %} +
  • + {{ label }} + {{ probability }} +
  • + {% endfor %} +
+ Upload Another Image +
+
+
+
+
+ + + + diff --git a/static/css/style.css.txt b/static/css/style.css.txt new file mode 100644 index 00000000..c933d4e4 --- /dev/null +++ b/static/css/style.css.txt @@ -0,0 +1,23 @@ +body { + background-color: #f7f7f7; + font-family: Arial, sans-serif; +} + +.card { + margin-top: 50px; + padding: 20px; +} + +h3 { + margin-bottom: 20px; +} + +.btn-primary { + background-color: #007bff; + border-color: #007bff; +} + +.btn-primary:hover { + background-color: #0056b3; + border-color: #004085; +} diff --git a/templates.zip b/templates.zip new file mode 100644 index 00000000..a1cfd935 Binary files /dev/null and b/templates.zip differ diff --git a/templates/result.html b/templates/result.html new file mode 100644 index 00000000..cf442cde --- /dev/null +++ b/templates/result.html @@ -0,0 +1,36 @@ + + + + + + Prediction Result + + + + +
+
+
+
+
+

Prediction Result

+

Predicted Class: {{ predicted_label }}

+
Class Probabilities:
+
    + {% for label, probability in class_probabilities.items() %} +
  • + {{ label }} + {{ probability }} +
  • + {% endfor %} +
+ Upload Another Image +
+
+
+
+
+ + + + diff --git a/templates/upload.html b/templates/upload.html new file mode 100644 index 00000000..2ee69838 --- /dev/null +++ b/templates/upload.html @@ -0,0 +1,33 @@ + + + + + + Upload Image for Prediction + + + + + + +
+
+
+
+
+

Upload an Image for Prediction

+
+
+ +
+ +
+
+
+
+
+
+ + + + diff --git a/test_batch b/test_batch new file mode 100644 index 00000000..3e03f1fc Binary files /dev/null and b/test_batch differ