jagriti commited on
Commit
de141a5
·
1 Parent(s): ee7bdc8

Upload 7 files

Browse files
Files changed (8) hide show
  1. .gitattributes +2 -0
  2. app.py +126 -0
  3. frog.png +3 -0
  4. img1.jpeg +0 -0
  5. img2.jpg +0 -0
  6. img3.jpg +0 -0
  7. model.hdf5 +3 -0
  8. training-model.ipynb +567 -0
.gitattributes CHANGED
@@ -32,3 +32,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
32
  *.zip filter=lfs diff=lfs merge=lfs -text
33
  *.zst filter=lfs diff=lfs merge=lfs -text
34
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
32
  *.zip filter=lfs diff=lfs merge=lfs -text
33
  *.zst filter=lfs diff=lfs merge=lfs -text
34
  *tfevents* filter=lfs diff=lfs merge=lfs -text
35
+ frog.png filter=lfs diff=lfs merge=lfs -text
36
+ model.hdf5 filter=lfs diff=lfs merge=lfs -text
app.py ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import uuid
3
+ import flask
4
+ import urllib
5
+ from PIL import Image
6
+ from tensorflow.keras.models import load_model
7
+ from flask import Flask , render_template , request , send_file
8
+ from tensorflow.keras.preprocessing.image import load_img , img_to_array
9
+
10
+ app = Flask(__name__)
11
+ BASE_DIR = os.path.dirname(os.path.abspath(__file__))
12
+ model = load_model(os.path.join(BASE_DIR , 'model.hdf5'))
13
+
14
+
15
+ ALLOWED_EXT = set(['jpg' , 'jpeg' , 'png' , 'jfif'])
16
+ def allowed_file(filename):
17
+ return '.' in filename and \
18
+ filename.rsplit('.', 1)[1] in ALLOWED_EXT
19
+
20
+ classes = ['airplane' ,'automobile', 'bird' , 'cat' , 'deer' ,'dog' ,'frog', 'horse' ,'ship' ,'truck']
21
+
22
+
23
+ def predict(filename , model):
24
+ img = load_img(filename , target_size = (32 , 32))
25
+ img = img_to_array(img)
26
+ img = img.reshape(1 , 32 ,32 ,3)
27
+
28
+ img = img.astype('float32')
29
+ img = img/255.0
30
+ result = model.predict(img)
31
+
32
+ dict_result = {}
33
+ for i in range(10):
34
+ dict_result[result[0][i]] = classes[i]
35
+
36
+ res = result[0]
37
+ res.sort()
38
+ res = res[::-1]
39
+ prob = res[:3]
40
+
41
+ prob_result = []
42
+ class_result = []
43
+ for i in range(3):
44
+ prob_result.append((prob[i]*100).round(2))
45
+ class_result.append(dict_result[prob[i]])
46
+
47
+ return class_result , prob_result
48
+
49
+
50
+
51
+
52
+ @app.route('/')
53
+ def home():
54
+ return render_template("index.html")
55
+
56
+ @app.route('/success' , methods = ['GET' , 'POST'])
57
+ def success():
58
+ error = ''
59
+ target_img = os.path.join(os.getcwd() , 'static/images')
60
+ if request.method == 'POST':
61
+ if(request.form):
62
+ link = request.form.get('link')
63
+ try :
64
+ resource = urllib.request.urlopen(link)
65
+ unique_filename = str(uuid.uuid4())
66
+ filename = unique_filename+".jpg"
67
+ img_path = os.path.join(target_img , filename)
68
+ output = open(img_path , "wb")
69
+ output.write(resource.read())
70
+ output.close()
71
+ img = filename
72
+
73
+ class_result , prob_result = predict(img_path , model)
74
+
75
+ predictions = {
76
+ "class1":class_result[0],
77
+ "class2":class_result[1],
78
+ "class3":class_result[2],
79
+ "prob1": prob_result[0],
80
+ "prob2": prob_result[1],
81
+ "prob3": prob_result[2],
82
+ }
83
+
84
+ except Exception as e :
85
+ print(str(e))
86
+ error = 'This image from this site is not accesible or inappropriate input'
87
+
88
+ if(len(error) == 0):
89
+ return render_template('success.html' , img = img , predictions = predictions)
90
+ else:
91
+ return render_template('index.html' , error = error)
92
+
93
+
94
+ elif (request.files):
95
+ file = request.files['file']
96
+ if file and allowed_file(file.filename):
97
+ file.save(os.path.join(target_img , file.filename))
98
+ img_path = os.path.join(target_img , file.filename)
99
+ img = file.filename
100
+
101
+ class_result , prob_result = predict(img_path , model)
102
+
103
+ predictions = {
104
+ "class1":class_result[0],
105
+ "class2":class_result[1],
106
+ "class3":class_result[2],
107
+ "prob1": prob_result[0],
108
+ "prob2": prob_result[1],
109
+ "prob3": prob_result[2],
110
+ }
111
+
112
+ else:
113
+ error = "Please upload images of jpg , jpeg and png extension only"
114
+
115
+ if(len(error) == 0):
116
+ return render_template('success.html' , img = img , predictions = predictions)
117
+ else:
118
+ return render_template('index.html' , error = error)
119
+
120
+ else:
121
+ return render_template('index.html')
122
+
123
+ if __name__ == "__main__":
124
+ app.run(debug = True)
125
+
126
+
frog.png ADDED

