Paul2022 commited on
Commit
0b49fd0
Β·
verified Β·
1 Parent(s): b52cbac

Upload AIZAS.ipynb

Browse files
Files changed (1) hide show
  1. AIZAS.ipynb +676 -0
AIZAS.ipynb ADDED
@@ -0,0 +1,676 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "nbformat": 4,
3
+ "nbformat_minor": 0,
4
+ "metadata": {
5
+ "colab": {
6
+ "provenance": [],
7
+ "gpuType": "T4"
8
+ },
9
+ "kernelspec": {
10
+ "name": "python3",
11
+ "display_name": "Python 3"
12
+ },
13
+ "language_info": {
14
+ "name": "python"
15
+ },
16
+ "accelerator": "GPU"
17
+ },
18
+ "cells": [
19
+ {
20
+ "cell_type": "code",
21
+ "execution_count": 2,
22
+ "metadata": {
23
+ "id": "_5p2Mwu2TIGQ"
24
+ },
25
+ "outputs": [],
26
+ "source": [
27
+ "import tensorflow as tf\n",
28
+ "from tensorflow.keras.models import Sequential\n",
29
+ "from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout, GlobalAveragePooling2D, BatchNormalization\n",
30
+ "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n",
31
+ "from tensorflow.keras.applications import MobileNetV2\n",
32
+ "from tensorflow.keras.applications import VGG16\n",
33
+ "from tensorflow.keras.applications import ResNet101\n",
34
+ "from tensorflow.keras.callbacks import ModelCheckpoint, ReduceLROnPlateau\n",
35
+ "import numpy as np\n",
36
+ "import cv2\n",
37
+ "from PIL import Image\n",
38
+ "from google.colab import drive"
39
+ ]
40
+ },
41
+ {
42
+ "cell_type": "code",
43
+ "source": [
44
+ "drive.mount('/content/drive', force_remount=True)\n",
45
+ "\n",
46
+ "img_height, img_width = 128, 128\n",
47
+ "batch_size = 32\n",
48
+ "\n",
49
+ "train_datagen = ImageDataGenerator(\n",
50
+ " rescale=1.0 / 255,\n",
51
+ " width_shift_range=0.4,\n",
52
+ " height_shift_range=0.4,\n",
53
+ " shear_range=0.3,\n",
54
+ " zoom_range=0.4,\n",
55
+ " brightness_range=[0.7, 1.3],\n",
56
+ " fill_mode='nearest'\n",
57
+ ")\n",
58
+ "\n",
59
+ "test_datagen = ImageDataGenerator(rescale=1.0 / 255)\n",
60
+ "\n",
61
+ "#train_dir = drive.mount('/content/drive/My Drive/train')\n",
62
+ "#test_dir = drive.mount('/content/drive/test')\n",
63
+ "\n",
64
+ "train_generator = train_datagen.flow_from_directory(\n",
65
+ " '/content/drive/My Drive/train',\n",
66
+ " target_size=(img_height, img_width),\n",
67
+ " batch_size=batch_size,\n",
68
+ " class_mode='categorical',\n",
69
+ ")\n",
70
+ "test_generator = test_datagen.flow_from_directory(\n",
71
+ " '/content/drive/My Drive/test',\n",
72
+ " target_size=(img_height, img_width),\n",
73
+ " batch_size=batch_size,\n",
74
+ " class_mode='categorical',\n",
75
+ ")\n",
76
+ "\n",
77
+ "num_classes = len(train_generator.class_indices)\n",
78
+ "\n",
79
+ "base_model = MobileNetV2(input_shape=(img_height, img_width, 3), include_top=False, weights='imagenet')\n",
80
+ "base_model.trainable = True\n",
81
+ "\n",
82
+ "fine_tune_at = 50\n",
83
+ "for layer in base_model.layers[:fine_tune_at]:\n",
84
+ " layer.trainable = False\n",
85
+ "\n",
86
+ "model = Sequential([\n",
87
+ " base_model,\n",
88
+ " tf.keras.layers.GlobalAveragePooling2D(),\n",
89
+ " Dense(128, activation='relu'),\n",
90
+ " Dropout(0.1),\n",
91
+ " Dense(num_classes, activation='softmax')\n",
92
+ "])\n",
93
+ "\n",
94
+ "model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001),\n",
95
+ " loss='categorical_crossentropy',\n",
96
+ " metrics=['accuracy'])\n",
97
+ "\n",
98
+ "\n",
99
+ "checkpoint = ModelCheckpoint('best_gesture_modelv3.keras', monitor='val_accuracy', save_best_only=True)\n",
100
+ "lr_scheduler = ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=3, min_lr=1e-7)\n",
101
+ "\n",
102
+ "\n",
103
+ "history = model.fit(\n",
104
+ " train_generator,\n",
105
+ " epochs=40,\n",
106
+ " validation_data=test_generator,\n",
107
+ " callbacks=[checkpoint, lr_scheduler],\n",
108
+ " verbose=1\n",
109
+ ")\n",
110
+ "\n",
111
+ "test_loss, test_acc = model.evaluate(test_generator)\n",
112
+ "print(f\"Test Accuracy: {test_acc:.2f}\")"
113
+ ],
114
+ "metadata": {
115
+ "colab": {
116
+ "base_uri": "https://localhost:8080/"
117
+ },
118
+ "id": "K-y9dDwUThqG",
119
+ "outputId": "0bd99350-c89d-493a-a26e-0067a152b519"
120
+ },
121
+ "execution_count": null,
122
+ "outputs": [
123
+ {
124
+ "output_type": "stream",
125
+ "name": "stdout",
126
+ "text": [
127
+ "Mounted at /content/drive\n",
128
+ "Found 193 images belonging to 15 classes.\n",
129
+ "Found 48 images belonging to 15 classes.\n",
130
+ "Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/mobilenet_v2/mobilenet_v2_weights_tf_dim_ordering_tf_kernels_1.0_128_no_top.h5\n",
131
+ "\u001b[1m9406464/9406464\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 0us/step\n"
132
+ ]
133
+ },
134
+ {
135
+ "output_type": "stream",
136
+ "name": "stderr",
137
+ "text": [
138
+ "/usr/local/lib/python3.11/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",
139
+ " self._warn_if_super_not_called()\n"
140
+ ]
141
+ },
142
+ {
143
+ "output_type": "stream",
144
+ "name": "stdout",
145
+ "text": [
146
+ "Epoch 1/40\n",
147
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m143s\u001b[0m 16s/step - accuracy: 0.0500 - loss: 3.1214 - val_accuracy: 0.0833 - val_loss: 2.9348 - learning_rate: 1.0000e-04\n",
148
+ "Epoch 2/40\n",
149
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.1101 - loss: 2.7227 - val_accuracy: 0.0417 - val_loss: 2.9326 - learning_rate: 1.0000e-04\n",
150
+ "Epoch 3/40\n",
151
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.1253 - loss: 2.8014 - val_accuracy: 0.0625 - val_loss: 2.9286 - learning_rate: 1.0000e-04\n",
152
+ "Epoch 4/40\n",
153
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.1542 - loss: 2.6855 - val_accuracy: 0.0625 - val_loss: 2.8989 - learning_rate: 1.0000e-04\n",
154
+ "Epoch 5/40\n",
155
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.1944 - loss: 2.5662 - val_accuracy: 0.0208 - val_loss: 2.8697 - learning_rate: 1.0000e-04\n",
156
+ "Epoch 6/40\n",
157
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.1864 - loss: 2.5953 - val_accuracy: 0.0625 - val_loss: 2.8631 - learning_rate: 1.0000e-04\n",
158
+ "Epoch 7/40\n",
159
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.1571 - loss: 2.5184 - val_accuracy: 0.0208 - val_loss: 2.8937 - learning_rate: 1.0000e-04\n",
160
+ "Epoch 8/40\n",
161
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.2051 - loss: 2.4037 - val_accuracy: 0.0417 - val_loss: 2.9367 - learning_rate: 1.0000e-04\n",
162
+ "Epoch 9/40\n",
163
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 1s/step - accuracy: 0.2239 - loss: 2.4019 - val_accuracy: 0.0417 - val_loss: 2.9668 - learning_rate: 1.0000e-04\n",
164
+ "Epoch 10/40\n",
165
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 1s/step - accuracy: 0.2329 - loss: 2.2684 - val_accuracy: 0.0208 - val_loss: 2.9748 - learning_rate: 5.0000e-05\n",
166
+ "Epoch 11/40\n",
167
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.2550 - loss: 2.3164 - val_accuracy: 0.0417 - val_loss: 2.9701 - learning_rate: 5.0000e-05\n",
168
+ "Epoch 12/40\n",
169
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.2456 - loss: 2.2969 - val_accuracy: 0.0417 - val_loss: 2.9685 - learning_rate: 5.0000e-05\n",
170
+ "Epoch 13/40\n",
171
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.2800 - loss: 2.2543 - val_accuracy: 0.0625 - val_loss: 2.9561 - learning_rate: 2.5000e-05\n",
172
+ "Epoch 14/40\n",
173
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.2986 - loss: 2.2308 - val_accuracy: 0.0625 - val_loss: 2.9499 - learning_rate: 2.5000e-05\n",
174
+ "Epoch 15/40\n",
175
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.3196 - loss: 2.1914 - val_accuracy: 0.0625 - val_loss: 2.9382 - learning_rate: 2.5000e-05\n",
176
+ "Epoch 16/40\n",
177
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.3265 - loss: 2.1753 - val_accuracy: 0.0625 - val_loss: 2.9261 - learning_rate: 1.2500e-05\n",
178
+ "Epoch 17/40\n",
179
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.2681 - loss: 2.2356 - val_accuracy: 0.0625 - val_loss: 2.9148 - learning_rate: 1.2500e-05\n",
180
+ "Epoch 18/40\n",
181
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 1s/step - accuracy: 0.3476 - loss: 2.1523 - val_accuracy: 0.0625 - val_loss: 2.9075 - learning_rate: 1.2500e-05\n",
182
+ "Epoch 19/40\n",
183
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.3787 - loss: 2.1633 - val_accuracy: 0.0625 - val_loss: 2.9028 - learning_rate: 6.2500e-06\n",
184
+ "Epoch 20/40\n",
185
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.2549 - loss: 2.2529 - val_accuracy: 0.0625 - val_loss: 2.9003 - learning_rate: 6.2500e-06\n",
186
+ "Epoch 21/40\n",
187
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.3267 - loss: 2.1246 - val_accuracy: 0.0625 - val_loss: 2.8970 - learning_rate: 6.2500e-06\n",
188
+ "Epoch 22/40\n",
189
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.3322 - loss: 2.1383 - val_accuracy: 0.0625 - val_loss: 2.8937 - learning_rate: 3.1250e-06\n",
190
+ "Epoch 23/40\n",
191
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.3578 - loss: 2.1770 - val_accuracy: 0.0417 - val_loss: 2.8900 - learning_rate: 3.1250e-06\n",
192
+ "Epoch 24/40\n",
193
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.3476 - loss: 2.0950 - val_accuracy: 0.0417 - val_loss: 2.8865 - learning_rate: 3.1250e-06\n",
194
+ "Epoch 25/40\n",
195
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.2883 - loss: 2.1147 - val_accuracy: 0.0417 - val_loss: 2.8838 - learning_rate: 1.5625e-06\n",
196
+ "Epoch 26/40\n",
197
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 1s/step - accuracy: 0.3700 - loss: 2.1417 - val_accuracy: 0.0417 - val_loss: 2.8807 - learning_rate: 1.5625e-06\n",
198
+ "Epoch 27/40\n",
199
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.3291 - loss: 2.1273 - val_accuracy: 0.0417 - val_loss: 2.8780 - learning_rate: 1.5625e-06\n",
200
+ "Epoch 28/40\n",
201
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.3380 - loss: 2.1353 - val_accuracy: 0.0417 - val_loss: 2.8761 - learning_rate: 7.8125e-07\n",
202
+ "Epoch 29/40\n",
203
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.3212 - loss: 2.0647 - val_accuracy: 0.0417 - val_loss: 2.8753 - learning_rate: 7.8125e-07\n",
204
+ "Epoch 30/40\n",
205
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 1s/step - accuracy: 0.2941 - loss: 2.1648 - val_accuracy: 0.0417 - val_loss: 2.8745 - learning_rate: 7.8125e-07\n",
206
+ "Epoch 31/40\n",
207
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.2853 - loss: 2.1914 - val_accuracy: 0.0417 - val_loss: 2.8742 - learning_rate: 3.9062e-07\n",
208
+ "Epoch 32/40\n",
209
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.1990 - loss: 2.2525 - val_accuracy: 0.0417 - val_loss: 2.8743 - learning_rate: 3.9062e-07\n",
210
+ "Epoch 33/40\n",
211
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.3496 - loss: 2.1648 - val_accuracy: 0.0417 - val_loss: 2.8740 - learning_rate: 3.9062e-07\n",
212
+ "Epoch 34/40\n",
213
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 1s/step - accuracy: 0.2906 - loss: 2.2072 - val_accuracy: 0.0417 - val_loss: 2.8737 - learning_rate: 1.9531e-07\n",
214
+ "Epoch 35/40\n",
215
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.3541 - loss: 2.1300 - val_accuracy: 0.0417 - val_loss: 2.8737 - learning_rate: 1.9531e-07\n",
216
+ "Epoch 36/40\n",
217
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.3631 - loss: 2.1298 - val_accuracy: 0.0417 - val_loss: 2.8743 - learning_rate: 1.9531e-07\n",
218
+ "Epoch 37/40\n",
219
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.3871 - loss: 2.1149 - val_accuracy: 0.0417 - val_loss: 2.8751 - learning_rate: 1.0000e-07\n",
220
+ "Epoch 38/40\n",
221
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.3029 - loss: 2.2003 - val_accuracy: 0.0417 - val_loss: 2.8760 - learning_rate: 1.0000e-07\n",
222
+ "Epoch 39/40\n",
223
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.4146 - loss: 1.9679 - val_accuracy: 0.0417 - val_loss: 2.8766 - learning_rate: 1.0000e-07\n",
224
+ "Epoch 40/40\n",
225
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.2484 - loss: 2.3004 - val_accuracy: 0.0417 - val_loss: 2.8779 - learning_rate: 1.0000e-07\n",
226
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 697ms/step - accuracy: 0.0486 - loss: 2.9181\n",
227
+ "Test Accuracy: 0.04\n"
228
+ ]
229
+ }
230
+ ]
231
+ },
232
+ {
233
+ "cell_type": "markdown",
234
+ "source": [
235
+ "VGG"
236
+ ],
237
+ "metadata": {
238
+ "id": "wSEiG9KeYy-y"
239
+ }
240
+ },
241
+ {
242
+ "cell_type": "code",
243
+ "source": [
244
+ "drive.mount('/content/drive', force_remount=True)\n",
245
+ "\n",
246
+ "img_height, img_width = 128, 128\n",
247
+ "batch_size = 32\n",
248
+ "\n",
249
+ "train_datagen = ImageDataGenerator(\n",
250
+ " rescale=1.0 / 255,\n",
251
+ " width_shift_range=0.2,\n",
252
+ " height_shift_range=0.2,\n",
253
+ " shear_range=0.1,\n",
254
+ " zoom_range=0.2,\n",
255
+ " brightness_range=[0.8, 1.4],\n",
256
+ " fill_mode='nearest'\n",
257
+ ")\n",
258
+ "\n",
259
+ "test_datagen = ImageDataGenerator(rescale=1.0 / 255)\n",
260
+ "\n",
261
+ "#train_dir = drive.mount('/content/drive/My Drive/train')\n",
262
+ "#test_dir = drive.mount('/content/drive/test')\n",
263
+ "\n",
264
+ "train_generator = train_datagen.flow_from_directory(\n",
265
+ " '/content/drive/My Drive/train',\n",
266
+ " target_size=(img_height, img_width),\n",
267
+ " batch_size=batch_size,\n",
268
+ " class_mode='categorical',\n",
269
+ ")\n",
270
+ "test_generator = test_datagen.flow_from_directory(\n",
271
+ " '/content/drive/My Drive/test',\n",
272
+ " target_size=(img_height, img_width),\n",
273
+ " batch_size=batch_size,\n",
274
+ " class_mode='categorical',\n",
275
+ ")\n",
276
+ "\n",
277
+ "num_classes = len(train_generator.class_indices)\n",
278
+ "\n",
279
+ "base_model = VGG16(input_shape=(img_height, img_width, 3), include_top=False, weights='imagenet')\n",
280
+ "base_model.trainable = True\n",
281
+ "\n",
282
+ "fine_tune_at = 30\n",
283
+ "for layer in base_model.layers[:fine_tune_at]:\n",
284
+ " layer.trainable = False\n",
285
+ "\n",
286
+ "model = Sequential([\n",
287
+ " base_model,\n",
288
+ " GlobalAveragePooling2D(),\n",
289
+ " Dense(512, activation='relu'),\n",
290
+ " BatchNormalization(),\n",
291
+ " Dropout(0.5),\n",
292
+ " Dense(128, activation='relu'),\n",
293
+ " BatchNormalization(),\n",
294
+ " Dropout(0.3),\n",
295
+ " Dense(num_classes, activation='softmax')\n",
296
+ "])\n",
297
+ "\n",
298
+ "model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001),\n",
299
+ " loss='categorical_crossentropy',\n",
300
+ " metrics=['accuracy'])\n",
301
+ "\n",
302
+ "\n",
303
+ "checkpoint = ModelCheckpoint('vgg16.keras', monitor='val_accuracy', save_best_only=True)\n",
304
+ "lr_scheduler = ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=3, min_lr=1e-7)\n",
305
+ "\n",
306
+ "\n",
307
+ "history = model.fit(\n",
308
+ " train_generator,\n",
309
+ " epochs=60,\n",
310
+ " validation_data=test_generator,\n",
311
+ " callbacks=[checkpoint, lr_scheduler],\n",
312
+ " verbose=1\n",
313
+ ")\n",
314
+ "\n",
315
+ "test_loss, test_acc = model.evaluate(test_generator)\n",
316
+ "print(f\"Test Accuracy: {test_acc:.2f}\")"
317
+ ],
318
+ "metadata": {
319
+ "colab": {
320
+ "base_uri": "https://localhost:8080/"
321
+ },
322
+ "id": "sad3cWZ1YyHR",
323
+ "outputId": "0d91bbab-04e3-477c-8732-4a6a322e400b"
324
+ },
325
+ "execution_count": 3,
326
+ "outputs": [
327
+ {
328
+ "output_type": "stream",
329
+ "name": "stdout",
330
+ "text": [
331
+ "Mounted at /content/drive\n",
332
+ "Found 193 images belonging to 15 classes.\n",
333
+ "Found 48 images belonging to 15 classes.\n",
334
+ "Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5\n",
335
+ "\u001b[1m58889256/58889256\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 0us/step\n"
336
+ ]
337
+ },
338
+ {
339
+ "output_type": "stream",
340
+ "name": "stderr",
341
+ "text": [
342
+ "/usr/local/lib/python3.11/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",
343
+ " self._warn_if_super_not_called()\n"
344
+ ]
345
+ },
346
+ {
347
+ "output_type": "stream",
348
+ "name": "stdout",
349
+ "text": [
350
+ "Epoch 1/60\n",
351
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m114s\u001b[0m 18s/step - accuracy: 0.0697 - loss: 3.5871 - val_accuracy: 0.1042 - val_loss: 2.7342 - learning_rate: 1.0000e-04\n",
352
+ "Epoch 2/60\n",
353
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.1032 - loss: 3.6171 - val_accuracy: 0.0208 - val_loss: 2.7330 - learning_rate: 1.0000e-04\n",
354
+ "Epoch 3/60\n",
355
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0780 - loss: 3.7272 - val_accuracy: 0.0417 - val_loss: 2.7355 - learning_rate: 1.0000e-04\n",
356
+ "Epoch 4/60\n",
357
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0505 - loss: 3.6381 - val_accuracy: 0.0417 - val_loss: 2.7377 - learning_rate: 1.0000e-04\n",
358
+ "Epoch 5/60\n",
359
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 2s/step - accuracy: 0.0983 - loss: 3.1623 - val_accuracy: 0.0417 - val_loss: 2.7413 - learning_rate: 1.0000e-04\n",
360
+ "Epoch 6/60\n",
361
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 2s/step - accuracy: 0.0923 - loss: 3.5297 - val_accuracy: 0.0417 - val_loss: 2.7456 - learning_rate: 5.0000e-05\n",
362
+ "Epoch 7/60\n",
363
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 2s/step - accuracy: 0.1205 - loss: 3.4905 - val_accuracy: 0.0208 - val_loss: 2.7500 - learning_rate: 5.0000e-05\n",
364
+ "Epoch 8/60\n",
365
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0889 - loss: 3.5568 - val_accuracy: 0.0417 - val_loss: 2.7524 - learning_rate: 5.0000e-05\n",
366
+ "Epoch 9/60\n",
367
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 2s/step - accuracy: 0.0592 - loss: 3.4036 - val_accuracy: 0.0625 - val_loss: 2.7553 - learning_rate: 2.5000e-05\n",
368
+ "Epoch 10/60\n",
369
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0870 - loss: 3.1887 - val_accuracy: 0.0625 - val_loss: 2.7604 - learning_rate: 2.5000e-05\n",
370
+ "Epoch 11/60\n",
371
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0482 - loss: 3.5545 - val_accuracy: 0.0625 - val_loss: 2.7646 - learning_rate: 2.5000e-05\n",
372
+ "Epoch 12/60\n",
373
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0598 - loss: 3.7139 - val_accuracy: 0.0625 - val_loss: 2.7695 - learning_rate: 1.2500e-05\n",
374
+ "Epoch 13/60\n",
375
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.1209 - loss: 3.2395 - val_accuracy: 0.0625 - val_loss: 2.7739 - learning_rate: 1.2500e-05\n",
376
+ "Epoch 14/60\n",
377
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.1325 - loss: 3.2030 - val_accuracy: 0.0625 - val_loss: 2.7769 - learning_rate: 1.2500e-05\n",
378
+ "Epoch 15/60\n",
379
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.0858 - loss: 3.2952 - val_accuracy: 0.0625 - val_loss: 2.7808 - learning_rate: 6.2500e-06\n",
380
+ "Epoch 16/60\n",
381
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.0241 - loss: 3.4605 - val_accuracy: 0.0625 - val_loss: 2.7852 - learning_rate: 6.2500e-06\n",
382
+ "Epoch 17/60\n",
383
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 2s/step - accuracy: 0.0944 - loss: 3.7185 - val_accuracy: 0.0625 - val_loss: 2.7903 - learning_rate: 6.2500e-06\n",
384
+ "Epoch 18/60\n",
385
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 2s/step - accuracy: 0.1432 - loss: 3.3166 - val_accuracy: 0.0833 - val_loss: 2.7955 - learning_rate: 3.1250e-06\n",
386
+ "Epoch 19/60\n",
387
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0827 - loss: 3.3849 - val_accuracy: 0.0833 - val_loss: 2.7992 - learning_rate: 3.1250e-06\n",
388
+ "Epoch 20/60\n",
389
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0877 - loss: 3.4278 - val_accuracy: 0.0833 - val_loss: 2.8021 - learning_rate: 3.1250e-06\n",
390
+ "Epoch 21/60\n",
391
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 2s/step - accuracy: 0.0601 - loss: 3.4611 - val_accuracy: 0.0833 - val_loss: 2.8062 - learning_rate: 1.5625e-06\n",
392
+ "Epoch 22/60\n",
393
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 2s/step - accuracy: 0.0964 - loss: 3.2501 - val_accuracy: 0.1042 - val_loss: 2.8106 - learning_rate: 1.5625e-06\n",
394
+ "Epoch 23/60\n",
395
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 2s/step - accuracy: 0.0693 - loss: 3.4165 - val_accuracy: 0.1042 - val_loss: 2.8136 - learning_rate: 1.5625e-06\n",
396
+ "Epoch 24/60\n",
397
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.1012 - loss: 3.4161 - val_accuracy: 0.1042 - val_loss: 2.8169 - learning_rate: 7.8125e-07\n",
398
+ "Epoch 25/60\n",
399
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 2s/step - accuracy: 0.1027 - loss: 3.3067 - val_accuracy: 0.1042 - val_loss: 2.8209 - learning_rate: 7.8125e-07\n",
400
+ "Epoch 26/60\n",
401
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0897 - loss: 3.3998 - val_accuracy: 0.1042 - val_loss: 2.8222 - learning_rate: 7.8125e-07\n",
402
+ "Epoch 27/60\n",
403
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.1422 - loss: 3.1982 - val_accuracy: 0.1042 - val_loss: 2.8235 - learning_rate: 3.9062e-07\n",
404
+ "Epoch 28/60\n",
405
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 1s/step - accuracy: 0.0563 - loss: 3.5046 - val_accuracy: 0.1042 - val_loss: 2.8257 - learning_rate: 3.9062e-07\n",
406
+ "Epoch 29/60\n",
407
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0840 - loss: 3.5335 - val_accuracy: 0.1042 - val_loss: 2.8265 - learning_rate: 3.9062e-07\n",
408
+ "Epoch 30/60\n",
409
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0547 - loss: 3.2821 - val_accuracy: 0.1250 - val_loss: 2.8274 - learning_rate: 1.9531e-07\n",
410
+ "Epoch 31/60\n",
411
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0486 - loss: 3.6547 - val_accuracy: 0.1250 - val_loss: 2.8293 - learning_rate: 1.9531e-07\n",
412
+ "Epoch 32/60\n",
413
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0594 - loss: 3.5702 - val_accuracy: 0.1250 - val_loss: 2.8300 - learning_rate: 1.9531e-07\n",
414
+ "Epoch 33/60\n",
415
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.1044 - loss: 3.4660 - val_accuracy: 0.1250 - val_loss: 2.8312 - learning_rate: 1.0000e-07\n",
416
+ "Epoch 34/60\n",
417
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0632 - loss: 3.5980 - val_accuracy: 0.1042 - val_loss: 2.8312 - learning_rate: 1.0000e-07\n",
418
+ "Epoch 35/60\n",
419
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0627 - loss: 3.3665 - val_accuracy: 0.1042 - val_loss: 2.8321 - learning_rate: 1.0000e-07\n",
420
+ "Epoch 36/60\n",
421
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 2s/step - accuracy: 0.1257 - loss: 3.1488 - val_accuracy: 0.1042 - val_loss: 2.8326 - learning_rate: 1.0000e-07\n",
422
+ "Epoch 37/60\n",
423
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0786 - loss: 3.2977 - val_accuracy: 0.1042 - val_loss: 2.8330 - learning_rate: 1.0000e-07\n",
424
+ "Epoch 38/60\n",
425
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0589 - loss: 3.3001 - val_accuracy: 0.1042 - val_loss: 2.8340 - learning_rate: 1.0000e-07\n",
426
+ "Epoch 39/60\n",
427
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.1149 - loss: 3.1617 - val_accuracy: 0.0833 - val_loss: 2.8341 - learning_rate: 1.0000e-07\n",
428
+ "Epoch 40/60\n",
429
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 2s/step - accuracy: 0.1173 - loss: 3.1317 - val_accuracy: 0.0833 - val_loss: 2.8367 - learning_rate: 1.0000e-07\n",
430
+ "Epoch 41/60\n",
431
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.1028 - loss: 3.4210 - val_accuracy: 0.0833 - val_loss: 2.8378 - learning_rate: 1.0000e-07\n",
432
+ "Epoch 42/60\n",
433
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 2s/step - accuracy: 0.1281 - loss: 3.3097 - val_accuracy: 0.0833 - val_loss: 2.8398 - learning_rate: 1.0000e-07\n",
434
+ "Epoch 43/60\n",
435
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0660 - loss: 3.3015 - val_accuracy: 0.0833 - val_loss: 2.8421 - learning_rate: 1.0000e-07\n",
436
+ "Epoch 44/60\n",
437
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m21s\u001b[0m 2s/step - accuracy: 0.0831 - loss: 3.3642 - val_accuracy: 0.1042 - val_loss: 2.8440 - learning_rate: 1.0000e-07\n",
438
+ "Epoch 45/60\n",
439
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0822 - loss: 3.4957 - val_accuracy: 0.1042 - val_loss: 2.8466 - learning_rate: 1.0000e-07\n",
440
+ "Epoch 46/60\n",
441
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0691 - loss: 3.2828 - val_accuracy: 0.0833 - val_loss: 2.8496 - learning_rate: 1.0000e-07\n",
442
+ "Epoch 47/60\n",
443
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 2s/step - accuracy: 0.1451 - loss: 3.1811 - val_accuracy: 0.0833 - val_loss: 2.8513 - learning_rate: 1.0000e-07\n",
444
+ "Epoch 48/60\n",
445
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 1s/step - accuracy: 0.1013 - loss: 3.3275 - val_accuracy: 0.0833 - val_loss: 2.8552 - learning_rate: 1.0000e-07\n",
446
+ "Epoch 49/60\n",
447
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.1110 - loss: 3.3551 - val_accuracy: 0.0833 - val_loss: 2.8581 - learning_rate: 1.0000e-07\n",
448
+ "Epoch 50/60\n",
449
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 2s/step - accuracy: 0.0902 - loss: 3.6329 - val_accuracy: 0.0625 - val_loss: 2.8625 - learning_rate: 1.0000e-07\n",
450
+ "Epoch 51/60\n",
451
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0785 - loss: 3.5301 - val_accuracy: 0.0625 - val_loss: 2.8652 - learning_rate: 1.0000e-07\n",
452
+ "Epoch 52/60\n",
453
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0515 - loss: 3.3818 - val_accuracy: 0.0625 - val_loss: 2.8696 - learning_rate: 1.0000e-07\n",
454
+ "Epoch 53/60\n",
455
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 2s/step - accuracy: 0.1078 - loss: 3.3925 - val_accuracy: 0.0625 - val_loss: 2.8749 - learning_rate: 1.0000e-07\n",
456
+ "Epoch 54/60\n",
457
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 2s/step - accuracy: 0.0614 - loss: 3.4074 - val_accuracy: 0.0625 - val_loss: 2.8795 - learning_rate: 1.0000e-07\n",
458
+ "Epoch 55/60\n",
459
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.1368 - loss: 3.0376 - val_accuracy: 0.0833 - val_loss: 2.8855 - learning_rate: 1.0000e-07\n",
460
+ "Epoch 56/60\n",
461
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.1080 - loss: 3.2748 - val_accuracy: 0.0833 - val_loss: 2.8916 - learning_rate: 1.0000e-07\n",
462
+ "Epoch 57/60\n",
463
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.1417 - loss: 3.0505 - val_accuracy: 0.0833 - val_loss: 2.8967 - learning_rate: 1.0000e-07\n",
464
+ "Epoch 58/60\n",
465
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 2s/step - accuracy: 0.0981 - loss: 3.1405 - val_accuracy: 0.0833 - val_loss: 2.9039 - learning_rate: 1.0000e-07\n",
466
+ "Epoch 59/60\n",
467
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0876 - loss: 3.5637 - val_accuracy: 0.0833 - val_loss: 2.9103 - learning_rate: 1.0000e-07\n",
468
+ "Epoch 60/60\n",
469
+ "\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.1031 - loss: 3.4345 - val_accuracy: 0.0833 - val_loss: 2.9144 - learning_rate: 1.0000e-07\n",
470
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 556ms/step - accuracy: 0.0868 - loss: 2.9154\n",
471
+ "Test Accuracy: 0.08\n"
472
+ ]
473
+ }
474
+ ]
475
+ },
476
+ {
477
+ "cell_type": "markdown",
478
+ "source": [
479
+ "ResNet-101"
480
+ ],
481
+ "metadata": {
482
+ "id": "WGYKSjzvc_pY"
483
+ }
484
+ },
485
+ {
486
+ "cell_type": "code",
487
+ "source": [
488
+ "drive.mount('/content/drive', force_remount=True)\n",
489
+ "\n",
490
+ "img_height, img_width = 128, 128\n",
491
+ "batch_size = 32\n",
492
+ "\n",
493
+ "train_datagen = ImageDataGenerator(\n",
494
+ " rescale=1.0 / 255,\n",
495
+ " width_shift_range=0.4,\n",
496
+ " height_shift_range=0.4,\n",
497
+ " shear_range=0.3,\n",
498
+ " zoom_range=0.4,\n",
499
+ " brightness_range=[0.7, 1.3],\n",
500
+ " fill_mode='nearest'\n",
501
+ ")\n",
502
+ "\n",
503
+ "test_datagen = ImageDataGenerator(rescale=1.0 / 255)\n",
504
+ "\n",
505
+ "#train_dir = drive.mount('/content/drive/My Drive/train')\n",
506
+ "#test_dir = drive.mount('/content/drive/test')\n",
507
+ "\n",
508
+ "train_generator = train_datagen.flow_from_directory(\n",
509
+ " '/content/drive/My Drive/train',\n",
510
+ " target_size=(img_height, img_width),\n",
511
+ " batch_size=batch_size,\n",
512
+ " class_mode='categorical',\n",
513
+ ")\n",
514
+ "test_generator = test_datagen.flow_from_directory(\n",
515
+ " '/content/drive/My Drive/test',\n",
516
+ " target_size=(img_height, img_width),\n",
517
+ " batch_size=batch_size,\n",
518
+ " class_mode='categorical',\n",
519
+ ")\n",
520
+ "\n",
521
+ "num_classes = len(train_generator.class_indices)\n",
522
+ "\n",
523
+ "base_model = ResNet101(input_shape=(img_height, img_width, 3), include_top=False, weights='imagenet')\n",
524
+ "base_model.trainable = True\n",
525
+ "\n",
526
+ "fine_tune_at = 50\n",
527
+ "for layer in base_model.layers[:fine_tune_at]:\n",
528
+ " layer.trainable = False\n",
529
+ "\n",
530
+ "model = Sequential([\n",
531
+ " base_model,\n",
532
+ " tf.keras.layers.GlobalAveragePooling2D(),\n",
533
+ " Dense(128, activation='relu'),\n",
534
+ " Dense(num_classes, activation='softmax')\n",
535
+ "])\n",
536
+ "\n",
537
+ "model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001),\n",
538
+ " loss='categorical_crossentropy',\n",
539
+ " metrics=['accuracy'])\n",
540
+ "\n",
541
+ "\n",
542
+ "checkpoint = ModelCheckpoint('resnet101.keras', monitor='val_accuracy', save_best_only=True)\n",
543
+ "lr_scheduler = ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=3, min_lr=1e-7)\n",
544
+ "\n",
545
+ "\n",
546
+ "history = model.fit(\n",
547
+ " train_generator,\n",
548
+ " epochs=40,\n",
549
+ " validation_data=test_generator,\n",
550
+ " callbacks=[checkpoint, lr_scheduler],\n",
551
+ " verbose=1\n",
552
+ ")\n",
553
+ "\n",
554
+ "test_loss, test_acc = model.evaluate(test_generator)\n",
555
+ "print(f\"Test Accuracy: {test_acc:.2f}\")"
556
+ ],
557
+ "metadata": {
558
+ "colab": {
559
+ "base_uri": "https://localhost:8080/"
560
+ },
561
+ "id": "S_Hf870-c_Ew",
562
+ "outputId": "ba95ef6a-1f3e-4217-f642-1cf240b19dd1"
563
+ },
564
+ "execution_count": null,
565
+ "outputs": [
566
+ {
567
+ "output_type": "stream",
568
+ "name": "stdout",
569
+ "text": [
570
+ "Mounted at /content/drive\n",
571
+ "Found 170 images belonging to 15 classes.\n",
572
+ "Found 48 images belonging to 15 classes.\n",
573
+ "Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/resnet/resnet101_weights_tf_dim_ordering_tf_kernels_notop.h5\n",
574
+ "\u001b[1m171446536/171446536\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 0us/step\n"
575
+ ]
576
+ },
577
+ {
578
+ "output_type": "stream",
579
+ "name": "stderr",
580
+ "text": [
581
+ "/usr/local/lib/python3.11/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",
582
+ " self._warn_if_super_not_called()\n"
583
+ ]
584
+ },
585
+ {
586
+ "output_type": "stream",
587
+ "name": "stdout",
588
+ "text": [
589
+ "Epoch 1/40\n",
590
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m146s\u001b[0m 10s/step - accuracy: 0.0789 - loss: 2.9116 - val_accuracy: 0.0625 - val_loss: 2.7983 - learning_rate: 1.0000e-04\n",
591
+ "Epoch 2/40\n",
592
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 3s/step - accuracy: 0.0556 - loss: 2.9133 - val_accuracy: 0.0833 - val_loss: 2.8432 - learning_rate: 1.0000e-04\n",
593
+ "Epoch 3/40\n",
594
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 2s/step - accuracy: 0.1634 - loss: 2.6830 - val_accuracy: 0.0833 - val_loss: 2.9291 - learning_rate: 1.0000e-04\n",
595
+ "Epoch 4/40\n",
596
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 2s/step - accuracy: 0.0560 - loss: 2.7547 - val_accuracy: 0.0833 - val_loss: 2.9220 - learning_rate: 1.0000e-04\n",
597
+ "Epoch 5/40\n",
598
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 1s/step - accuracy: 0.1092 - loss: 2.6772 - val_accuracy: 0.0833 - val_loss: 2.9073 - learning_rate: 5.0000e-05\n",
599
+ "Epoch 6/40\n",
600
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 2s/step - accuracy: 0.0707 - loss: 2.7271 - val_accuracy: 0.0833 - val_loss: 2.9122 - learning_rate: 5.0000e-05\n",
601
+ "Epoch 7/40\n",
602
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.0592 - loss: 2.7380 - val_accuracy: 0.0625 - val_loss: 2.9004 - learning_rate: 5.0000e-05\n",
603
+ "Epoch 8/40\n",
604
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 1s/step - accuracy: 0.0927 - loss: 2.6922 - val_accuracy: 0.0208 - val_loss: 2.8987 - learning_rate: 2.5000e-05\n",
605
+ "Epoch 9/40\n",
606
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 1s/step - accuracy: 0.1062 - loss: 2.6706 - val_accuracy: 0.0208 - val_loss: 2.8802 - learning_rate: 2.5000e-05\n",
607
+ "Epoch 10/40\n",
608
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.1129 - loss: 2.6362 - val_accuracy: 0.0208 - val_loss: 2.8727 - learning_rate: 2.5000e-05\n",
609
+ "Epoch 11/40\n",
610
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.0989 - loss: 2.6283 - val_accuracy: 0.0208 - val_loss: 2.8892 - learning_rate: 1.2500e-05\n",
611
+ "Epoch 12/40\n",
612
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 1s/step - accuracy: 0.1212 - loss: 2.6572 - val_accuracy: 0.0208 - val_loss: 2.9184 - learning_rate: 1.2500e-05\n",
613
+ "Epoch 13/40\n",
614
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 2s/step - accuracy: 0.1005 - loss: 2.6318 - val_accuracy: 0.0208 - val_loss: 2.9502 - learning_rate: 1.2500e-05\n",
615
+ "Epoch 14/40\n",
616
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 2s/step - accuracy: 0.1462 - loss: 2.6719 - val_accuracy: 0.0208 - val_loss: 2.9793 - learning_rate: 6.2500e-06\n",
617
+ "Epoch 15/40\n",
618
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.0964 - loss: 2.6530 - val_accuracy: 0.0208 - val_loss: 3.0152 - learning_rate: 6.2500e-06\n",
619
+ "Epoch 16/40\n",
620
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 2s/step - accuracy: 0.1354 - loss: 2.6552 - val_accuracy: 0.0208 - val_loss: 3.0565 - learning_rate: 6.2500e-06\n",
621
+ "Epoch 17/40\n",
622
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 2s/step - accuracy: 0.1627 - loss: 2.6198 - val_accuracy: 0.0208 - val_loss: 3.1010 - learning_rate: 3.1250e-06\n",
623
+ "Epoch 18/40\n",
624
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 2s/step - accuracy: 0.1138 - loss: 2.6585 - val_accuracy: 0.0208 - val_loss: 3.1349 - learning_rate: 3.1250e-06\n",
625
+ "Epoch 19/40\n",
626
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.1350 - loss: 2.6200 - val_accuracy: 0.0208 - val_loss: 3.1741 - learning_rate: 3.1250e-06\n",
627
+ "Epoch 20/40\n",
628
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 2s/step - accuracy: 0.1458 - loss: 2.6000 - val_accuracy: 0.0208 - val_loss: 3.2260 - learning_rate: 1.5625e-06\n",
629
+ "Epoch 21/40\n",
630
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 2s/step - accuracy: 0.1135 - loss: 2.6358 - val_accuracy: 0.0208 - val_loss: 3.2731 - learning_rate: 1.5625e-06\n",
631
+ "Epoch 22/40\n",
632
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 1s/step - accuracy: 0.1330 - loss: 2.6277 - val_accuracy: 0.0208 - val_loss: 3.3387 - learning_rate: 1.5625e-06\n",
633
+ "Epoch 23/40\n",
634
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2s/step - accuracy: 0.0982 - loss: 2.6391 - val_accuracy: 0.0208 - val_loss: 3.4276 - learning_rate: 7.8125e-07\n",
635
+ "Epoch 24/40\n",
636
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 2s/step - accuracy: 0.0988 - loss: 2.6165 - val_accuracy: 0.0625 - val_loss: 3.4701 - learning_rate: 7.8125e-07\n",
637
+ "Epoch 25/40\n",
638
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m21s\u001b[0m 4s/step - accuracy: 0.1026 - loss: 2.6222 - val_accuracy: 0.1042 - val_loss: 3.4188 - learning_rate: 7.8125e-07\n",
639
+ "Epoch 26/40\n",
640
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.1072 - loss: 2.5980 - val_accuracy: 0.0833 - val_loss: 3.3049 - learning_rate: 3.9062e-07\n",
641
+ "Epoch 27/40\n",
642
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 1s/step - accuracy: 0.1038 - loss: 2.6551 - val_accuracy: 0.1042 - val_loss: 3.1563 - learning_rate: 3.9062e-07\n",
643
+ "Epoch 28/40\n",
644
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 2s/step - accuracy: 0.1366 - loss: 2.6058 - val_accuracy: 0.0625 - val_loss: 3.0657 - learning_rate: 3.9062e-07\n",
645
+ "Epoch 29/40\n",
646
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 2s/step - accuracy: 0.0806 - loss: 2.6075 - val_accuracy: 0.0625 - val_loss: 3.0475 - learning_rate: 1.9531e-07\n",
647
+ "Epoch 30/40\n",
648
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 1s/step - accuracy: 0.1013 - loss: 2.6784 - val_accuracy: 0.0625 - val_loss: 3.0219 - learning_rate: 1.9531e-07\n",
649
+ "Epoch 31/40\n",
650
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.0826 - loss: 2.6553 - val_accuracy: 0.0417 - val_loss: 2.9851 - learning_rate: 1.9531e-07\n",
651
+ "Epoch 32/40\n",
652
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 2s/step - accuracy: 0.1096 - loss: 2.6266 - val_accuracy: 0.0208 - val_loss: 2.9737 - learning_rate: 1.0000e-07\n",
653
+ "Epoch 33/40\n",
654
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 2s/step - accuracy: 0.1357 - loss: 2.5973 - val_accuracy: 0.0417 - val_loss: 2.9839 - learning_rate: 1.0000e-07\n",
655
+ "Epoch 34/40\n",
656
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 2s/step - accuracy: 0.1250 - loss: 2.6987 - val_accuracy: 0.0208 - val_loss: 3.0143 - learning_rate: 1.0000e-07\n",
657
+ "Epoch 35/40\n",
658
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 2s/step - accuracy: 0.1245 - loss: 2.6044 - val_accuracy: 0.0000e+00 - val_loss: 3.0098 - learning_rate: 1.0000e-07\n",
659
+ "Epoch 36/40\n",
660
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 1s/step - accuracy: 0.1518 - loss: 2.5973 - val_accuracy: 0.0000e+00 - val_loss: 2.9971 - learning_rate: 1.0000e-07\n",
661
+ "Epoch 37/40\n",
662
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 1s/step - accuracy: 0.1260 - loss: 2.5885 - val_accuracy: 0.0208 - val_loss: 2.9869 - learning_rate: 1.0000e-07\n",
663
+ "Epoch 38/40\n",
664
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 2s/step - accuracy: 0.1030 - loss: 2.6018 - val_accuracy: 0.0208 - val_loss: 2.9753 - learning_rate: 1.0000e-07\n",
665
+ "Epoch 39/40\n",
666
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.0914 - loss: 2.5949 - val_accuracy: 0.0625 - val_loss: 2.9841 - learning_rate: 1.0000e-07\n",
667
+ "Epoch 40/40\n",
668
+ "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 2s/step - accuracy: 0.0933 - loss: 2.6573 - val_accuracy: 0.0417 - val_loss: 2.9753 - learning_rate: 1.0000e-07\n",
669
+ "\u001b[1m2/2\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 653ms/step - accuracy: 0.0486 - loss: 2.9397\n",
670
+ "Test Accuracy: 0.04\n"
671
+ ]
672
+ }
673
+ ]
674
+ }
675
+ ]
676
+ }