Git LFS Details

  • SHA256: 63eeaaa6ba946edce97703b610c7ac634931dcdb7d3894504abcadb1ce835214
  • Pointer size: 132 Bytes
  • Size of remote file: 1.49 MB
img1.jpeg ADDED
img2.jpg ADDED
img3.jpg ADDED
model.hdf5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f1307ac4ab03e0b7d72abfe53404a95eea2d0b7a60528b2aff2990767270493c
3
+ size 4543472
training-model.ipynb ADDED
@@ -0,0 +1,567 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "metadata": {
6
+ "colab_type": "text",
7
+ "id": "oDiKuan4jBln"
8
+ },
9
+ "source": [
10
+ "# Training CNN model using CIFAR-10 Dataset"
11
+ ]
12
+ },
13
+ {
14
+ "cell_type": "code",
15
+ "execution_count": null,
16
+ "metadata": {
17
+ "colab": {},
18
+ "colab_type": "code",
19
+ "id": "doFHompcQwst"
20
+ },
21
+ "outputs": [],
22
+ "source": [
23
+ "import tensorflow as tf\n",
24
+ "import matplotlib.pyplot as plt\n",
25
+ "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n",
26
+ "from tensorflow.keras.models import load_model\n",
27
+ "from tensorflow.keras.models import Sequential\n",
28
+ "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n",
29
+ "from tensorflow.keras.preprocessing.image import load_img , img_to_array\n",
30
+ "from tensorflow.keras.layers import Dense , Dropout , Conv2D , MaxPooling2D, Flatten , BatchNormalization"
31
+ ]
32
+ },
33
+ {
34
+ "cell_type": "code",
35
+ "execution_count": null,
36
+ "metadata": {
37
+ "colab": {
38
+ "base_uri": "https://localhost:8080/",
39
+ "height": 51
40
+ },
41
+ "colab_type": "code",
42
+ "id": "Gz1bXsvJRJmo",
43
+ "outputId": "cfcfbfa8-2139-464a-90a9-fd83c7134bc0"
44
+ },
45
+ "outputs": [
46
+ {
47
+ "name": "stdout",
48
+ "output_type": "stream",
49
+ "text": [
50
+ "Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz\n",
51
+ "170500096/170498071 [==============================] - 11s 0us/step\n"
52
+ ]
53
+ }
54
+ ],
55
+ "source": [
56
+ "(x_train , y_train) , (x_test , y_test) = tf.keras.datasets.cifar10.load_data()"
57
+ ]
58
+ },
59
+ {
60
+ "cell_type": "code",
61
+ "execution_count": null,
62
+ "metadata": {
63
+ "colab": {
64
+ "base_uri": "https://localhost:8080/",
65
+ "height": 51
66
+ },
67
+ "colab_type": "code",
68
+ "id": "sG-Agu0WRRur",
69
+ "outputId": "81dc8843-34f4-4e43-fb8b-897b5894cb6d"
70
+ },
71
+ "outputs": [
72
+ {
73
+ "name": "stdout",
74
+ "output_type": "stream",
75
+ "text": [
76
+ "x_train shape (50000, 32, 32, 3)\n",
77
+ "y_train shape (50000, 1)\n"
78
+ ]
79
+ }
80
+ ],
81
+ "source": [
82
+ "print('x_train shape' , x_train.shape)\n",
83
+ "print('y_train shape' , y_train.shape)"
84
+ ]
85
+ },
86
+ {
87
+ "cell_type": "code",
88
+ "execution_count": null,
89
+ "metadata": {
90
+ "colab": {
91
+ "base_uri": "https://localhost:8080/",
92
+ "height": 283
93
+ },
94
+ "colab_type": "code",
95
+ "id": "ELvNk6iMRmM7",
96
+ "outputId": "74bfbf49-ee0e-4ad5-90dd-3ace532dd554"
97
+ },
98
+ "outputs": [
99
+ {
100
+ "data": {
101
+ "text/plain": [
102
+ "<matplotlib.image.AxesImage at 0x7fc9a3de3080>"
103
+ ]
104
+ },
105
+ "execution_count": 4,
106
+ "metadata": {
107
+ "tags": []
108
+ },
109
+ "output_type": "execute_result"
110
+ },
111
+ {
112
+ "data": {
113
+ "image/png": "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\n",
114
+ "text/plain": [
115
+ "<Figure size 432x288 with 1 Axes>"
116
+ ]
117
+ },
118
+ "metadata": {
119
+ "needs_background": "light",
120
+ "tags": []
121
+ },
122
+ "output_type": "display_data"
123
+ }
124
+ ],
125
+ "source": [
126
+ "plt.imshow(x_train[1])"
127
+ ]
128
+ },
129
+ {
130
+ "cell_type": "code",
131
+ "execution_count": null,
132
+ "metadata": {
133
+ "colab": {},
134
+ "colab_type": "code",
135
+ "id": "onbbrUFYSSbP"
136
+ },
137
+ "outputs": [],
138
+ "source": [
139
+ "def normalize(x):\n",
140
+ " x = x.astype('float32')\n",
141
+ " x = x/255.0\n",
142
+ " return x"
143
+ ]
144
+ },
145
+ {
146
+ "cell_type": "code",
147
+ "execution_count": null,
148
+ "metadata": {
149
+ "colab": {},
150
+ "colab_type": "code",
151
+ "id": "nw3EvgP2TLyo"
152
+ },
153
+ "outputs": [],
154
+ "source": [
155
+ "datagen = ImageDataGenerator(\n",
156
+ " rotation_range=15,\n",
157
+ " width_shift_range=0.1,\n",
158
+ " height_shift_range=0.1,\n",
159
+ " horizontal_flip=True,\n",
160
+ ")"
161
+ ]
162
+ },
163
+ {
164
+ "cell_type": "code",
165
+ "execution_count": null,
166
+ "metadata": {
167
+ "colab": {},
168
+ "colab_type": "code",
169
+ "id": "5nzeqnKNjJ1b"
170
+ },
171
+ "outputs": [],
172
+ "source": [
173
+ "from sklearn.model_selection import train_test_split\n",
174
+ "x_test, x_val, y_test, y_val = train_test_split(x_test, y_test, test_size = 0.5, random_state = 0)"
175
+ ]
176
+ },
177
+ {
178
+ "cell_type": "code",
179
+ "execution_count": null,
180
+ "metadata": {
181
+ "colab": {},
182
+ "colab_type": "code",
183
+ "id": "LatBK_OQTXqT"
184
+ },
185
+ "outputs": [],
186
+ "source": [
187
+ "x_train = normalize(x_train)\n",
188
+ "x_test = normalize(x_test)\n",
189
+ "x_val = normalize(x_val)\n",
190
+ "\n",
191
+ "y_train = tf.keras.utils.to_categorical(y_train , 10)\n",
192
+ "y_test = tf.keras.utils.to_categorical(y_test , 10)\n",
193
+ "y_val = tf.keras.utils.to_categorical(y_val , 10)\n",
194
+ "\n",
195
+ "datagen.fit(x_train)"
196
+ ]
197
+ },
198
+ {
199
+ "cell_type": "code",
200
+ "execution_count": null,
201
+ "metadata": {
202
+ "colab": {},
203
+ "colab_type": "code",
204
+ "id": "MNgWkoQddQce"
205
+ },
206
+ "outputs": [],
207
+ "source": [
208
+ "def results(model):\n",
209
+ " epoch = 100\n",
210
+ " r = model.fit(datagen.flow(x_train , y_train , batch_size = 32), epochs = epoch ,steps_per_epoch=len(x_train)/32, validation_data = (x_val , y_val) , verbose = 1)\n",
211
+ " acc = model.evaluate(x_test , y_test)\n",
212
+ " print(\"test set loss : \" , acc[0])\n",
213
+ " print(\"test set accuracy :\", acc[1]*100)\n",
214
+ "\n",
215
+ " epoch_range = range(1, epoch+1)\n",
216
+ " plt.plot(epoch_range, r.history['accuracy'])\n",
217
+ " plt.plot(epoch_range, r.history['val_accuracy'])\n",
218
+ " plt.title('Classification Accuracy')\n",
219
+ " plt.ylabel('Accuracy')\n",
220
+ " plt.xlabel('Epoch')\n",
221
+ " plt.legend(['Train', 'Val'], loc='lower right')\n",
222
+ " plt.show()\n",
223
+ "\n",
224
+ " # Plot training & validation loss values\n",
225
+ " plt.plot(epoch_range,r.history['loss'])\n",
226
+ " plt.plot(epoch_range, r.history['val_loss'])\n",
227
+ " plt.title('Model loss')\n",
228
+ " plt.ylabel('Loss')\n",
229
+ " plt.xlabel('Epoch')\n",
230
+ " plt.legend(['Train', 'Val'], loc='lower right')\n",
231
+ " plt.show()"
232
+ ]
233
+ },
234
+ {
235
+ "cell_type": "code",
236
+ "execution_count": null,
237
+ "metadata": {
238
+ "colab": {},
239
+ "colab_type": "code",
240
+ "id": "GntiEI6zrJ_f"
241
+ },
242
+ "outputs": [],
243
+ "source": [
244
+ "weight_decay = 1e-4\n",
245
+ "model = Sequential([\n",
246
+ " Conv2D(32, (3, 3), activation='relu', padding='same',kernel_regularizer=tf.keras.regularizers.l2(weight_decay), input_shape=(32, 32, 3)),\n",
247
+ "\t BatchNormalization(),\n",
248
+ " Conv2D(32, (3, 3), activation='relu',kernel_regularizer=tf.keras.regularizers.l2(weight_decay), padding='same'),\n",
249
+ "\t BatchNormalization(),\n",
250
+ " MaxPooling2D((2, 2)),\n",
251
+ " Dropout(0.2),\n",
252
+ " Conv2D(64, (3, 3), activation='relu',kernel_regularizer=tf.keras.regularizers.l2(weight_decay), padding='same'),\n",
253
+ "\t BatchNormalization(),\n",
254
+ " Conv2D(64, (3, 3), activation='relu',kernel_regularizer=tf.keras.regularizers.l2(weight_decay), padding='same'),\n",
255
+ " BatchNormalization(),\n",
256
+ " MaxPooling2D((2, 2)),\n",
257
+ " Dropout(0.3),\n",
258
+ " Conv2D(128, (3, 3), activation='relu',kernel_regularizer=tf.keras.regularizers.l2(weight_decay), padding='same'),\n",
259
+ "\t BatchNormalization(),\n",
260
+ " Conv2D(128, (3, 3), activation='relu',kernel_regularizer=tf.keras.regularizers.l2(weight_decay), padding='same'),\n",
261
+ " BatchNormalization(),\n",
262
+ " MaxPooling2D((2, 2)),\n",
263
+ " Dropout(0.3),\n",
264
+ "\t Flatten(),\n",
265
+ "\t Dense(128, activation='relu'),\n",
266
+ " Dense(10, activation='softmax') \n",
267
+ "])\n",
268
+ "\n",
269
+ "opt = tf.keras.optimizers.SGD(lr=0.001, momentum=0.9)\n",
270
+ "model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])"
271
+ ]
272
+ },
273
+ {
274
+ "cell_type": "code",
275
+ "execution_count": null,
276
+ "metadata": {
277
+ "colab": {
278
+ "base_uri": "https://localhost:8080/",
279
+ "height": 1000
280
+ },
281
+ "colab_type": "code",
282
+ "id": "PkAOH4DBrrxP",
283
+ "outputId": "7dc6ba42-a300-4efe-e8d7-1c4e16957a28"
284
+ },
285
+ "outputs": [
286
+ {
287
+ "name": "stdout",
288
+ "output_type": "stream",
289
+ "text": [
290
+ "Epoch 1/100\n",
291
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 1.7113 - accuracy: 0.3918 - val_loss: 1.4652 - val_accuracy: 0.4928\n",
292
+ "Epoch 2/100\n",
293
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 1.3811 - accuracy: 0.5123 - val_loss: 1.2846 - val_accuracy: 0.5614\n",
294
+ "Epoch 3/100\n",
295
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 1.2184 - accuracy: 0.5731 - val_loss: 1.1628 - val_accuracy: 0.6012\n",
296
+ "Epoch 4/100\n",
297
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 1.1200 - accuracy: 0.6120 - val_loss: 1.1376 - val_accuracy: 0.6272\n",
298
+ "Epoch 5/100\n",
299
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 1.0415 - accuracy: 0.6404 - val_loss: 0.9111 - val_accuracy: 0.6970\n",
300
+ "Epoch 6/100\n",
301
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.9902 - accuracy: 0.6629 - val_loss: 1.1072 - val_accuracy: 0.6378\n",
302
+ "Epoch 7/100\n",
303
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.9466 - accuracy: 0.6779 - val_loss: 1.1607 - val_accuracy: 0.6262\n",
304
+ "Epoch 8/100\n",
305
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.9053 - accuracy: 0.6954 - val_loss: 0.9459 - val_accuracy: 0.6938\n",
306
+ "Epoch 9/100\n",
307
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.8792 - accuracy: 0.7019 - val_loss: 0.9495 - val_accuracy: 0.6952\n",
308
+ "Epoch 10/100\n",
309
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.8507 - accuracy: 0.7129 - val_loss: 0.7738 - val_accuracy: 0.7514\n",
310
+ "Epoch 11/100\n",
311
+ "1563/1562 [==============================] - 49s 31ms/step - loss: 0.8282 - accuracy: 0.7212 - val_loss: 0.7682 - val_accuracy: 0.7544\n",
312
+ "Epoch 12/100\n",
313
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.8064 - accuracy: 0.7286 - val_loss: 0.7842 - val_accuracy: 0.7588\n",
314
+ "Epoch 13/100\n",
315
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.7825 - accuracy: 0.7371 - val_loss: 0.8059 - val_accuracy: 0.7444\n",
316
+ "Epoch 14/100\n",
317
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.7643 - accuracy: 0.7457 - val_loss: 0.7426 - val_accuracy: 0.7606\n",
318
+ "Epoch 15/100\n",
319
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.7506 - accuracy: 0.7506 - val_loss: 0.6599 - val_accuracy: 0.7928\n",
320
+ "Epoch 16/100\n",
321
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.7292 - accuracy: 0.7565 - val_loss: 0.8198 - val_accuracy: 0.7462\n",
322
+ "Epoch 17/100\n",
323
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.7202 - accuracy: 0.7621 - val_loss: 0.7206 - val_accuracy: 0.7754\n",
324
+ "Epoch 18/100\n",
325
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.7087 - accuracy: 0.7659 - val_loss: 0.8505 - val_accuracy: 0.7342\n",
326
+ "Epoch 19/100\n",
327
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.6885 - accuracy: 0.7726 - val_loss: 0.7119 - val_accuracy: 0.7762\n",
328
+ "Epoch 20/100\n",
329
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.6849 - accuracy: 0.7749 - val_loss: 0.6795 - val_accuracy: 0.7918\n",
330
+ "Epoch 21/100\n",
331
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.6694 - accuracy: 0.7805 - val_loss: 0.6816 - val_accuracy: 0.7916\n",
332
+ "Epoch 22/100\n",
333
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.6603 - accuracy: 0.7820 - val_loss: 0.7379 - val_accuracy: 0.7816\n",
334
+ "Epoch 23/100\n",
335
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.6541 - accuracy: 0.7841 - val_loss: 0.6907 - val_accuracy: 0.7946\n",
336
+ "Epoch 24/100\n",
337
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.6341 - accuracy: 0.7908 - val_loss: 0.6607 - val_accuracy: 0.7944\n",
338
+ "Epoch 25/100\n",
339
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.6351 - accuracy: 0.7905 - val_loss: 0.6517 - val_accuracy: 0.7978\n",
340
+ "Epoch 26/100\n",
341
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.6182 - accuracy: 0.7988 - val_loss: 0.6307 - val_accuracy: 0.8112\n",
342
+ "Epoch 27/100\n",
343
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.6129 - accuracy: 0.7996 - val_loss: 0.6023 - val_accuracy: 0.8162\n",
344
+ "Epoch 28/100\n",
345
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.6053 - accuracy: 0.8024 - val_loss: 0.6008 - val_accuracy: 0.8160\n",
346
+ "Epoch 29/100\n",
347
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.5943 - accuracy: 0.8070 - val_loss: 0.6370 - val_accuracy: 0.8108\n",
348
+ "Epoch 30/100\n",
349
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.5949 - accuracy: 0.8067 - val_loss: 0.5795 - val_accuracy: 0.8282\n",
350
+ "Epoch 31/100\n",
351
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.5850 - accuracy: 0.8084 - val_loss: 0.6454 - val_accuracy: 0.8104\n",
352
+ "Epoch 32/100\n",
353
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.5795 - accuracy: 0.8129 - val_loss: 0.6747 - val_accuracy: 0.8030\n",
354
+ "Epoch 33/100\n",
355
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.5687 - accuracy: 0.8181 - val_loss: 0.6126 - val_accuracy: 0.8172\n",
356
+ "Epoch 34/100\n",
357
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.5691 - accuracy: 0.8159 - val_loss: 0.5963 - val_accuracy: 0.8206\n",
358
+ "Epoch 35/100\n",
359
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.5579 - accuracy: 0.8197 - val_loss: 0.5506 - val_accuracy: 0.8390\n",
360
+ "Epoch 36/100\n",
361
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.5540 - accuracy: 0.8208 - val_loss: 0.5708 - val_accuracy: 0.8292\n",
362
+ "Epoch 37/100\n",
363
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.5471 - accuracy: 0.8232 - val_loss: 0.6075 - val_accuracy: 0.8240\n",
364
+ "Epoch 38/100\n",
365
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.5403 - accuracy: 0.8279 - val_loss: 0.5955 - val_accuracy: 0.8272\n",
366
+ "Epoch 39/100\n",
367
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.5425 - accuracy: 0.8265 - val_loss: 0.7016 - val_accuracy: 0.7906\n",
368
+ "Epoch 40/100\n",
369
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.5299 - accuracy: 0.8293 - val_loss: 0.5621 - val_accuracy: 0.8344\n",
370
+ "Epoch 41/100\n",
371
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.5319 - accuracy: 0.8300 - val_loss: 0.6169 - val_accuracy: 0.8220\n",
372
+ "Epoch 42/100\n",
373
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.5224 - accuracy: 0.8315 - val_loss: 0.5701 - val_accuracy: 0.8284\n",
374
+ "Epoch 43/100\n",
375
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.5162 - accuracy: 0.8353 - val_loss: 0.5376 - val_accuracy: 0.8452\n",
376
+ "Epoch 44/100\n",
377
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.5180 - accuracy: 0.8342 - val_loss: 0.5431 - val_accuracy: 0.8366\n",
378
+ "Epoch 45/100\n",
379
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.5079 - accuracy: 0.8380 - val_loss: 0.5962 - val_accuracy: 0.8268\n",
380
+ "Epoch 46/100\n",
381
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.5093 - accuracy: 0.8363 - val_loss: 0.5353 - val_accuracy: 0.8440\n",
382
+ "Epoch 47/100\n",
383
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.5000 - accuracy: 0.8402 - val_loss: 0.5705 - val_accuracy: 0.8308\n",
384
+ "Epoch 48/100\n",
385
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4988 - accuracy: 0.8421 - val_loss: 0.5600 - val_accuracy: 0.8396\n",
386
+ "Epoch 49/100\n",
387
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4958 - accuracy: 0.8437 - val_loss: 0.5017 - val_accuracy: 0.8538\n",
388
+ "Epoch 50/100\n",
389
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4972 - accuracy: 0.8401 - val_loss: 0.5609 - val_accuracy: 0.8368\n",
390
+ "Epoch 51/100\n",
391
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4923 - accuracy: 0.8434 - val_loss: 0.5496 - val_accuracy: 0.8378\n",
392
+ "Epoch 52/100\n",
393
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4796 - accuracy: 0.8481 - val_loss: 0.5111 - val_accuracy: 0.8524\n",
394
+ "Epoch 53/100\n",
395
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4803 - accuracy: 0.8474 - val_loss: 0.5314 - val_accuracy: 0.8468\n",
396
+ "Epoch 54/100\n",
397
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4785 - accuracy: 0.8486 - val_loss: 0.5702 - val_accuracy: 0.8362\n",
398
+ "Epoch 55/100\n",
399
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4775 - accuracy: 0.8496 - val_loss: 0.5856 - val_accuracy: 0.8302\n",
400
+ "Epoch 56/100\n",
401
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4787 - accuracy: 0.8492 - val_loss: 0.5187 - val_accuracy: 0.8550\n",
402
+ "Epoch 57/100\n",
403
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4687 - accuracy: 0.8525 - val_loss: 0.4806 - val_accuracy: 0.8652\n",
404
+ "Epoch 58/100\n",
405
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4716 - accuracy: 0.8501 - val_loss: 0.5366 - val_accuracy: 0.8486\n",
406
+ "Epoch 59/100\n",
407
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4642 - accuracy: 0.8542 - val_loss: 0.4953 - val_accuracy: 0.8560\n",
408
+ "Epoch 60/100\n",
409
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4601 - accuracy: 0.8553 - val_loss: 0.5010 - val_accuracy: 0.8594\n",
410
+ "Epoch 61/100\n",
411
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4592 - accuracy: 0.8569 - val_loss: 0.4962 - val_accuracy: 0.8562\n",
412
+ "Epoch 62/100\n",
413
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4577 - accuracy: 0.8568 - val_loss: 0.5186 - val_accuracy: 0.8500\n",
414
+ "Epoch 63/100\n",
415
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4466 - accuracy: 0.8596 - val_loss: 0.4967 - val_accuracy: 0.8572\n",
416
+ "Epoch 64/100\n",
417
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4487 - accuracy: 0.8599 - val_loss: 0.4982 - val_accuracy: 0.8568\n",
418
+ "Epoch 65/100\n",
419
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4436 - accuracy: 0.8619 - val_loss: 0.5084 - val_accuracy: 0.8576\n",
420
+ "Epoch 66/100\n",
421
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4466 - accuracy: 0.8612 - val_loss: 0.4911 - val_accuracy: 0.8650\n",
422
+ "Epoch 67/100\n",
423
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4425 - accuracy: 0.8598 - val_loss: 0.4921 - val_accuracy: 0.8566\n",
424
+ "Epoch 68/100\n",
425
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4369 - accuracy: 0.8630 - val_loss: 0.4896 - val_accuracy: 0.8628\n",
426
+ "Epoch 69/100\n",
427
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4390 - accuracy: 0.8631 - val_loss: 0.4616 - val_accuracy: 0.8654\n",
428
+ "Epoch 70/100\n",
429
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4333 - accuracy: 0.8663 - val_loss: 0.5122 - val_accuracy: 0.8584\n",
430
+ "Epoch 71/100\n",
431
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4320 - accuracy: 0.8660 - val_loss: 0.4981 - val_accuracy: 0.8526\n",
432
+ "Epoch 72/100\n",
433
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4271 - accuracy: 0.8673 - val_loss: 0.5557 - val_accuracy: 0.8464\n",
434
+ "Epoch 73/100\n",
435
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4361 - accuracy: 0.8641 - val_loss: 0.5502 - val_accuracy: 0.8440\n",
436
+ "Epoch 74/100\n",
437
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4262 - accuracy: 0.8681 - val_loss: 0.5235 - val_accuracy: 0.8562\n",
438
+ "Epoch 75/100\n",
439
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4261 - accuracy: 0.8674 - val_loss: 0.4887 - val_accuracy: 0.8606\n",
440
+ "Epoch 76/100\n",
441
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4248 - accuracy: 0.8695 - val_loss: 0.5244 - val_accuracy: 0.8490\n",
442
+ "Epoch 77/100\n",
443
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4212 - accuracy: 0.8700 - val_loss: 0.5069 - val_accuracy: 0.8604\n",
444
+ "Epoch 78/100\n",
445
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4229 - accuracy: 0.8686 - val_loss: 0.4756 - val_accuracy: 0.8660\n",
446
+ "Epoch 79/100\n",
447
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4169 - accuracy: 0.8695 - val_loss: 0.5148 - val_accuracy: 0.8510\n",
448
+ "Epoch 80/100\n",
449
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4157 - accuracy: 0.8726 - val_loss: 0.5102 - val_accuracy: 0.8634\n",
450
+ "Epoch 81/100\n",
451
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4129 - accuracy: 0.8723 - val_loss: 0.4909 - val_accuracy: 0.8630\n",
452
+ "Epoch 82/100\n",
453
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4126 - accuracy: 0.8721 - val_loss: 0.4596 - val_accuracy: 0.8704\n",
454
+ "Epoch 83/100\n",
455
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4109 - accuracy: 0.8734 - val_loss: 0.4557 - val_accuracy: 0.8738\n",
456
+ "Epoch 84/100\n",
457
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4101 - accuracy: 0.8726 - val_loss: 0.4745 - val_accuracy: 0.8676\n",
458
+ "Epoch 85/100\n",
459
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4062 - accuracy: 0.8757 - val_loss: 0.4903 - val_accuracy: 0.8606\n",
460
+ "Epoch 86/100\n",
461
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4087 - accuracy: 0.8743 - val_loss: 0.4594 - val_accuracy: 0.8660\n",
462
+ "Epoch 87/100\n",
463
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4046 - accuracy: 0.8752 - val_loss: 0.4647 - val_accuracy: 0.8692\n",
464
+ "Epoch 88/100\n",
465
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4025 - accuracy: 0.8768 - val_loss: 0.4290 - val_accuracy: 0.8802\n",
466
+ "Epoch 89/100\n",
467
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4028 - accuracy: 0.8752 - val_loss: 0.5062 - val_accuracy: 0.8578\n",
468
+ "Epoch 90/100\n",
469
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.3946 - accuracy: 0.8791 - val_loss: 0.4926 - val_accuracy: 0.8636\n",
470
+ "Epoch 91/100\n",
471
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.4010 - accuracy: 0.8762 - val_loss: 0.4666 - val_accuracy: 0.8704\n",
472
+ "Epoch 92/100\n",
473
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.3944 - accuracy: 0.8780 - val_loss: 0.4719 - val_accuracy: 0.8664\n",
474
+ "Epoch 93/100\n",
475
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.3938 - accuracy: 0.8798 - val_loss: 0.4797 - val_accuracy: 0.8692\n",
476
+ "Epoch 94/100\n",
477
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.3909 - accuracy: 0.8800 - val_loss: 0.4684 - val_accuracy: 0.8714\n",
478
+ "Epoch 95/100\n",
479
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.3933 - accuracy: 0.8789 - val_loss: 0.4829 - val_accuracy: 0.8676\n",
480
+ "Epoch 96/100\n",
481
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.3899 - accuracy: 0.8815 - val_loss: 0.4559 - val_accuracy: 0.8724\n",
482
+ "Epoch 97/100\n",
483
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.3905 - accuracy: 0.8813 - val_loss: 0.4775 - val_accuracy: 0.8684\n",
484
+ "Epoch 98/100\n",
485
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.3817 - accuracy: 0.8837 - val_loss: 0.4363 - val_accuracy: 0.8750\n",
486
+ "Epoch 99/100\n",
487
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.3853 - accuracy: 0.8808 - val_loss: 0.4817 - val_accuracy: 0.8670\n",
488
+ "Epoch 100/100\n",
489
+ "1563/1562 [==============================] - 47s 30ms/step - loss: 0.3853 - accuracy: 0.8838 - val_loss: 0.4466 - val_accuracy: 0.8752\n",
490
+ "157/157 [==============================] - 1s 7ms/step - loss: 0.4312 - accuracy: 0.8778\n",
491
+ "test set loss : 0.43124574422836304\n",
492
+ "test set accuracy : 87.77999877929688\n"
493
+ ]
494
+ },
495
+ {
496
+ "data": {
497
+ "image/png": "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\n",
498
+ "text/plain": [
499
+ "<Figure size 432x288 with 1 Axes>"
500
+ ]
501
+ },
502
+ "metadata": {
503
+ "needs_background": "light",
504
+ "tags": []
505
+ },
506
+ "output_type": "display_data"
507
+ },
508
+ {
509
+ "data": {
510
+ "image/png": "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\n",
511
+ "text/plain": [
512
+ "<Figure size 432x288 with 1 Axes>"
513
+ ]
514
+ },
515
+ "metadata": {
516
+ "needs_background": "light",
517
+ "tags": []
518
+ },
519
+ "output_type": "display_data"
520
+ }
521
+ ],
522
+ "source": [
523
+ "results(model)"
524
+ ]
525
+ },
526
+ {
527
+ "cell_type": "code",
528
+ "execution_count": null,
529
+ "metadata": {
530
+ "colab": {},
531
+ "colab_type": "code",
532
+ "id": "XAd2LQEYxV6B"
533
+ },
534
+ "outputs": [],
535
+ "source": [
536
+ "model.save(\"model.hdf5\")"
537
+ ]
538
+ }
539
+ ],
540
+ "metadata": {
541
+ "accelerator": "GPU",
542
+ "colab": {
543
+ "collapsed_sections": [],
544
+ "name": "Ka-webApp.ipynb",
545
+ "provenance": []
546
+ },
547
+ "kernelspec": {
548
+ "display_name": "Python 3",
549
+ "language": "python",
550
+ "name": "python3"
551
+ },
552
+ "language_info": {
553
+ "codemirror_mode": {
554
+ "name": "ipython",
555
+ "version": 3
556
+ },
557
+ "file_extension": ".py",
558
+ "mimetype": "text/x-python",
559
+ "name": "python",
560
+ "nbconvert_exporter": "python",
561
+ "pygments_lexer": "ipython3",
562
+ "version": "3.8.5"
563
+ }
564
+ },
565
+ "nbformat": 4,
566
+ "nbformat_minor": 1
567
+ }