DHEIVER commited on
Commit
2f6fd37
·
1 Parent(s): fc04eaf

Upload 16 files

Browse files
Cancer detection using cnn.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
Final cancer detection using cnn.ipynb ADDED
@@ -0,0 +1,554 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 36,
6
+ "metadata": {},
7
+ "outputs": [
8
+ {
9
+ "data": {
10
+ "text/plain": [
11
+ "(1, 50, 50, 3)"
12
+ ]
13
+ },
14
+ "execution_count": 36,
15
+ "metadata": {},
16
+ "output_type": "execute_result"
17
+ }
18
+ ],
19
+ "source": [
20
+ "from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img\n",
21
+ "\n",
22
+ "datagen = ImageDataGenerator(\n",
23
+ " rotation_range=40,\n",
24
+ " width_shift_range=0.2,\n",
25
+ " height_shift_range=0.2,\n",
26
+ " shear_range=0.2,\n",
27
+ " zoom_range=0.2,\n",
28
+ " horizontal_flip=True,\n",
29
+ " fill_mode='nearest')\n",
30
+ "img = load_img('./breast-histopathology-images/8867/cancer/8867_idx5_x451_y851_class1.png') # this is a PIL image\n",
31
+ "x = img_to_array(img) # this is a Numpy array with shape (300, 300, 3)\n",
32
+ "x = x.reshape((1,) + x.shape) # this is a Numpy array with shape (1, 300, 300, 3)\n",
33
+ "x.shape\n",
34
+ "\n",
35
+ "# the .flow() command below generates batches of randomly transformed images\n",
36
+ "# and saves the results to the `preview/` directory\n"
37
+ ]
38
+ },
39
+ {
40
+ "cell_type": "code",
41
+ "execution_count": 37,
42
+ "metadata": {},
43
+ "outputs": [],
44
+ "source": [
45
+ "from keras.models import Sequential\n",
46
+ "from keras.layers import Conv2D, MaxPooling2D\n",
47
+ "from keras.layers import Activation, Dropout, Flatten, Dense\n",
48
+ "\n",
49
+ "model = Sequential()\n",
50
+ "model.add(Conv2D(32, (3, 3), input_shape=(300, 300, 3)))\n",
51
+ "model.add(Activation('relu'))\n",
52
+ "model.add(MaxPooling2D(pool_size=(2, 2)))\n",
53
+ "\n",
54
+ "model.add(Conv2D(32, (3, 3)))\n",
55
+ "model.add(Activation('relu'))\n",
56
+ "model.add(MaxPooling2D(pool_size=(2, 2)))\n",
57
+ "\n",
58
+ "model.add(Conv2D(64, (3, 3)))\n",
59
+ "model.add(Activation('relu'))\n",
60
+ "model.add(MaxPooling2D(pool_size=(2, 2)))\n",
61
+ "\n",
62
+ "# the model so far outputs 3D feature maps (height, width, features)\n",
63
+ "\n",
64
+ "model.add(Flatten()) # this converts our 3D feature maps to 1D feature vectors\n",
65
+ "model.add(Dense(64))\n",
66
+ "model.add(Activation('relu'))\n",
67
+ "model.add(Dropout(0.5))\n",
68
+ "model.add(Dense(1))\n",
69
+ "model.add(Activation('sigmoid'))\n",
70
+ "# COMPILE\n",
71
+ "model.compile(loss='binary_crossentropy',\n",
72
+ " optimizer='rmsprop',\n",
73
+ " metrics=['accuracy'])"
74
+ ]
75
+ },
76
+ {
77
+ "cell_type": "code",
78
+ "execution_count": 38,
79
+ "metadata": {},
80
+ "outputs": [
81
+ {
82
+ "name": "stdout",
83
+ "output_type": "stream",
84
+ "text": [
85
+ "Found 324 images belonging to 2 classes.\n",
86
+ "Found 150 images belonging to 2 classes.\n"
87
+ ]
88
+ }
89
+ ],
90
+ "source": [
91
+ "batch_size = 16\n",
92
+ "\n",
93
+ "# this is the augmentation configuration we will use for training\n",
94
+ "train_datagen = ImageDataGenerator(\n",
95
+ " rescale=1./255,\n",
96
+ " shear_range=0.2,\n",
97
+ " zoom_range=0.2,\n",
98
+ " horizontal_flip=True)\n",
99
+ "\n",
100
+ "# this is the augmentation configuration we will use for testing:\n",
101
+ "# only rescaling\n",
102
+ "test_datagen = ImageDataGenerator(rescale=1./255)\n",
103
+ "\n",
104
+ "# this is a generator that will read pictures found in subfolers of 'data/train', and indefinitely generate\n",
105
+ "# batches of augmented image data\n",
106
+ "train_generator = train_datagen.flow_from_directory(\n",
107
+ " './breast-histopathology-images/8867/', # this is the target directory\n",
108
+ " target_size=(300, 300), # all images will be resized to 300x300\n",
109
+ " batch_size=batch_size,\n",
110
+ " class_mode='binary') # since we use binary_crossentropy loss, we need binary labels\n",
111
+ "\n",
112
+ "# this is a similar generator, for validation data\n",
113
+ "validation_generator = test_datagen.flow_from_directory(\n",
114
+ " './breast-histopathology-images/8914/',\n",
115
+ " target_size=(300, 300),\n",
116
+ " batch_size=batch_size,\n",
117
+ " class_mode='binary')"
118
+ ]
119
+ },
120
+ {
121
+ "cell_type": "code",
122
+ "execution_count": 39,
123
+ "metadata": {},
124
+ "outputs": [
125
+ {
126
+ "name": "stdout",
127
+ "output_type": "stream",
128
+ "text": [
129
+ "Epoch 1/10\n",
130
+ "50/50 [==============================] - 33s 658ms/step - loss: 0.9435 - accuracy: 0.5554 - val_loss: 0.9200 - val_accuracy: 0.5000\n",
131
+ "Epoch 2/10\n",
132
+ "50/50 [==============================] - 28s 567ms/step - loss: 0.7255 - accuracy: 0.6165 - val_loss: 0.3352 - val_accuracy: 0.7800\n",
133
+ "Epoch 3/10\n",
134
+ "50/50 [==============================] - 29s 580ms/step - loss: 0.6499 - accuracy: 0.7343 - val_loss: 0.6659 - val_accuracy: 0.8467\n",
135
+ "Epoch 4/10\n",
136
+ "50/50 [==============================] - 29s 580ms/step - loss: 0.4055 - accuracy: 0.8647 - val_loss: 0.4627 - val_accuracy: 0.6733\n",
137
+ "Epoch 5/10\n",
138
+ "50/50 [==============================] - 29s 580ms/step - loss: 0.5732 - accuracy: 0.8544 - val_loss: 0.3741 - val_accuracy: 0.8600\n",
139
+ "Epoch 6/10\n",
140
+ "50/50 [==============================] - 29s 588ms/step - loss: 0.3830 - accuracy: 0.8992 - val_loss: 0.9654 - val_accuracy: 0.8533\n",
141
+ "Epoch 7/10\n",
142
+ "50/50 [==============================] - 29s 580ms/step - loss: 0.4289 - accuracy: 0.9227 - val_loss: 0.3504 - val_accuracy: 0.6600\n",
143
+ "Epoch 8/10\n",
144
+ "50/50 [==============================] - 29s 580ms/step - loss: 0.2207 - accuracy: 0.9317 - val_loss: 0.6380 - val_accuracy: 0.8467\n",
145
+ "Epoch 9/10\n",
146
+ "50/50 [==============================] - 29s 581ms/step - loss: 0.2558 - accuracy: 0.9214 - val_loss: 0.2585 - val_accuracy: 0.8267\n",
147
+ "Epoch 10/10\n",
148
+ "50/50 [==============================] - 29s 579ms/step - loss: 0.2553 - accuracy: 0.9332 - val_loss: 0.1356 - val_accuracy: 0.8400\n"
149
+ ]
150
+ }
151
+ ],
152
+ "source": [
153
+ "# TRAINING\n",
154
+ "hist = model.fit_generator(\n",
155
+ " train_generator,\n",
156
+ " steps_per_epoch=800 // batch_size,\n",
157
+ " epochs=10,\n",
158
+ " validation_data=validation_generator,\n",
159
+ " validation_steps=160 // batch_size)\n",
160
+ "\n",
161
+ "model.save_weights('50_epochs.h5') # always save your weights after training or during training"
162
+ ]
163
+ },
164
+ {
165
+ "cell_type": "code",
166
+ "execution_count": 40,
167
+ "metadata": {},
168
+ "outputs": [],
169
+ "source": [
170
+ "import matplotlib.pyplot as plt\n",
171
+ "acc = hist.history['accuracy']\n",
172
+ "val_acc = hist.history['val_accuracy']\n",
173
+ "loss = hist.history['loss']\n",
174
+ "val_loss = hist.history['val_loss']"
175
+ ]
176
+ },
177
+ {
178
+ "cell_type": "code",
179
+ "execution_count": 41,
180
+ "metadata": {},
181
+ "outputs": [
182
+ {
183
+ "data": {
184
+ "image/png": "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\n",
185
+ "text/plain": [
186
+ "<Figure size 432x288 with 1 Axes>"
187
+ ]
188
+ },
189
+ "metadata": {
190
+ "needs_background": "light"
191
+ },
192
+ "output_type": "display_data"
193
+ }
194
+ ],
195
+ "source": [
196
+ "plt.plot(acc,label='accuracy')\n",
197
+ "plt.plot(val_acc,label='val_acc')\n",
198
+ "plt.legend()\n",
199
+ "plt.show()"
200
+ ]
201
+ },
202
+ {
203
+ "cell_type": "code",
204
+ "execution_count": 42,
205
+ "metadata": {},
206
+ "outputs": [
207
+ {
208
+ "data": {
209
+ "image/png": "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\n",
210
+ "text/plain": [
211
+ "<Figure size 432x288 with 1 Axes>"
212
+ ]
213
+ },
214
+ "metadata": {
215
+ "needs_background": "light"
216
+ },
217
+ "output_type": "display_data"
218
+ }
219
+ ],
220
+ "source": [
221
+ "plt.plot(loss,label='loss')\n",
222
+ "plt.plot(val_loss,label= 'val_loss')\n",
223
+ "plt.legend()\n",
224
+ "plt.show()"
225
+ ]
226
+ },
227
+ {
228
+ "cell_type": "code",
229
+ "execution_count": 43,
230
+ "metadata": {},
231
+ "outputs": [
232
+ {
233
+ "name": "stdout",
234
+ "output_type": "stream",
235
+ "text": [
236
+ "cancer\n"
237
+ ]
238
+ }
239
+ ],
240
+ "source": [
241
+ "from keras.preprocessing import image\n",
242
+ "import numpy as np\n",
243
+ "test_image = \\\n",
244
+ " image.load_img('./test/8864_idx5_x1801_y2451_class1.png',\n",
245
+ " target_size=(300,300))\n",
246
+ "test_image = image.img_to_array(test_image)\n",
247
+ "test_image = np.expand_dims(test_image,axis =0)\n",
248
+ "result = model.predict(test_image)\n",
249
+ "train_generator.class_indices\n",
250
+ "if result[0][0] == 1:\n",
251
+ " print('noncancer')\n",
252
+ "else:\n",
253
+ " print('cancer')"
254
+ ]
255
+ },
256
+ {
257
+ "cell_type": "code",
258
+ "execution_count": 44,
259
+ "metadata": {},
260
+ "outputs": [
261
+ {
262
+ "name": "stdout",
263
+ "output_type": "stream",
264
+ "text": [
265
+ "cancer\n"
266
+ ]
267
+ }
268
+ ],
269
+ "source": [
270
+ "test_image = \\\n",
271
+ " image.load_img('./test/8864_idx5_x201_y2301_class0.png',\n",
272
+ " target_size=(300,300))\n",
273
+ "test_image = image.img_to_array(test_image)\n",
274
+ "test_image = np.expand_dims(test_image,axis =0)\n",
275
+ "result = model.predict(test_image)\n",
276
+ "train_generator.class_indices\n",
277
+ "if result[0][0] == 1:\n",
278
+ " print('noncancer')\n",
279
+ "else:\n",
280
+ " print('cancer')"
281
+ ]
282
+ },
283
+ {
284
+ "cell_type": "code",
285
+ "execution_count": 45,
286
+ "metadata": {},
287
+ "outputs": [
288
+ {
289
+ "name": "stdout",
290
+ "output_type": "stream",
291
+ "text": [
292
+ "noncancer\n"
293
+ ]
294
+ }
295
+ ],
296
+ "source": [
297
+ "test_image = \\\n",
298
+ " image.load_img('./test/8864_idx5_x51_y2201_class0.png',\n",
299
+ " target_size=(300,300))\n",
300
+ "test_image = image.img_to_array(test_image)\n",
301
+ "test_image = np.expand_dims(test_image,axis =0)\n",
302
+ "result = model.predict(test_image)\n",
303
+ "train_generator.class_indices\n",
304
+ "if result[0][0] == 1:\n",
305
+ " print('noncancer')\n",
306
+ "else:\n",
307
+ " print('cancer')"
308
+ ]
309
+ },
310
+ {
311
+ "cell_type": "code",
312
+ "execution_count": 46,
313
+ "metadata": {},
314
+ "outputs": [
315
+ {
316
+ "name": "stdout",
317
+ "output_type": "stream",
318
+ "text": [
319
+ "noncancer\n"
320
+ ]
321
+ }
322
+ ],
323
+ "source": [
324
+ "test_image = \\\n",
325
+ " image.load_img('./test/8864_idx5_x601_y2151_class0.png',\n",
326
+ " target_size=(300,300))\n",
327
+ "test_image = image.img_to_array(test_image)\n",
328
+ "test_image = np.expand_dims(test_image,axis =0)\n",
329
+ "result = model.predict(test_image)\n",
330
+ "train_generator.class_indices\n",
331
+ "if result[0][0] == 1:\n",
332
+ " print('noncancer')\n",
333
+ "else:\n",
334
+ " print('cancer')"
335
+ ]
336
+ },
337
+ {
338
+ "cell_type": "code",
339
+ "execution_count": 47,
340
+ "metadata": {},
341
+ "outputs": [
342
+ {
343
+ "name": "stdout",
344
+ "output_type": "stream",
345
+ "text": [
346
+ "cancer\n"
347
+ ]
348
+ }
349
+ ],
350
+ "source": [
351
+ "test_image = \\\n",
352
+ " image.load_img('./test/8864_idx5_x1701_y2651_class1.png',\n",
353
+ " target_size=(300,300))\n",
354
+ "test_image = image.img_to_array(test_image)\n",
355
+ "test_image = np.expand_dims(test_image,axis =0)\n",
356
+ "result = model.predict(test_image)\n",
357
+ "train_generator.class_indices\n",
358
+ "if result[0][0] == 1:\n",
359
+ " print('noncancer')\n",
360
+ "else:\n",
361
+ " print('cancer')"
362
+ ]
363
+ },
364
+ {
365
+ "cell_type": "code",
366
+ "execution_count": null,
367
+ "metadata": {},
368
+ "outputs": [],
369
+ "source": []
370
+ },
371
+ {
372
+ "cell_type": "code",
373
+ "execution_count": null,
374
+ "metadata": {},
375
+ "outputs": [],
376
+ "source": []
377
+ },
378
+ {
379
+ "cell_type": "code",
380
+ "execution_count": null,
381
+ "metadata": {},
382
+ "outputs": [],
383
+ "source": []
384
+ },
385
+ {
386
+ "cell_type": "code",
387
+ "execution_count": null,
388
+ "metadata": {},
389
+ "outputs": [],
390
+ "source": []
391
+ },
392
+ {
393
+ "cell_type": "code",
394
+ "execution_count": null,
395
+ "metadata": {},
396
+ "outputs": [],
397
+ "source": []
398
+ },
399
+ {
400
+ "cell_type": "code",
401
+ "execution_count": null,
402
+ "metadata": {},
403
+ "outputs": [],
404
+ "source": []
405
+ },
406
+ {
407
+ "cell_type": "code",
408
+ "execution_count": null,
409
+ "metadata": {},
410
+ "outputs": [],
411
+ "source": []
412
+ },
413
+ {
414
+ "cell_type": "code",
415
+ "execution_count": null,
416
+ "metadata": {},
417
+ "outputs": [],
418
+ "source": []
419
+ },
420
+ {
421
+ "cell_type": "code",
422
+ "execution_count": null,
423
+ "metadata": {},
424
+ "outputs": [],
425
+ "source": []
426
+ },
427
+ {
428
+ "cell_type": "code",
429
+ "execution_count": null,
430
+ "metadata": {},
431
+ "outputs": [],
432
+ "source": []
433
+ },
434
+ {
435
+ "cell_type": "code",
436
+ "execution_count": null,
437
+ "metadata": {},
438
+ "outputs": [],
439
+ "source": []
440
+ },
441
+ {
442
+ "cell_type": "code",
443
+ "execution_count": null,
444
+ "metadata": {},
445
+ "outputs": [],
446
+ "source": []
447
+ },
448
+ {
449
+ "cell_type": "code",
450
+ "execution_count": null,
451
+ "metadata": {},
452
+ "outputs": [],
453
+ "source": []
454
+ },
455
+ {
456
+ "cell_type": "code",
457
+ "execution_count": null,
458
+ "metadata": {},
459
+ "outputs": [],
460
+ "source": []
461
+ },
462
+ {
463
+ "cell_type": "code",
464
+ "execution_count": null,
465
+ "metadata": {},
466
+ "outputs": [],
467
+ "source": []
468
+ },
469
+ {
470
+ "cell_type": "code",
471
+ "execution_count": null,
472
+ "metadata": {},
473
+ "outputs": [],
474
+ "source": []
475
+ },
476
+ {
477
+ "cell_type": "code",
478
+ "execution_count": null,
479
+ "metadata": {},
480
+ "outputs": [],
481
+ "source": []
482
+ },
483
+ {
484
+ "cell_type": "code",
485
+ "execution_count": null,
486
+ "metadata": {},
487
+ "outputs": [],
488
+ "source": []
489
+ },
490
+ {
491
+ "cell_type": "code",
492
+ "execution_count": null,
493
+ "metadata": {},
494
+ "outputs": [],
495
+ "source": []
496
+ },
497
+ {
498
+ "cell_type": "code",
499
+ "execution_count": null,
500
+ "metadata": {},
501
+ "outputs": [],
502
+ "source": []
503
+ },
504
+ {
505
+ "cell_type": "code",
506
+ "execution_count": null,
507
+ "metadata": {},
508
+ "outputs": [],
509
+ "source": []
510
+ },
511
+ {
512
+ "cell_type": "code",
513
+ "execution_count": null,
514
+ "metadata": {},
515
+ "outputs": [],
516
+ "source": []
517
+ },
518
+ {
519
+ "cell_type": "code",
520
+ "execution_count": null,
521
+ "metadata": {},
522
+ "outputs": [],
523
+ "source": []
524
+ },
525
+ {
526
+ "cell_type": "code",
527
+ "execution_count": null,
528
+ "metadata": {},
529
+ "outputs": [],
530
+ "source": []
531
+ }
532
+ ],
533
+ "metadata": {
534
+ "kernelspec": {
535
+ "display_name": "Python 3",
536
+ "language": "python",
537
+ "name": "python3"
538
+ },
539
+ "language_info": {
540
+ "codemirror_mode": {
541
+ "name": "ipython",
542
+ "version": 3
543
+ },
544
+ "file_extension": ".py",
545
+ "mimetype": "text/x-python",
546
+ "name": "python",
547
+ "nbconvert_exporter": "python",
548
+ "pygments_lexer": "ipython3",
549
+ "version": "3.7.3"
550
+ }
551
+ },
552
+ "nbformat": 4,
553
+ "nbformat_minor": 2
554
+ }
Final resnet50.ipynb ADDED
@@ -0,0 +1,1060 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 68,
6
+ "metadata": {},
7
+ "outputs": [],
8
+ "source": [
9
+ "from keras.applications.resnet50 import ResNet50\n",
10
+ "from keras.preprocessing import image\n",
11
+ "from keras.applications.resnet50 import preprocess_input, decode_predictions\n",
12
+ "from keras.preprocessing.image import ImageDataGenerator\n",
13
+ "from keras.optimizers import Adam\n",
14
+ "from keras.layers import *\n",
15
+ "import tensorflow as tf\n",
16
+ "import numpy as np\n",
17
+ "from keras.models import Model\n",
18
+ "import keras\n",
19
+ "from keras.optimizers import SGD\n",
20
+ "from keras.callbacks import Callback, ModelCheckpoint, ReduceLROnPlateau, TensorBoard\n"
21
+ ]
22
+ },
23
+ {
24
+ "cell_type": "code",
25
+ "execution_count": 69,
26
+ "metadata": {},
27
+ "outputs": [],
28
+ "source": [
29
+ "base_model = ResNet50(include_top = False,weights = 'imagenet',input_shape = (224,224,3))\n"
30
+ ]
31
+ },
32
+ {
33
+ "cell_type": "code",
34
+ "execution_count": 70,
35
+ "metadata": {},
36
+ "outputs": [],
37
+ "source": [
38
+ "for layer in base_model.layers:\n",
39
+ " layer.trainable = False"
40
+ ]
41
+ },
42
+ {
43
+ "cell_type": "code",
44
+ "execution_count": 71,
45
+ "metadata": {},
46
+ "outputs": [
47
+ {
48
+ "name": "stdout",
49
+ "output_type": "stream",
50
+ "text": [
51
+ "Model: \"model_7\"\n",
52
+ "__________________________________________________________________________________________________\n",
53
+ "Layer (type) Output Shape Param # Connected to \n",
54
+ "==================================================================================================\n",
55
+ "input_10 (InputLayer) (None, 224, 224, 3) 0 \n",
56
+ "__________________________________________________________________________________________________\n",
57
+ "conv1_pad (ZeroPadding2D) (None, 230, 230, 3) 0 input_10[0][0] \n",
58
+ "__________________________________________________________________________________________________\n",
59
+ "conv1 (Conv2D) (None, 112, 112, 64) 9472 conv1_pad[0][0] \n",
60
+ "__________________________________________________________________________________________________\n",
61
+ "bn_conv1 (BatchNormalization) (None, 112, 112, 64) 256 conv1[0][0] \n",
62
+ "__________________________________________________________________________________________________\n",
63
+ "activation_442 (Activation) (None, 112, 112, 64) 0 bn_conv1[0][0] \n",
64
+ "__________________________________________________________________________________________________\n",
65
+ "pool1_pad (ZeroPadding2D) (None, 114, 114, 64) 0 activation_442[0][0] \n",
66
+ "__________________________________________________________________________________________________\n",
67
+ "max_pooling2d_10 (MaxPooling2D) (None, 56, 56, 64) 0 pool1_pad[0][0] \n",
68
+ "__________________________________________________________________________________________________\n",
69
+ "res2a_branch2a (Conv2D) (None, 56, 56, 64) 4160 max_pooling2d_10[0][0] \n",
70
+ "__________________________________________________________________________________________________\n",
71
+ "bn2a_branch2a (BatchNormalizati (None, 56, 56, 64) 256 res2a_branch2a[0][0] \n",
72
+ "__________________________________________________________________________________________________\n",
73
+ "activation_443 (Activation) (None, 56, 56, 64) 0 bn2a_branch2a[0][0] \n",
74
+ "__________________________________________________________________________________________________\n",
75
+ "res2a_branch2b (Conv2D) (None, 56, 56, 64) 36928 activation_443[0][0] \n",
76
+ "__________________________________________________________________________________________________\n",
77
+ "bn2a_branch2b (BatchNormalizati (None, 56, 56, 64) 256 res2a_branch2b[0][0] \n",
78
+ "__________________________________________________________________________________________________\n",
79
+ "activation_444 (Activation) (None, 56, 56, 64) 0 bn2a_branch2b[0][0] \n",
80
+ "__________________________________________________________________________________________________\n",
81
+ "res2a_branch2c (Conv2D) (None, 56, 56, 256) 16640 activation_444[0][0] \n",
82
+ "__________________________________________________________________________________________________\n",
83
+ "res2a_branch1 (Conv2D) (None, 56, 56, 256) 16640 max_pooling2d_10[0][0] \n",
84
+ "__________________________________________________________________________________________________\n",
85
+ "bn2a_branch2c (BatchNormalizati (None, 56, 56, 256) 1024 res2a_branch2c[0][0] \n",
86
+ "__________________________________________________________________________________________________\n",
87
+ "bn2a_branch1 (BatchNormalizatio (None, 56, 56, 256) 1024 res2a_branch1[0][0] \n",
88
+ "__________________________________________________________________________________________________\n",
89
+ "add_145 (Add) (None, 56, 56, 256) 0 bn2a_branch2c[0][0] \n",
90
+ " bn2a_branch1[0][0] \n",
91
+ "__________________________________________________________________________________________________\n",
92
+ "activation_445 (Activation) (None, 56, 56, 256) 0 add_145[0][0] \n",
93
+ "__________________________________________________________________________________________________\n",
94
+ "res2b_branch2a (Conv2D) (None, 56, 56, 64) 16448 activation_445[0][0] \n",
95
+ "__________________________________________________________________________________________________\n",
96
+ "bn2b_branch2a (BatchNormalizati (None, 56, 56, 64) 256 res2b_branch2a[0][0] \n",
97
+ "__________________________________________________________________________________________________\n",
98
+ "activation_446 (Activation) (None, 56, 56, 64) 0 bn2b_branch2a[0][0] \n",
99
+ "__________________________________________________________________________________________________\n",
100
+ "res2b_branch2b (Conv2D) (None, 56, 56, 64) 36928 activation_446[0][0] \n",
101
+ "__________________________________________________________________________________________________\n",
102
+ "bn2b_branch2b (BatchNormalizati (None, 56, 56, 64) 256 res2b_branch2b[0][0] \n",
103
+ "__________________________________________________________________________________________________\n",
104
+ "activation_447 (Activation) (None, 56, 56, 64) 0 bn2b_branch2b[0][0] \n",
105
+ "__________________________________________________________________________________________________\n",
106
+ "res2b_branch2c (Conv2D) (None, 56, 56, 256) 16640 activation_447[0][0] \n",
107
+ "__________________________________________________________________________________________________\n",
108
+ "bn2b_branch2c (BatchNormalizati (None, 56, 56, 256) 1024 res2b_branch2c[0][0] \n",
109
+ "__________________________________________________________________________________________________\n",
110
+ "add_146 (Add) (None, 56, 56, 256) 0 bn2b_branch2c[0][0] \n",
111
+ " activation_445[0][0] \n",
112
+ "__________________________________________________________________________________________________\n",
113
+ "activation_448 (Activation) (None, 56, 56, 256) 0 add_146[0][0] \n",
114
+ "__________________________________________________________________________________________________\n",
115
+ "res2c_branch2a (Conv2D) (None, 56, 56, 64) 16448 activation_448[0][0] \n",
116
+ "__________________________________________________________________________________________________\n",
117
+ "bn2c_branch2a (BatchNormalizati (None, 56, 56, 64) 256 res2c_branch2a[0][0] \n",
118
+ "__________________________________________________________________________________________________\n",
119
+ "activation_449 (Activation) (None, 56, 56, 64) 0 bn2c_branch2a[0][0] \n",
120
+ "__________________________________________________________________________________________________\n",
121
+ "res2c_branch2b (Conv2D) (None, 56, 56, 64) 36928 activation_449[0][0] \n",
122
+ "__________________________________________________________________________________________________\n",
123
+ "bn2c_branch2b (BatchNormalizati (None, 56, 56, 64) 256 res2c_branch2b[0][0] \n",
124
+ "__________________________________________________________________________________________________\n",
125
+ "activation_450 (Activation) (None, 56, 56, 64) 0 bn2c_branch2b[0][0] \n",
126
+ "__________________________________________________________________________________________________\n",
127
+ "res2c_branch2c (Conv2D) (None, 56, 56, 256) 16640 activation_450[0][0] \n",
128
+ "__________________________________________________________________________________________________\n",
129
+ "bn2c_branch2c (BatchNormalizati (None, 56, 56, 256) 1024 res2c_branch2c[0][0] \n",
130
+ "__________________________________________________________________________________________________\n",
131
+ "add_147 (Add) (None, 56, 56, 256) 0 bn2c_branch2c[0][0] \n",
132
+ " activation_448[0][0] \n",
133
+ "__________________________________________________________________________________________________\n",
134
+ "activation_451 (Activation) (None, 56, 56, 256) 0 add_147[0][0] \n",
135
+ "__________________________________________________________________________________________________\n",
136
+ "res3a_branch2a (Conv2D) (None, 28, 28, 128) 32896 activation_451[0][0] \n",
137
+ "__________________________________________________________________________________________________\n",
138
+ "bn3a_branch2a (BatchNormalizati (None, 28, 28, 128) 512 res3a_branch2a[0][0] \n",
139
+ "__________________________________________________________________________________________________\n",
140
+ "activation_452 (Activation) (None, 28, 28, 128) 0 bn3a_branch2a[0][0] \n",
141
+ "__________________________________________________________________________________________________\n",
142
+ "res3a_branch2b (Conv2D) (None, 28, 28, 128) 147584 activation_452[0][0] \n",
143
+ "__________________________________________________________________________________________________\n",
144
+ "bn3a_branch2b (BatchNormalizati (None, 28, 28, 128) 512 res3a_branch2b[0][0] \n",
145
+ "__________________________________________________________________________________________________\n",
146
+ "activation_453 (Activation) (None, 28, 28, 128) 0 bn3a_branch2b[0][0] \n",
147
+ "__________________________________________________________________________________________________\n",
148
+ "res3a_branch2c (Conv2D) (None, 28, 28, 512) 66048 activation_453[0][0] \n",
149
+ "__________________________________________________________________________________________________\n",
150
+ "res3a_branch1 (Conv2D) (None, 28, 28, 512) 131584 activation_451[0][0] \n",
151
+ "__________________________________________________________________________________________________\n",
152
+ "bn3a_branch2c (BatchNormalizati (None, 28, 28, 512) 2048 res3a_branch2c[0][0] \n",
153
+ "__________________________________________________________________________________________________\n",
154
+ "bn3a_branch1 (BatchNormalizatio (None, 28, 28, 512) 2048 res3a_branch1[0][0] \n",
155
+ "__________________________________________________________________________________________________\n",
156
+ "add_148 (Add) (None, 28, 28, 512) 0 bn3a_branch2c[0][0] \n",
157
+ " bn3a_branch1[0][0] \n",
158
+ "__________________________________________________________________________________________________\n",
159
+ "activation_454 (Activation) (None, 28, 28, 512) 0 add_148[0][0] \n",
160
+ "__________________________________________________________________________________________________\n",
161
+ "res3b_branch2a (Conv2D) (None, 28, 28, 128) 65664 activation_454[0][0] \n",
162
+ "__________________________________________________________________________________________________\n",
163
+ "bn3b_branch2a (BatchNormalizati (None, 28, 28, 128) 512 res3b_branch2a[0][0] \n",
164
+ "__________________________________________________________________________________________________\n",
165
+ "activation_455 (Activation) (None, 28, 28, 128) 0 bn3b_branch2a[0][0] \n",
166
+ "__________________________________________________________________________________________________\n",
167
+ "res3b_branch2b (Conv2D) (None, 28, 28, 128) 147584 activation_455[0][0] \n",
168
+ "__________________________________________________________________________________________________\n",
169
+ "bn3b_branch2b (BatchNormalizati (None, 28, 28, 128) 512 res3b_branch2b[0][0] \n",
170
+ "__________________________________________________________________________________________________\n",
171
+ "activation_456 (Activation) (None, 28, 28, 128) 0 bn3b_branch2b[0][0] \n",
172
+ "__________________________________________________________________________________________________\n",
173
+ "res3b_branch2c (Conv2D) (None, 28, 28, 512) 66048 activation_456[0][0] \n",
174
+ "__________________________________________________________________________________________________\n",
175
+ "bn3b_branch2c (BatchNormalizati (None, 28, 28, 512) 2048 res3b_branch2c[0][0] \n",
176
+ "__________________________________________________________________________________________________\n",
177
+ "add_149 (Add) (None, 28, 28, 512) 0 bn3b_branch2c[0][0] \n",
178
+ " activation_454[0][0] \n",
179
+ "__________________________________________________________________________________________________\n",
180
+ "activation_457 (Activation) (None, 28, 28, 512) 0 add_149[0][0] \n",
181
+ "__________________________________________________________________________________________________\n",
182
+ "res3c_branch2a (Conv2D) (None, 28, 28, 128) 65664 activation_457[0][0] \n",
183
+ "__________________________________________________________________________________________________\n",
184
+ "bn3c_branch2a (BatchNormalizati (None, 28, 28, 128) 512 res3c_branch2a[0][0] \n",
185
+ "__________________________________________________________________________________________________\n",
186
+ "activation_458 (Activation) (None, 28, 28, 128) 0 bn3c_branch2a[0][0] \n",
187
+ "__________________________________________________________________________________________________\n",
188
+ "res3c_branch2b (Conv2D) (None, 28, 28, 128) 147584 activation_458[0][0] \n",
189
+ "__________________________________________________________________________________________________\n",
190
+ "bn3c_branch2b (BatchNormalizati (None, 28, 28, 128) 512 res3c_branch2b[0][0] \n",
191
+ "__________________________________________________________________________________________________\n",
192
+ "activation_459 (Activation) (None, 28, 28, 128) 0 bn3c_branch2b[0][0] \n",
193
+ "__________________________________________________________________________________________________\n",
194
+ "res3c_branch2c (Conv2D) (None, 28, 28, 512) 66048 activation_459[0][0] \n",
195
+ "__________________________________________________________________________________________________\n",
196
+ "bn3c_branch2c (BatchNormalizati (None, 28, 28, 512) 2048 res3c_branch2c[0][0] \n",
197
+ "__________________________________________________________________________________________________\n",
198
+ "add_150 (Add) (None, 28, 28, 512) 0 bn3c_branch2c[0][0] \n",
199
+ " activation_457[0][0] \n",
200
+ "__________________________________________________________________________________________________\n",
201
+ "activation_460 (Activation) (None, 28, 28, 512) 0 add_150[0][0] \n",
202
+ "__________________________________________________________________________________________________\n",
203
+ "res3d_branch2a (Conv2D) (None, 28, 28, 128) 65664 activation_460[0][0] \n",
204
+ "__________________________________________________________________________________________________\n",
205
+ "bn3d_branch2a (BatchNormalizati (None, 28, 28, 128) 512 res3d_branch2a[0][0] \n",
206
+ "__________________________________________________________________________________________________\n",
207
+ "activation_461 (Activation) (None, 28, 28, 128) 0 bn3d_branch2a[0][0] \n",
208
+ "__________________________________________________________________________________________________\n",
209
+ "res3d_branch2b (Conv2D) (None, 28, 28, 128) 147584 activation_461[0][0] \n",
210
+ "__________________________________________________________________________________________________\n",
211
+ "bn3d_branch2b (BatchNormalizati (None, 28, 28, 128) 512 res3d_branch2b[0][0] \n",
212
+ "__________________________________________________________________________________________________\n",
213
+ "activation_462 (Activation) (None, 28, 28, 128) 0 bn3d_branch2b[0][0] \n",
214
+ "__________________________________________________________________________________________________\n",
215
+ "res3d_branch2c (Conv2D) (None, 28, 28, 512) 66048 activation_462[0][0] \n",
216
+ "__________________________________________________________________________________________________\n",
217
+ "bn3d_branch2c (BatchNormalizati (None, 28, 28, 512) 2048 res3d_branch2c[0][0] \n",
218
+ "__________________________________________________________________________________________________\n",
219
+ "add_151 (Add) (None, 28, 28, 512) 0 bn3d_branch2c[0][0] \n",
220
+ " activation_460[0][0] \n",
221
+ "__________________________________________________________________________________________________\n",
222
+ "activation_463 (Activation) (None, 28, 28, 512) 0 add_151[0][0] \n",
223
+ "__________________________________________________________________________________________________\n",
224
+ "res4a_branch2a (Conv2D) (None, 14, 14, 256) 131328 activation_463[0][0] \n",
225
+ "__________________________________________________________________________________________________\n",
226
+ "bn4a_branch2a (BatchNormalizati (None, 14, 14, 256) 1024 res4a_branch2a[0][0] \n",
227
+ "__________________________________________________________________________________________________\n",
228
+ "activation_464 (Activation) (None, 14, 14, 256) 0 bn4a_branch2a[0][0] \n",
229
+ "__________________________________________________________________________________________________\n",
230
+ "res4a_branch2b (Conv2D) (None, 14, 14, 256) 590080 activation_464[0][0] \n",
231
+ "__________________________________________________________________________________________________\n",
232
+ "bn4a_branch2b (BatchNormalizati (None, 14, 14, 256) 1024 res4a_branch2b[0][0] \n",
233
+ "__________________________________________________________________________________________________\n",
234
+ "activation_465 (Activation) (None, 14, 14, 256) 0 bn4a_branch2b[0][0] \n",
235
+ "__________________________________________________________________________________________________\n",
236
+ "res4a_branch2c (Conv2D) (None, 14, 14, 1024) 263168 activation_465[0][0] \n",
237
+ "__________________________________________________________________________________________________\n",
238
+ "res4a_branch1 (Conv2D) (None, 14, 14, 1024) 525312 activation_463[0][0] \n",
239
+ "__________________________________________________________________________________________________\n",
240
+ "bn4a_branch2c (BatchNormalizati (None, 14, 14, 1024) 4096 res4a_branch2c[0][0] \n",
241
+ "__________________________________________________________________________________________________\n",
242
+ "bn4a_branch1 (BatchNormalizatio (None, 14, 14, 1024) 4096 res4a_branch1[0][0] \n",
243
+ "__________________________________________________________________________________________________\n",
244
+ "add_152 (Add) (None, 14, 14, 1024) 0 bn4a_branch2c[0][0] \n",
245
+ " bn4a_branch1[0][0] \n",
246
+ "__________________________________________________________________________________________________\n",
247
+ "activation_466 (Activation) (None, 14, 14, 1024) 0 add_152[0][0] \n",
248
+ "__________________________________________________________________________________________________\n",
249
+ "res4b_branch2a (Conv2D) (None, 14, 14, 256) 262400 activation_466[0][0] \n",
250
+ "__________________________________________________________________________________________________\n",
251
+ "bn4b_branch2a (BatchNormalizati (None, 14, 14, 256) 1024 res4b_branch2a[0][0] \n",
252
+ "__________________________________________________________________________________________________\n",
253
+ "activation_467 (Activation) (None, 14, 14, 256) 0 bn4b_branch2a[0][0] \n",
254
+ "__________________________________________________________________________________________________\n",
255
+ "res4b_branch2b (Conv2D) (None, 14, 14, 256) 590080 activation_467[0][0] \n",
256
+ "__________________________________________________________________________________________________\n",
257
+ "bn4b_branch2b (BatchNormalizati (None, 14, 14, 256) 1024 res4b_branch2b[0][0] \n",
258
+ "__________________________________________________________________________________________________\n",
259
+ "activation_468 (Activation) (None, 14, 14, 256) 0 bn4b_branch2b[0][0] \n",
260
+ "__________________________________________________________________________________________________\n",
261
+ "res4b_branch2c (Conv2D) (None, 14, 14, 1024) 263168 activation_468[0][0] \n",
262
+ "__________________________________________________________________________________________________\n",
263
+ "bn4b_branch2c (BatchNormalizati (None, 14, 14, 1024) 4096 res4b_branch2c[0][0] \n",
264
+ "__________________________________________________________________________________________________\n",
265
+ "add_153 (Add) (None, 14, 14, 1024) 0 bn4b_branch2c[0][0] \n",
266
+ " activation_466[0][0] \n",
267
+ "__________________________________________________________________________________________________\n",
268
+ "activation_469 (Activation) (None, 14, 14, 1024) 0 add_153[0][0] \n",
269
+ "__________________________________________________________________________________________________\n",
270
+ "res4c_branch2a (Conv2D) (None, 14, 14, 256) 262400 activation_469[0][0] \n",
271
+ "__________________________________________________________________________________________________\n",
272
+ "bn4c_branch2a (BatchNormalizati (None, 14, 14, 256) 1024 res4c_branch2a[0][0] \n",
273
+ "__________________________________________________________________________________________________\n",
274
+ "activation_470 (Activation) (None, 14, 14, 256) 0 bn4c_branch2a[0][0] \n",
275
+ "__________________________________________________________________________________________________\n",
276
+ "res4c_branch2b (Conv2D) (None, 14, 14, 256) 590080 activation_470[0][0] \n",
277
+ "__________________________________________________________________________________________________\n",
278
+ "bn4c_branch2b (BatchNormalizati (None, 14, 14, 256) 1024 res4c_branch2b[0][0] \n",
279
+ "__________________________________________________________________________________________________\n",
280
+ "activation_471 (Activation) (None, 14, 14, 256) 0 bn4c_branch2b[0][0] \n",
281
+ "__________________________________________________________________________________________________\n",
282
+ "res4c_branch2c (Conv2D) (None, 14, 14, 1024) 263168 activation_471[0][0] \n",
283
+ "__________________________________________________________________________________________________\n",
284
+ "bn4c_branch2c (BatchNormalizati (None, 14, 14, 1024) 4096 res4c_branch2c[0][0] \n",
285
+ "__________________________________________________________________________________________________\n",
286
+ "add_154 (Add) (None, 14, 14, 1024) 0 bn4c_branch2c[0][0] \n",
287
+ " activation_469[0][0] \n",
288
+ "__________________________________________________________________________________________________\n",
289
+ "activation_472 (Activation) (None, 14, 14, 1024) 0 add_154[0][0] \n",
290
+ "__________________________________________________________________________________________________\n",
291
+ "res4d_branch2a (Conv2D) (None, 14, 14, 256) 262400 activation_472[0][0] \n",
292
+ "__________________________________________________________________________________________________\n",
293
+ "bn4d_branch2a (BatchNormalizati (None, 14, 14, 256) 1024 res4d_branch2a[0][0] \n",
294
+ "__________________________________________________________________________________________________\n",
295
+ "activation_473 (Activation) (None, 14, 14, 256) 0 bn4d_branch2a[0][0] \n",
296
+ "__________________________________________________________________________________________________\n",
297
+ "res4d_branch2b (Conv2D) (None, 14, 14, 256) 590080 activation_473[0][0] \n",
298
+ "__________________________________________________________________________________________________\n",
299
+ "bn4d_branch2b (BatchNormalizati (None, 14, 14, 256) 1024 res4d_branch2b[0][0] \n",
300
+ "__________________________________________________________________________________________________\n",
301
+ "activation_474 (Activation) (None, 14, 14, 256) 0 bn4d_branch2b[0][0] \n",
302
+ "__________________________________________________________________________________________________\n",
303
+ "res4d_branch2c (Conv2D) (None, 14, 14, 1024) 263168 activation_474[0][0] \n",
304
+ "__________________________________________________________________________________________________\n",
305
+ "bn4d_branch2c (BatchNormalizati (None, 14, 14, 1024) 4096 res4d_branch2c[0][0] \n",
306
+ "__________________________________________________________________________________________________\n",
307
+ "add_155 (Add) (None, 14, 14, 1024) 0 bn4d_branch2c[0][0] \n",
308
+ " activation_472[0][0] \n",
309
+ "__________________________________________________________________________________________________\n",
310
+ "activation_475 (Activation) (None, 14, 14, 1024) 0 add_155[0][0] \n",
311
+ "__________________________________________________________________________________________________\n",
312
+ "res4e_branch2a (Conv2D) (None, 14, 14, 256) 262400 activation_475[0][0] \n",
313
+ "__________________________________________________________________________________________________\n",
314
+ "bn4e_branch2a (BatchNormalizati (None, 14, 14, 256) 1024 res4e_branch2a[0][0] \n",
315
+ "__________________________________________________________________________________________________\n",
316
+ "activation_476 (Activation) (None, 14, 14, 256) 0 bn4e_branch2a[0][0] \n",
317
+ "__________________________________________________________________________________________________\n",
318
+ "res4e_branch2b (Conv2D) (None, 14, 14, 256) 590080 activation_476[0][0] \n",
319
+ "__________________________________________________________________________________________________\n",
320
+ "bn4e_branch2b (BatchNormalizati (None, 14, 14, 256) 1024 res4e_branch2b[0][0] \n",
321
+ "__________________________________________________________________________________________________\n",
322
+ "activation_477 (Activation) (None, 14, 14, 256) 0 bn4e_branch2b[0][0] \n",
323
+ "__________________________________________________________________________________________________\n",
324
+ "res4e_branch2c (Conv2D) (None, 14, 14, 1024) 263168 activation_477[0][0] \n",
325
+ "__________________________________________________________________________________________________\n",
326
+ "bn4e_branch2c (BatchNormalizati (None, 14, 14, 1024) 4096 res4e_branch2c[0][0] \n",
327
+ "__________________________________________________________________________________________________\n",
328
+ "add_156 (Add) (None, 14, 14, 1024) 0 bn4e_branch2c[0][0] \n",
329
+ " activation_475[0][0] \n",
330
+ "__________________________________________________________________________________________________\n",
331
+ "activation_478 (Activation) (None, 14, 14, 1024) 0 add_156[0][0] \n",
332
+ "__________________________________________________________________________________________________\n",
333
+ "res4f_branch2a (Conv2D) (None, 14, 14, 256) 262400 activation_478[0][0] \n",
334
+ "__________________________________________________________________________________________________\n",
335
+ "bn4f_branch2a (BatchNormalizati (None, 14, 14, 256) 1024 res4f_branch2a[0][0] \n",
336
+ "__________________________________________________________________________________________________\n",
337
+ "activation_479 (Activation) (None, 14, 14, 256) 0 bn4f_branch2a[0][0] \n",
338
+ "__________________________________________________________________________________________________\n",
339
+ "res4f_branch2b (Conv2D) (None, 14, 14, 256) 590080 activation_479[0][0] \n",
340
+ "__________________________________________________________________________________________________\n",
341
+ "bn4f_branch2b (BatchNormalizati (None, 14, 14, 256) 1024 res4f_branch2b[0][0] \n",
342
+ "__________________________________________________________________________________________________\n",
343
+ "activation_480 (Activation) (None, 14, 14, 256) 0 bn4f_branch2b[0][0] \n",
344
+ "__________________________________________________________________________________________________\n",
345
+ "res4f_branch2c (Conv2D) (None, 14, 14, 1024) 263168 activation_480[0][0] \n",
346
+ "__________________________________________________________________________________________________\n",
347
+ "bn4f_branch2c (BatchNormalizati (None, 14, 14, 1024) 4096 res4f_branch2c[0][0] \n",
348
+ "__________________________________________________________________________________________________\n",
349
+ "add_157 (Add) (None, 14, 14, 1024) 0 bn4f_branch2c[0][0] \n",
350
+ " activation_478[0][0] \n",
351
+ "__________________________________________________________________________________________________\n",
352
+ "activation_481 (Activation) (None, 14, 14, 1024) 0 add_157[0][0] \n",
353
+ "__________________________________________________________________________________________________\n",
354
+ "res5a_branch2a (Conv2D) (None, 7, 7, 512) 524800 activation_481[0][0] \n",
355
+ "__________________________________________________________________________________________________\n",
356
+ "bn5a_branch2a (BatchNormalizati (None, 7, 7, 512) 2048 res5a_branch2a[0][0] \n",
357
+ "__________________________________________________________________________________________________\n",
358
+ "activation_482 (Activation) (None, 7, 7, 512) 0 bn5a_branch2a[0][0] \n",
359
+ "__________________________________________________________________________________________________\n",
360
+ "res5a_branch2b (Conv2D) (None, 7, 7, 512) 2359808 activation_482[0][0] \n",
361
+ "__________________________________________________________________________________________________\n",
362
+ "bn5a_branch2b (BatchNormalizati (None, 7, 7, 512) 2048 res5a_branch2b[0][0] \n",
363
+ "__________________________________________________________________________________________________\n",
364
+ "activation_483 (Activation) (None, 7, 7, 512) 0 bn5a_branch2b[0][0] \n",
365
+ "__________________________________________________________________________________________________\n",
366
+ "res5a_branch2c (Conv2D) (None, 7, 7, 2048) 1050624 activation_483[0][0] \n",
367
+ "__________________________________________________________________________________________________\n",
368
+ "res5a_branch1 (Conv2D) (None, 7, 7, 2048) 2099200 activation_481[0][0] \n",
369
+ "__________________________________________________________________________________________________\n",
370
+ "bn5a_branch2c (BatchNormalizati (None, 7, 7, 2048) 8192 res5a_branch2c[0][0] \n",
371
+ "__________________________________________________________________________________________________\n",
372
+ "bn5a_branch1 (BatchNormalizatio (None, 7, 7, 2048) 8192 res5a_branch1[0][0] \n",
373
+ "__________________________________________________________________________________________________\n",
374
+ "add_158 (Add) (None, 7, 7, 2048) 0 bn5a_branch2c[0][0] \n",
375
+ " bn5a_branch1[0][0] \n",
376
+ "__________________________________________________________________________________________________\n",
377
+ "activation_484 (Activation) (None, 7, 7, 2048) 0 add_158[0][0] \n",
378
+ "__________________________________________________________________________________________________\n",
379
+ "res5b_branch2a (Conv2D) (None, 7, 7, 512) 1049088 activation_484[0][0] \n",
380
+ "__________________________________________________________________________________________________\n",
381
+ "bn5b_branch2a (BatchNormalizati (None, 7, 7, 512) 2048 res5b_branch2a[0][0] \n",
382
+ "__________________________________________________________________________________________________\n",
383
+ "activation_485 (Activation) (None, 7, 7, 512) 0 bn5b_branch2a[0][0] \n",
384
+ "__________________________________________________________________________________________________\n",
385
+ "res5b_branch2b (Conv2D) (None, 7, 7, 512) 2359808 activation_485[0][0] \n",
386
+ "__________________________________________________________________________________________________\n",
387
+ "bn5b_branch2b (BatchNormalizati (None, 7, 7, 512) 2048 res5b_branch2b[0][0] \n",
388
+ "__________________________________________________________________________________________________\n",
389
+ "activation_486 (Activation) (None, 7, 7, 512) 0 bn5b_branch2b[0][0] \n",
390
+ "__________________________________________________________________________________________________\n",
391
+ "res5b_branch2c (Conv2D) (None, 7, 7, 2048) 1050624 activation_486[0][0] \n",
392
+ "__________________________________________________________________________________________________\n",
393
+ "bn5b_branch2c (BatchNormalizati (None, 7, 7, 2048) 8192 res5b_branch2c[0][0] \n",
394
+ "__________________________________________________________________________________________________\n",
395
+ "add_159 (Add) (None, 7, 7, 2048) 0 bn5b_branch2c[0][0] \n",
396
+ " activation_484[0][0] \n",
397
+ "__________________________________________________________________________________________________\n",
398
+ "activation_487 (Activation) (None, 7, 7, 2048) 0 add_159[0][0] \n",
399
+ "__________________________________________________________________________________________________\n",
400
+ "res5c_branch2a (Conv2D) (None, 7, 7, 512) 1049088 activation_487[0][0] \n",
401
+ "__________________________________________________________________________________________________\n",
402
+ "bn5c_branch2a (BatchNormalizati (None, 7, 7, 512) 2048 res5c_branch2a[0][0] \n",
403
+ "__________________________________________________________________________________________________\n",
404
+ "activation_488 (Activation) (None, 7, 7, 512) 0 bn5c_branch2a[0][0] \n",
405
+ "__________________________________________________________________________________________________\n",
406
+ "res5c_branch2b (Conv2D) (None, 7, 7, 512) 2359808 activation_488[0][0] \n",
407
+ "__________________________________________________________________________________________________\n",
408
+ "bn5c_branch2b (BatchNormalizati (None, 7, 7, 512) 2048 res5c_branch2b[0][0] \n",
409
+ "__________________________________________________________________________________________________\n",
410
+ "activation_489 (Activation) (None, 7, 7, 512) 0 bn5c_branch2b[0][0] \n",
411
+ "__________________________________________________________________________________________________\n",
412
+ "res5c_branch2c (Conv2D) (None, 7, 7, 2048) 1050624 activation_489[0][0] \n",
413
+ "__________________________________________________________________________________________________\n",
414
+ "bn5c_branch2c (BatchNormalizati (None, 7, 7, 2048) 8192 res5c_branch2c[0][0] \n",
415
+ "__________________________________________________________________________________________________\n",
416
+ "add_160 (Add) (None, 7, 7, 2048) 0 bn5c_branch2c[0][0] \n",
417
+ " activation_487[0][0] \n",
418
+ "__________________________________________________________________________________________________\n",
419
+ "activation_490 (Activation) (None, 7, 7, 2048) 0 add_160[0][0] \n",
420
+ "__________________________________________________________________________________________________\n",
421
+ "global_average_pooling2d_8 (Glo (None, 2048) 0 activation_490[0][0] \n",
422
+ "__________________________________________________________________________________________________\n",
423
+ "dense_19 (Dense) (None, 256) 524544 global_average_pooling2d_8[0][0] \n",
424
+ "__________________________________________________________________________________________________\n",
425
+ "dropout_13 (Dropout) (None, 256) 0 dense_19[0][0] \n",
426
+ "__________________________________________________________________________________________________\n",
427
+ "dense_20 (Dense) (None, 128) 32896 dropout_13[0][0] \n",
428
+ "__________________________________________________________________________________________________\n",
429
+ "dropout_14 (Dropout) (None, 128) 0 dense_20[0][0] \n",
430
+ "__________________________________________________________________________________________________\n",
431
+ "dense_21 (Dense) (None, 64) 8256 dropout_14[0][0] \n",
432
+ "__________________________________________________________________________________________________\n",
433
+ "dropout_15 (Dropout) (None, 64) 0 dense_21[0][0] \n",
434
+ "__________________________________________________________________________________________________\n",
435
+ "dense_22 (Dense) (None, 2) 130 dropout_15[0][0] \n",
436
+ "==================================================================================================\n",
437
+ "Total params: 24,153,538\n",
438
+ "Trainable params: 565,826\n",
439
+ "Non-trainable params: 23,587,712\n",
440
+ "__________________________________________________________________________________________________\n"
441
+ ]
442
+ }
443
+ ],
444
+ "source": [
445
+ "x = base_model.output\n",
446
+ "x = GlobalAveragePooling2D()(x)\n",
447
+ "x = Dense(256,activation='relu')(x)\n",
448
+ "x = Dropout(0.5)(x)\n",
449
+ "x = Dense(128,activation='relu')(x)\n",
450
+ "x = Dropout(0.5)(x)\n",
451
+ "x = Dense(64,activation='relu')(x)\n",
452
+ "x = Dropout(0.5)(x)\n",
453
+ "x = Dense(2,activation='softmax')(x)\n",
454
+ "\n",
455
+ "\n",
456
+ "model = Model(inputs = base_model.input,outputs = x)\n",
457
+ "model.summary()"
458
+ ]
459
+ },
460
+ {
461
+ "cell_type": "code",
462
+ "execution_count": 72,
463
+ "metadata": {},
464
+ "outputs": [
465
+ {
466
+ "name": "stdout",
467
+ "output_type": "stream",
468
+ "text": [
469
+ "Model: \"model_7\"\n",
470
+ "__________________________________________________________________________________________________\n",
471
+ "Layer (type) Output Shape Param # Connected to \n",
472
+ "==================================================================================================\n",
473
+ "input_10 (InputLayer) (None, 224, 224, 3) 0 \n",
474
+ "__________________________________________________________________________________________________\n",
475
+ "conv1_pad (ZeroPadding2D) (None, 230, 230, 3) 0 input_10[0][0] \n",
476
+ "__________________________________________________________________________________________________\n",
477
+ "conv1 (Conv2D) (None, 112, 112, 64) 9472 conv1_pad[0][0] \n",
478
+ "__________________________________________________________________________________________________\n",
479
+ "bn_conv1 (BatchNormalization) (None, 112, 112, 64) 256 conv1[0][0] \n",
480
+ "__________________________________________________________________________________________________\n",
481
+ "activation_442 (Activation) (None, 112, 112, 64) 0 bn_conv1[0][0] \n",
482
+ "__________________________________________________________________________________________________\n",
483
+ "pool1_pad (ZeroPadding2D) (None, 114, 114, 64) 0 activation_442[0][0] \n",
484
+ "__________________________________________________________________________________________________\n",
485
+ "max_pooling2d_10 (MaxPooling2D) (None, 56, 56, 64) 0 pool1_pad[0][0] \n",
486
+ "__________________________________________________________________________________________________\n",
487
+ "res2a_branch2a (Conv2D) (None, 56, 56, 64) 4160 max_pooling2d_10[0][0] \n",
488
+ "__________________________________________________________________________________________________\n",
489
+ "bn2a_branch2a (BatchNormalizati (None, 56, 56, 64) 256 res2a_branch2a[0][0] \n",
490
+ "__________________________________________________________________________________________________\n",
491
+ "activation_443 (Activation) (None, 56, 56, 64) 0 bn2a_branch2a[0][0] \n",
492
+ "__________________________________________________________________________________________________\n",
493
+ "res2a_branch2b (Conv2D) (None, 56, 56, 64) 36928 activation_443[0][0] \n",
494
+ "__________________________________________________________________________________________________\n",
495
+ "bn2a_branch2b (BatchNormalizati (None, 56, 56, 64) 256 res2a_branch2b[0][0] \n",
496
+ "__________________________________________________________________________________________________\n",
497
+ "activation_444 (Activation) (None, 56, 56, 64) 0 bn2a_branch2b[0][0] \n",
498
+ "__________________________________________________________________________________________________\n",
499
+ "res2a_branch2c (Conv2D) (None, 56, 56, 256) 16640 activation_444[0][0] \n",
500
+ "__________________________________________________________________________________________________\n",
501
+ "res2a_branch1 (Conv2D) (None, 56, 56, 256) 16640 max_pooling2d_10[0][0] \n",
502
+ "__________________________________________________________________________________________________\n",
503
+ "bn2a_branch2c (BatchNormalizati (None, 56, 56, 256) 1024 res2a_branch2c[0][0] \n",
504
+ "__________________________________________________________________________________________________\n",
505
+ "bn2a_branch1 (BatchNormalizatio (None, 56, 56, 256) 1024 res2a_branch1[0][0] \n",
506
+ "__________________________________________________________________________________________________\n",
507
+ "add_145 (Add) (None, 56, 56, 256) 0 bn2a_branch2c[0][0] \n",
508
+ " bn2a_branch1[0][0] \n",
509
+ "__________________________________________________________________________________________________\n",
510
+ "activation_445 (Activation) (None, 56, 56, 256) 0 add_145[0][0] \n",
511
+ "__________________________________________________________________________________________________\n",
512
+ "res2b_branch2a (Conv2D) (None, 56, 56, 64) 16448 activation_445[0][0] \n",
513
+ "__________________________________________________________________________________________________\n",
514
+ "bn2b_branch2a (BatchNormalizati (None, 56, 56, 64) 256 res2b_branch2a[0][0] \n",
515
+ "__________________________________________________________________________________________________\n",
516
+ "activation_446 (Activation) (None, 56, 56, 64) 0 bn2b_branch2a[0][0] \n",
517
+ "__________________________________________________________________________________________________\n",
518
+ "res2b_branch2b (Conv2D) (None, 56, 56, 64) 36928 activation_446[0][0] \n",
519
+ "__________________________________________________________________________________________________\n",
520
+ "bn2b_branch2b (BatchNormalizati (None, 56, 56, 64) 256 res2b_branch2b[0][0] \n",
521
+ "__________________________________________________________________________________________________\n",
522
+ "activation_447 (Activation) (None, 56, 56, 64) 0 bn2b_branch2b[0][0] \n",
523
+ "__________________________________________________________________________________________________\n",
524
+ "res2b_branch2c (Conv2D) (None, 56, 56, 256) 16640 activation_447[0][0] \n",
525
+ "__________________________________________________________________________________________________\n",
526
+ "bn2b_branch2c (BatchNormalizati (None, 56, 56, 256) 1024 res2b_branch2c[0][0] \n",
527
+ "__________________________________________________________________________________________________\n",
528
+ "add_146 (Add) (None, 56, 56, 256) 0 bn2b_branch2c[0][0] \n",
529
+ " activation_445[0][0] \n",
530
+ "__________________________________________________________________________________________________\n",
531
+ "activation_448 (Activation) (None, 56, 56, 256) 0 add_146[0][0] \n",
532
+ "__________________________________________________________________________________________________\n",
533
+ "res2c_branch2a (Conv2D) (None, 56, 56, 64) 16448 activation_448[0][0] \n",
534
+ "__________________________________________________________________________________________________\n",
535
+ "bn2c_branch2a (BatchNormalizati (None, 56, 56, 64) 256 res2c_branch2a[0][0] \n",
536
+ "__________________________________________________________________________________________________\n",
537
+ "activation_449 (Activation) (None, 56, 56, 64) 0 bn2c_branch2a[0][0] \n",
538
+ "__________________________________________________________________________________________________\n",
539
+ "res2c_branch2b (Conv2D) (None, 56, 56, 64) 36928 activation_449[0][0] \n",
540
+ "__________________________________________________________________________________________________\n",
541
+ "bn2c_branch2b (BatchNormalizati (None, 56, 56, 64) 256 res2c_branch2b[0][0] \n",
542
+ "__________________________________________________________________________________________________\n",
543
+ "activation_450 (Activation) (None, 56, 56, 64) 0 bn2c_branch2b[0][0] \n",
544
+ "__________________________________________________________________________________________________\n",
545
+ "res2c_branch2c (Conv2D) (None, 56, 56, 256) 16640 activation_450[0][0] \n",
546
+ "__________________________________________________________________________________________________\n",
547
+ "bn2c_branch2c (BatchNormalizati (None, 56, 56, 256) 1024 res2c_branch2c[0][0] \n",
548
+ "__________________________________________________________________________________________________\n",
549
+ "add_147 (Add) (None, 56, 56, 256) 0 bn2c_branch2c[0][0] \n",
550
+ " activation_448[0][0] \n",
551
+ "__________________________________________________________________________________________________\n",
552
+ "activation_451 (Activation) (None, 56, 56, 256) 0 add_147[0][0] \n",
553
+ "__________________________________________________________________________________________________\n",
554
+ "res3a_branch2a (Conv2D) (None, 28, 28, 128) 32896 activation_451[0][0] \n",
555
+ "__________________________________________________________________________________________________\n",
556
+ "bn3a_branch2a (BatchNormalizati (None, 28, 28, 128) 512 res3a_branch2a[0][0] \n",
557
+ "__________________________________________________________________________________________________\n",
558
+ "activation_452 (Activation) (None, 28, 28, 128) 0 bn3a_branch2a[0][0] \n",
559
+ "__________________________________________________________________________________________________\n",
560
+ "res3a_branch2b (Conv2D) (None, 28, 28, 128) 147584 activation_452[0][0] \n",
561
+ "__________________________________________________________________________________________________\n",
562
+ "bn3a_branch2b (BatchNormalizati (None, 28, 28, 128) 512 res3a_branch2b[0][0] \n",
563
+ "__________________________________________________________________________________________________\n",
564
+ "activation_453 (Activation) (None, 28, 28, 128) 0 bn3a_branch2b[0][0] \n",
565
+ "__________________________________________________________________________________________________\n",
566
+ "res3a_branch2c (Conv2D) (None, 28, 28, 512) 66048 activation_453[0][0] \n",
567
+ "__________________________________________________________________________________________________\n",
568
+ "res3a_branch1 (Conv2D) (None, 28, 28, 512) 131584 activation_451[0][0] \n",
569
+ "__________________________________________________________________________________________________\n",
570
+ "bn3a_branch2c (BatchNormalizati (None, 28, 28, 512) 2048 res3a_branch2c[0][0] \n",
571
+ "__________________________________________________________________________________________________\n",
572
+ "bn3a_branch1 (BatchNormalizatio (None, 28, 28, 512) 2048 res3a_branch1[0][0] \n",
573
+ "__________________________________________________________________________________________________\n",
574
+ "add_148 (Add) (None, 28, 28, 512) 0 bn3a_branch2c[0][0] \n",
575
+ " bn3a_branch1[0][0] \n",
576
+ "__________________________________________________________________________________________________\n",
577
+ "activation_454 (Activation) (None, 28, 28, 512) 0 add_148[0][0] \n",
578
+ "__________________________________________________________________________________________________\n",
579
+ "res3b_branch2a (Conv2D) (None, 28, 28, 128) 65664 activation_454[0][0] \n",
580
+ "__________________________________________________________________________________________________\n",
581
+ "bn3b_branch2a (BatchNormalizati (None, 28, 28, 128) 512 res3b_branch2a[0][0] \n",
582
+ "__________________________________________________________________________________________________\n",
583
+ "activation_455 (Activation) (None, 28, 28, 128) 0 bn3b_branch2a[0][0] \n",
584
+ "__________________________________________________________________________________________________\n",
585
+ "res3b_branch2b (Conv2D) (None, 28, 28, 128) 147584 activation_455[0][0] \n",
586
+ "__________________________________________________________________________________________________\n",
587
+ "bn3b_branch2b (BatchNormalizati (None, 28, 28, 128) 512 res3b_branch2b[0][0] \n",
588
+ "__________________________________________________________________________________________________\n",
589
+ "activation_456 (Activation) (None, 28, 28, 128) 0 bn3b_branch2b[0][0] \n",
590
+ "__________________________________________________________________________________________________\n",
591
+ "res3b_branch2c (Conv2D) (None, 28, 28, 512) 66048 activation_456[0][0] \n",
592
+ "__________________________________________________________________________________________________\n",
593
+ "bn3b_branch2c (BatchNormalizati (None, 28, 28, 512) 2048 res3b_branch2c[0][0] \n",
594
+ "__________________________________________________________________________________________________\n",
595
+ "add_149 (Add) (None, 28, 28, 512) 0 bn3b_branch2c[0][0] \n",
596
+ " activation_454[0][0] \n",
597
+ "__________________________________________________________________________________________________\n",
598
+ "activation_457 (Activation) (None, 28, 28, 512) 0 add_149[0][0] \n",
599
+ "__________________________________________________________________________________________________\n",
600
+ "res3c_branch2a (Conv2D) (None, 28, 28, 128) 65664 activation_457[0][0] \n",
601
+ "__________________________________________________________________________________________________\n",
602
+ "bn3c_branch2a (BatchNormalizati (None, 28, 28, 128) 512 res3c_branch2a[0][0] \n",
603
+ "__________________________________________________________________________________________________\n",
604
+ "activation_458 (Activation) (None, 28, 28, 128) 0 bn3c_branch2a[0][0] \n",
605
+ "__________________________________________________________________________________________________\n",
606
+ "res3c_branch2b (Conv2D) (None, 28, 28, 128) 147584 activation_458[0][0] \n",
607
+ "__________________________________________________________________________________________________\n",
608
+ "bn3c_branch2b (BatchNormalizati (None, 28, 28, 128) 512 res3c_branch2b[0][0] \n",
609
+ "__________________________________________________________________________________________________\n",
610
+ "activation_459 (Activation) (None, 28, 28, 128) 0 bn3c_branch2b[0][0] \n",
611
+ "__________________________________________________________________________________________________\n",
612
+ "res3c_branch2c (Conv2D) (None, 28, 28, 512) 66048 activation_459[0][0] \n",
613
+ "__________________________________________________________________________________________________\n",
614
+ "bn3c_branch2c (BatchNormalizati (None, 28, 28, 512) 2048 res3c_branch2c[0][0] \n",
615
+ "__________________________________________________________________________________________________\n",
616
+ "add_150 (Add) (None, 28, 28, 512) 0 bn3c_branch2c[0][0] \n",
617
+ " activation_457[0][0] \n",
618
+ "__________________________________________________________________________________________________\n",
619
+ "activation_460 (Activation) (None, 28, 28, 512) 0 add_150[0][0] \n",
620
+ "__________________________________________________________________________________________________\n",
621
+ "res3d_branch2a (Conv2D) (None, 28, 28, 128) 65664 activation_460[0][0] \n",
622
+ "__________________________________________________________________________________________________\n",
623
+ "bn3d_branch2a (BatchNormalizati (None, 28, 28, 128) 512 res3d_branch2a[0][0] \n",
624
+ "__________________________________________________________________________________________________\n",
625
+ "activation_461 (Activation) (None, 28, 28, 128) 0 bn3d_branch2a[0][0] \n",
626
+ "__________________________________________________________________________________________________\n",
627
+ "res3d_branch2b (Conv2D) (None, 28, 28, 128) 147584 activation_461[0][0] \n",
628
+ "__________________________________________________________________________________________________\n",
629
+ "bn3d_branch2b (BatchNormalizati (None, 28, 28, 128) 512 res3d_branch2b[0][0] \n",
630
+ "__________________________________________________________________________________________________\n",
631
+ "activation_462 (Activation) (None, 28, 28, 128) 0 bn3d_branch2b[0][0] \n",
632
+ "__________________________________________________________________________________________________\n",
633
+ "res3d_branch2c (Conv2D) (None, 28, 28, 512) 66048 activation_462[0][0] \n",
634
+ "__________________________________________________________________________________________________\n",
635
+ "bn3d_branch2c (BatchNormalizati (None, 28, 28, 512) 2048 res3d_branch2c[0][0] \n",
636
+ "__________________________________________________________________________________________________\n",
637
+ "add_151 (Add) (None, 28, 28, 512) 0 bn3d_branch2c[0][0] \n",
638
+ " activation_460[0][0] \n",
639
+ "__________________________________________________________________________________________________\n",
640
+ "activation_463 (Activation) (None, 28, 28, 512) 0 add_151[0][0] \n",
641
+ "__________________________________________________________________________________________________\n",
642
+ "res4a_branch2a (Conv2D) (None, 14, 14, 256) 131328 activation_463[0][0] \n",
643
+ "__________________________________________________________________________________________________\n",
644
+ "bn4a_branch2a (BatchNormalizati (None, 14, 14, 256) 1024 res4a_branch2a[0][0] \n",
645
+ "__________________________________________________________________________________________________\n",
646
+ "activation_464 (Activation) (None, 14, 14, 256) 0 bn4a_branch2a[0][0] \n",
647
+ "__________________________________________________________________________________________________\n",
648
+ "res4a_branch2b (Conv2D) (None, 14, 14, 256) 590080 activation_464[0][0] \n",
649
+ "__________________________________________________________________________________________________\n",
650
+ "bn4a_branch2b (BatchNormalizati (None, 14, 14, 256) 1024 res4a_branch2b[0][0] \n",
651
+ "__________________________________________________________________________________________________\n",
652
+ "activation_465 (Activation) (None, 14, 14, 256) 0 bn4a_branch2b[0][0] \n",
653
+ "__________________________________________________________________________________________________\n",
654
+ "res4a_branch2c (Conv2D) (None, 14, 14, 1024) 263168 activation_465[0][0] \n",
655
+ "__________________________________________________________________________________________________\n",
656
+ "res4a_branch1 (Conv2D) (None, 14, 14, 1024) 525312 activation_463[0][0] \n",
657
+ "__________________________________________________________________________________________________\n",
658
+ "bn4a_branch2c (BatchNormalizati (None, 14, 14, 1024) 4096 res4a_branch2c[0][0] \n",
659
+ "__________________________________________________________________________________________________\n",
660
+ "bn4a_branch1 (BatchNormalizatio (None, 14, 14, 1024) 4096 res4a_branch1[0][0] \n",
661
+ "__________________________________________________________________________________________________\n",
662
+ "add_152 (Add) (None, 14, 14, 1024) 0 bn4a_branch2c[0][0] \n",
663
+ " bn4a_branch1[0][0] \n",
664
+ "__________________________________________________________________________________________________\n",
665
+ "activation_466 (Activation) (None, 14, 14, 1024) 0 add_152[0][0] \n",
666
+ "__________________________________________________________________________________________________\n",
667
+ "res4b_branch2a (Conv2D) (None, 14, 14, 256) 262400 activation_466[0][0] \n",
668
+ "__________________________________________________________________________________________________\n",
669
+ "bn4b_branch2a (BatchNormalizati (None, 14, 14, 256) 1024 res4b_branch2a[0][0] \n",
670
+ "__________________________________________________________________________________________________\n",
671
+ "activation_467 (Activation) (None, 14, 14, 256) 0 bn4b_branch2a[0][0] \n",
672
+ "__________________________________________________________________________________________________\n",
673
+ "res4b_branch2b (Conv2D) (None, 14, 14, 256) 590080 activation_467[0][0] \n",
674
+ "__________________________________________________________________________________________________\n",
675
+ "bn4b_branch2b (BatchNormalizati (None, 14, 14, 256) 1024 res4b_branch2b[0][0] \n",
676
+ "__________________________________________________________________________________________________\n",
677
+ "activation_468 (Activation) (None, 14, 14, 256) 0 bn4b_branch2b[0][0] \n",
678
+ "__________________________________________________________________________________________________\n",
679
+ "res4b_branch2c (Conv2D) (None, 14, 14, 1024) 263168 activation_468[0][0] \n",
680
+ "__________________________________________________________________________________________________\n",
681
+ "bn4b_branch2c (BatchNormalizati (None, 14, 14, 1024) 4096 res4b_branch2c[0][0] \n",
682
+ "__________________________________________________________________________________________________\n",
683
+ "add_153 (Add) (None, 14, 14, 1024) 0 bn4b_branch2c[0][0] \n",
684
+ " activation_466[0][0] \n",
685
+ "__________________________________________________________________________________________________\n",
686
+ "activation_469 (Activation) (None, 14, 14, 1024) 0 add_153[0][0] \n",
687
+ "__________________________________________________________________________________________________\n",
688
+ "res4c_branch2a (Conv2D) (None, 14, 14, 256) 262400 activation_469[0][0] \n",
689
+ "__________________________________________________________________________________________________\n",
690
+ "bn4c_branch2a (BatchNormalizati (None, 14, 14, 256) 1024 res4c_branch2a[0][0] \n",
691
+ "__________________________________________________________________________________________________\n",
692
+ "activation_470 (Activation) (None, 14, 14, 256) 0 bn4c_branch2a[0][0] \n",
693
+ "__________________________________________________________________________________________________\n",
694
+ "res4c_branch2b (Conv2D) (None, 14, 14, 256) 590080 activation_470[0][0] \n",
695
+ "__________________________________________________________________________________________________\n",
696
+ "bn4c_branch2b (BatchNormalizati (None, 14, 14, 256) 1024 res4c_branch2b[0][0] \n",
697
+ "__________________________________________________________________________________________________\n",
698
+ "activation_471 (Activation) (None, 14, 14, 256) 0 bn4c_branch2b[0][0] \n",
699
+ "__________________________________________________________________________________________________\n",
700
+ "res4c_branch2c (Conv2D) (None, 14, 14, 1024) 263168 activation_471[0][0] \n",
701
+ "__________________________________________________________________________________________________\n",
702
+ "bn4c_branch2c (BatchNormalizati (None, 14, 14, 1024) 4096 res4c_branch2c[0][0] \n",
703
+ "__________________________________________________________________________________________________\n",
704
+ "add_154 (Add) (None, 14, 14, 1024) 0 bn4c_branch2c[0][0] \n",
705
+ " activation_469[0][0] \n",
706
+ "__________________________________________________________________________________________________\n",
707
+ "activation_472 (Activation) (None, 14, 14, 1024) 0 add_154[0][0] \n",
708
+ "__________________________________________________________________________________________________\n",
709
+ "res4d_branch2a (Conv2D) (None, 14, 14, 256) 262400 activation_472[0][0] \n",
710
+ "__________________________________________________________________________________________________\n",
711
+ "bn4d_branch2a (BatchNormalizati (None, 14, 14, 256) 1024 res4d_branch2a[0][0] \n",
712
+ "__________________________________________________________________________________________________\n",
713
+ "activation_473 (Activation) (None, 14, 14, 256) 0 bn4d_branch2a[0][0] \n",
714
+ "__________________________________________________________________________________________________\n",
715
+ "res4d_branch2b (Conv2D) (None, 14, 14, 256) 590080 activation_473[0][0] \n",
716
+ "__________________________________________________________________________________________________\n",
717
+ "bn4d_branch2b (BatchNormalizati (None, 14, 14, 256) 1024 res4d_branch2b[0][0] \n",
718
+ "__________________________________________________________________________________________________\n",
719
+ "activation_474 (Activation) (None, 14, 14, 256) 0 bn4d_branch2b[0][0] \n",
720
+ "__________________________________________________________________________________________________\n",
721
+ "res4d_branch2c (Conv2D) (None, 14, 14, 1024) 263168 activation_474[0][0] \n",
722
+ "__________________________________________________________________________________________________\n",
723
+ "bn4d_branch2c (BatchNormalizati (None, 14, 14, 1024) 4096 res4d_branch2c[0][0] \n",
724
+ "__________________________________________________________________________________________________\n",
725
+ "add_155 (Add) (None, 14, 14, 1024) 0 bn4d_branch2c[0][0] \n",
726
+ " activation_472[0][0] \n",
727
+ "__________________________________________________________________________________________________\n",
728
+ "activation_475 (Activation) (None, 14, 14, 1024) 0 add_155[0][0] \n",
729
+ "__________________________________________________________________________________________________\n",
730
+ "res4e_branch2a (Conv2D) (None, 14, 14, 256) 262400 activation_475[0][0] \n",
731
+ "__________________________________________________________________________________________________\n",
732
+ "bn4e_branch2a (BatchNormalizati (None, 14, 14, 256) 1024 res4e_branch2a[0][0] \n",
733
+ "__________________________________________________________________________________________________\n",
734
+ "activation_476 (Activation) (None, 14, 14, 256) 0 bn4e_branch2a[0][0] \n",
735
+ "__________________________________________________________________________________________________\n",
736
+ "res4e_branch2b (Conv2D) (None, 14, 14, 256) 590080 activation_476[0][0] \n",
737
+ "__________________________________________________________________________________________________\n",
738
+ "bn4e_branch2b (BatchNormalizati (None, 14, 14, 256) 1024 res4e_branch2b[0][0] \n",
739
+ "__________________________________________________________________________________________________\n",
740
+ "activation_477 (Activation) (None, 14, 14, 256) 0 bn4e_branch2b[0][0] \n",
741
+ "__________________________________________________________________________________________________\n",
742
+ "res4e_branch2c (Conv2D) (None, 14, 14, 1024) 263168 activation_477[0][0] \n",
743
+ "__________________________________________________________________________________________________\n",
744
+ "bn4e_branch2c (BatchNormalizati (None, 14, 14, 1024) 4096 res4e_branch2c[0][0] \n",
745
+ "__________________________________________________________________________________________________\n",
746
+ "add_156 (Add) (None, 14, 14, 1024) 0 bn4e_branch2c[0][0] \n",
747
+ " activation_475[0][0] \n",
748
+ "__________________________________________________________________________________________________\n",
749
+ "activation_478 (Activation) (None, 14, 14, 1024) 0 add_156[0][0] \n",
750
+ "__________________________________________________________________________________________________\n",
751
+ "res4f_branch2a (Conv2D) (None, 14, 14, 256) 262400 activation_478[0][0] \n",
752
+ "__________________________________________________________________________________________________\n",
753
+ "bn4f_branch2a (BatchNormalizati (None, 14, 14, 256) 1024 res4f_branch2a[0][0] \n",
754
+ "__________________________________________________________________________________________________\n",
755
+ "activation_479 (Activation) (None, 14, 14, 256) 0 bn4f_branch2a[0][0] \n",
756
+ "__________________________________________________________________________________________________\n",
757
+ "res4f_branch2b (Conv2D) (None, 14, 14, 256) 590080 activation_479[0][0] \n",
758
+ "__________________________________________________________________________________________________\n",
759
+ "bn4f_branch2b (BatchNormalizati (None, 14, 14, 256) 1024 res4f_branch2b[0][0] \n",
760
+ "__________________________________________________________________________________________________\n",
761
+ "activation_480 (Activation) (None, 14, 14, 256) 0 bn4f_branch2b[0][0] \n",
762
+ "__________________________________________________________________________________________________\n",
763
+ "res4f_branch2c (Conv2D) (None, 14, 14, 1024) 263168 activation_480[0][0] \n",
764
+ "__________________________________________________________________________________________________\n",
765
+ "bn4f_branch2c (BatchNormalizati (None, 14, 14, 1024) 4096 res4f_branch2c[0][0] \n",
766
+ "__________________________________________________________________________________________________\n",
767
+ "add_157 (Add) (None, 14, 14, 1024) 0 bn4f_branch2c[0][0] \n",
768
+ " activation_478[0][0] \n",
769
+ "__________________________________________________________________________________________________\n",
770
+ "activation_481 (Activation) (None, 14, 14, 1024) 0 add_157[0][0] \n",
771
+ "__________________________________________________________________________________________________\n",
772
+ "res5a_branch2a (Conv2D) (None, 7, 7, 512) 524800 activation_481[0][0] \n",
773
+ "__________________________________________________________________________________________________\n",
774
+ "bn5a_branch2a (BatchNormalizati (None, 7, 7, 512) 2048 res5a_branch2a[0][0] \n",
775
+ "__________________________________________________________________________________________________\n",
776
+ "activation_482 (Activation) (None, 7, 7, 512) 0 bn5a_branch2a[0][0] \n",
777
+ "__________________________________________________________________________________________________\n",
778
+ "res5a_branch2b (Conv2D) (None, 7, 7, 512) 2359808 activation_482[0][0] \n",
779
+ "__________________________________________________________________________________________________\n",
780
+ "bn5a_branch2b (BatchNormalizati (None, 7, 7, 512) 2048 res5a_branch2b[0][0] \n",
781
+ "__________________________________________________________________________________________________\n",
782
+ "activation_483 (Activation) (None, 7, 7, 512) 0 bn5a_branch2b[0][0] \n",
783
+ "__________________________________________________________________________________________________\n",
784
+ "res5a_branch2c (Conv2D) (None, 7, 7, 2048) 1050624 activation_483[0][0] \n",
785
+ "__________________________________________________________________________________________________\n",
786
+ "res5a_branch1 (Conv2D) (None, 7, 7, 2048) 2099200 activation_481[0][0] \n",
787
+ "__________________________________________________________________________________________________\n",
788
+ "bn5a_branch2c (BatchNormalizati (None, 7, 7, 2048) 8192 res5a_branch2c[0][0] \n",
789
+ "__________________________________________________________________________________________________\n",
790
+ "bn5a_branch1 (BatchNormalizatio (None, 7, 7, 2048) 8192 res5a_branch1[0][0] \n",
791
+ "__________________________________________________________________________________________________\n",
792
+ "add_158 (Add) (None, 7, 7, 2048) 0 bn5a_branch2c[0][0] \n",
793
+ " bn5a_branch1[0][0] \n",
794
+ "__________________________________________________________________________________________________\n",
795
+ "activation_484 (Activation) (None, 7, 7, 2048) 0 add_158[0][0] \n",
796
+ "__________________________________________________________________________________________________\n",
797
+ "res5b_branch2a (Conv2D) (None, 7, 7, 512) 1049088 activation_484[0][0] \n",
798
+ "__________________________________________________________________________________________________\n",
799
+ "bn5b_branch2a (BatchNormalizati (None, 7, 7, 512) 2048 res5b_branch2a[0][0] \n",
800
+ "__________________________________________________________________________________________________\n",
801
+ "activation_485 (Activation) (None, 7, 7, 512) 0 bn5b_branch2a[0][0] \n",
802
+ "__________________________________________________________________________________________________\n",
803
+ "res5b_branch2b (Conv2D) (None, 7, 7, 512) 2359808 activation_485[0][0] \n",
804
+ "__________________________________________________________________________________________________\n",
805
+ "bn5b_branch2b (BatchNormalizati (None, 7, 7, 512) 2048 res5b_branch2b[0][0] \n",
806
+ "__________________________________________________________________________________________________\n",
807
+ "activation_486 (Activation) (None, 7, 7, 512) 0 bn5b_branch2b[0][0] \n",
808
+ "__________________________________________________________________________________________________\n",
809
+ "res5b_branch2c (Conv2D) (None, 7, 7, 2048) 1050624 activation_486[0][0] \n",
810
+ "__________________________________________________________________________________________________\n",
811
+ "bn5b_branch2c (BatchNormalizati (None, 7, 7, 2048) 8192 res5b_branch2c[0][0] \n"
812
+ ]
813
+ },
814
+ {
815
+ "name": "stdout",
816
+ "output_type": "stream",
817
+ "text": [
818
+ "__________________________________________________________________________________________________\n",
819
+ "add_159 (Add) (None, 7, 7, 2048) 0 bn5b_branch2c[0][0] \n",
820
+ " activation_484[0][0] \n",
821
+ "__________________________________________________________________________________________________\n",
822
+ "activation_487 (Activation) (None, 7, 7, 2048) 0 add_159[0][0] \n",
823
+ "__________________________________________________________________________________________________\n",
824
+ "res5c_branch2a (Conv2D) (None, 7, 7, 512) 1049088 activation_487[0][0] \n",
825
+ "__________________________________________________________________________________________________\n",
826
+ "bn5c_branch2a (BatchNormalizati (None, 7, 7, 512) 2048 res5c_branch2a[0][0] \n",
827
+ "__________________________________________________________________________________________________\n",
828
+ "activation_488 (Activation) (None, 7, 7, 512) 0 bn5c_branch2a[0][0] \n",
829
+ "__________________________________________________________________________________________________\n",
830
+ "res5c_branch2b (Conv2D) (None, 7, 7, 512) 2359808 activation_488[0][0] \n",
831
+ "__________________________________________________________________________________________________\n",
832
+ "bn5c_branch2b (BatchNormalizati (None, 7, 7, 512) 2048 res5c_branch2b[0][0] \n",
833
+ "__________________________________________________________________________________________________\n",
834
+ "activation_489 (Activation) (None, 7, 7, 512) 0 bn5c_branch2b[0][0] \n",
835
+ "__________________________________________________________________________________________________\n",
836
+ "res5c_branch2c (Conv2D) (None, 7, 7, 2048) 1050624 activation_489[0][0] \n",
837
+ "__________________________________________________________________________________________________\n",
838
+ "bn5c_branch2c (BatchNormalizati (None, 7, 7, 2048) 8192 res5c_branch2c[0][0] \n",
839
+ "__________________________________________________________________________________________________\n",
840
+ "add_160 (Add) (None, 7, 7, 2048) 0 bn5c_branch2c[0][0] \n",
841
+ " activation_487[0][0] \n",
842
+ "__________________________________________________________________________________________________\n",
843
+ "activation_490 (Activation) (None, 7, 7, 2048) 0 add_160[0][0] \n",
844
+ "__________________________________________________________________________________________________\n",
845
+ "global_average_pooling2d_8 (Glo (None, 2048) 0 activation_490[0][0] \n",
846
+ "__________________________________________________________________________________________________\n",
847
+ "dense_19 (Dense) (None, 256) 524544 global_average_pooling2d_8[0][0] \n",
848
+ "__________________________________________________________________________________________________\n",
849
+ "dropout_13 (Dropout) (None, 256) 0 dense_19[0][0] \n",
850
+ "__________________________________________________________________________________________________\n",
851
+ "dense_20 (Dense) (None, 128) 32896 dropout_13[0][0] \n",
852
+ "__________________________________________________________________________________________________\n",
853
+ "dropout_14 (Dropout) (None, 128) 0 dense_20[0][0] \n",
854
+ "__________________________________________________________________________________________________\n",
855
+ "dense_21 (Dense) (None, 64) 8256 dropout_14[0][0] \n",
856
+ "__________________________________________________________________________________________________\n",
857
+ "dropout_15 (Dropout) (None, 64) 0 dense_21[0][0] \n",
858
+ "__________________________________________________________________________________________________\n",
859
+ "dense_22 (Dense) (None, 2) 130 dropout_15[0][0] \n",
860
+ "==================================================================================================\n",
861
+ "Total params: 24,153,538\n",
862
+ "Trainable params: 565,826\n",
863
+ "Non-trainable params: 23,587,712\n",
864
+ "__________________________________________________________________________________________________\n"
865
+ ]
866
+ }
867
+ ],
868
+ "source": [
869
+ "model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\n",
870
+ "model.summary()"
871
+ ]
872
+ },
873
+ {
874
+ "cell_type": "code",
875
+ "execution_count": 73,
876
+ "metadata": {},
877
+ "outputs": [],
878
+ "source": [
879
+ "# adam = Adam(lr = 0.00003)\n",
880
+ "# model.compile(loss='categorical_crossentropy',optimizer = adam, metrics = ['accuracy'])"
881
+ ]
882
+ },
883
+ {
884
+ "cell_type": "code",
885
+ "execution_count": 74,
886
+ "metadata": {},
887
+ "outputs": [],
888
+ "source": [
889
+ "\n",
890
+ "data_generator = ImageDataGenerator(rescale = 1./255,\n",
891
+ " shear_range = 0.2,\n",
892
+ " zoom_range = 0.1,\n",
893
+ " rotation_range = 90,\n",
894
+ " brightness_range = [1.0,1.5],\n",
895
+ " horizontal_flip = True,\n",
896
+ " validation_split=0.2,\n",
897
+ " fill_mode=\"nearest\",\n",
898
+ " preprocessing_function=preprocess_input)\n",
899
+ "valAug = ImageDataGenerator(rescale = 1./255,preprocessing_function=preprocess_input)\n",
900
+ "\n",
901
+ " \n",
902
+ "\n",
903
+ " "
904
+ ]
905
+ },
906
+ {
907
+ "cell_type": "code",
908
+ "execution_count": 75,
909
+ "metadata": {},
910
+ "outputs": [
911
+ {
912
+ "name": "stdout",
913
+ "output_type": "stream",
914
+ "text": [
915
+ "Found 934 images belonging to 2 classes.\n",
916
+ "Found 350 images belonging to 2 classes.\n"
917
+ ]
918
+ }
919
+ ],
920
+ "source": [
921
+ "\n",
922
+ "\n",
923
+ "train_generator = data_generator.flow_from_directory(\n",
924
+ " './breast-histopathology-images/8867/', # this is the target directory\n",
925
+ " target_size=(224, 224), # all images will be resized to 300x300\n",
926
+ " batch_size=32,\n",
927
+ " seed = 42,\n",
928
+ " shuffle = True,\n",
929
+ " class_mode='categorical') # since we use binary_crossentropy loss, we need binary labels\n",
930
+ "\n",
931
+ "# this is a similar generator, for validation data\n",
932
+ "validation_generator = valAug.flow_from_directory(\n",
933
+ " './breast-histopathology-images/8914/',\n",
934
+ " target_size=(224, 224),\n",
935
+ " batch_size=32,\n",
936
+ " seed = 42,\n",
937
+ " shuffle = True,\n",
938
+ " class_mode='categorical')\n"
939
+ ]
940
+ },
941
+ {
942
+ "cell_type": "code",
943
+ "execution_count": 76,
944
+ "metadata": {},
945
+ "outputs": [],
946
+ "source": [
947
+ "# learn_control = ReduceLROnPlateau(monitor='val_acc', patience=5)\n",
948
+ "\n",
949
+ "# # Checkpoint\n",
950
+ "# filepath=\"bests.hdf5\"\n",
951
+ "# checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')\n",
952
+ "# from keras.callbacks import EarlyStopping, ModelCheckpoint\n",
953
+ "\n",
954
+ "# es_callback = EarlyStopping(monitor='val_acc', patience=5, mode='max')\n",
955
+ "# mc_callback = ModelCheckpoint(filepath='resbestweight.h5', monitor='val_acc', save_best_only=True, mode='max')\n",
956
+ "es_callback = keras.callbacks.EarlyStopping(monitor='val_loss', patience=3)\n"
957
+ ]
958
+ },
959
+ {
960
+ "cell_type": "code",
961
+ "execution_count": null,
962
+ "metadata": {},
963
+ "outputs": [
964
+ {
965
+ "name": "stdout",
966
+ "output_type": "stream",
967
+ "text": [
968
+ "Epoch 1/15\n"
969
+ ]
970
+ }
971
+ ],
972
+ "source": [
973
+ "# TRAINING\n",
974
+ "\n",
975
+ "hist = model.fit_generator(\n",
976
+ " train_generator,\n",
977
+ " steps_per_epoch= 50,\n",
978
+ " epochs=15,\n",
979
+ " validation_data=validation_generator,\n",
980
+ " validation_steps = 50,\n",
981
+ " verbose = 2,\n",
982
+ " callbacks=[es_callback]\n",
983
+ ")\n",
984
+ "\n"
985
+ ]
986
+ },
987
+ {
988
+ "cell_type": "code",
989
+ "execution_count": null,
990
+ "metadata": {},
991
+ "outputs": [],
992
+ "source": [
993
+ "import matplotlib.pyplot as plt\n",
994
+ "acc = hist.history['accuracy']\n",
995
+ "val_acc = hist.history['val_accuracy']\n",
996
+ "loss = hist.history['loss']\n",
997
+ "val_loss = hist.history['val_loss']"
998
+ ]
999
+ },
1000
+ {
1001
+ "cell_type": "code",
1002
+ "execution_count": null,
1003
+ "metadata": {},
1004
+ "outputs": [],
1005
+ "source": [
1006
+ "plt.plot(acc,label='accuracy')\n",
1007
+ "plt.plot(val_acc,label='val_acc')\n",
1008
+ "plt.legend()\n",
1009
+ "plt.show()\n"
1010
+ ]
1011
+ },
1012
+ {
1013
+ "cell_type": "code",
1014
+ "execution_count": null,
1015
+ "metadata": {},
1016
+ "outputs": [],
1017
+ "source": [
1018
+ "plt.plot(loss,label='loss')\n",
1019
+ "plt.plot(val_loss,label= 'val_loss')\n",
1020
+ "plt.legend()\n",
1021
+ "plt.show()"
1022
+ ]
1023
+ },
1024
+ {
1025
+ "cell_type": "code",
1026
+ "execution_count": null,
1027
+ "metadata": {},
1028
+ "outputs": [],
1029
+ "source": []
1030
+ },
1031
+ {
1032
+ "cell_type": "code",
1033
+ "execution_count": null,
1034
+ "metadata": {},
1035
+ "outputs": [],
1036
+ "source": []
1037
+ }
1038
+ ],
1039
+ "metadata": {
1040
+ "kernelspec": {
1041
+ "display_name": "Python 3",
1042
+ "language": "python",
1043
+ "name": "python3"
1044
+ },
1045
+ "language_info": {
1046
+ "codemirror_mode": {
1047
+ "name": "ipython",
1048
+ "version": 3
1049
+ },
1050
+ "file_extension": ".py",
1051
+ "mimetype": "text/x-python",
1052
+ "name": "python",
1053
+ "nbconvert_exporter": "python",
1054
+ "pygments_lexer": "ipython3",
1055
+ "version": "3.7.3"
1056
+ }
1057
+ },
1058
+ "nbformat": 4,
1059
+ "nbformat_minor": 2
1060
+ }
VGG 16.ipynb ADDED
@@ -0,0 +1,1219 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 1,
6
+ "metadata": {},
7
+ "outputs": [
8
+ {
9
+ "name": "stderr",
10
+ "output_type": "stream",
11
+ "text": [
12
+ "Using TensorFlow backend.\n",
13
+ "C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow\\python\\framework\\dtypes.py:516: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
14
+ " _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n",
15
+ "C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow\\python\\framework\\dtypes.py:517: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
16
+ " _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n",
17
+ "C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow\\python\\framework\\dtypes.py:518: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
18
+ " _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n",
19
+ "C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow\\python\\framework\\dtypes.py:519: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
20
+ " _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n",
21
+ "C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow\\python\\framework\\dtypes.py:520: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
22
+ " _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n",
23
+ "C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow\\python\\framework\\dtypes.py:525: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
24
+ " np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n",
25
+ "C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorboard\\compat\\tensorflow_stub\\dtypes.py:541: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
26
+ " _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n",
27
+ "C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorboard\\compat\\tensorflow_stub\\dtypes.py:542: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
28
+ " _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n",
29
+ "C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorboard\\compat\\tensorflow_stub\\dtypes.py:543: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
30
+ " _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n",
31
+ "C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorboard\\compat\\tensorflow_stub\\dtypes.py:544: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
32
+ " _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n",
33
+ "C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorboard\\compat\\tensorflow_stub\\dtypes.py:545: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
34
+ " _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n",
35
+ "C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorboard\\compat\\tensorflow_stub\\dtypes.py:550: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
36
+ " np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n"
37
+ ]
38
+ }
39
+ ],
40
+ "source": [
41
+ "import numpy as np\n",
42
+ "from keras.preprocessing.image import ImageDataGenerator\n",
43
+ "from keras.models import Sequential\n",
44
+ "from keras.layers import Dropout, Flatten, Dense\n",
45
+ "from keras import applications"
46
+ ]
47
+ },
48
+ {
49
+ "cell_type": "code",
50
+ "execution_count": 2,
51
+ "metadata": {},
52
+ "outputs": [],
53
+ "source": [
54
+ "img_width, img_height = 50, 50\n",
55
+ "\n",
56
+ "top_model_weights_path = 'bottleneck_fc_model.h5'\n",
57
+ "train_data_dir = './breast-histopathology-images/8867/'\n",
58
+ "validation_data_dir = './breast-histopathology-images/8914/',\n",
59
+ "nb_train_samples = 1422\n",
60
+ "nb_validation_samples = 800\n",
61
+ "epochs = 10\n",
62
+ "batch_size = 16"
63
+ ]
64
+ },
65
+ {
66
+ "cell_type": "code",
67
+ "execution_count": 3,
68
+ "metadata": {},
69
+ "outputs": [
70
+ {
71
+ "name": "stdout",
72
+ "output_type": "stream",
73
+ "text": [
74
+ "WARNING:tensorflow:From C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\keras\\backend\\tensorflow_backend.py:4070: The name tf.nn.max_pool is deprecated. Please use tf.nn.max_pool2d instead.\n",
75
+ "\n",
76
+ "Found 1422 images belonging to 2 classes.\n",
77
+ "WARNING:tensorflow:From C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\keras\\backend\\tensorflow_backend.py:422: The name tf.global_variables is deprecated. Please use tf.compat.v1.global_variables instead.\n",
78
+ "\n",
79
+ "Found 800 images belonging to 2 classes.\n"
80
+ ]
81
+ }
82
+ ],
83
+ "source": [
84
+ "datagen = ImageDataGenerator(rescale=1. / 255)\n",
85
+ "\n",
86
+ " # build the VGG16 network\n",
87
+ "model = applications.VGG16(include_top=False, weights='imagenet')\n",
88
+ "\n",
89
+ "generator = datagen.flow_from_directory(\n",
90
+ " './breast-histopathology-images/8867/',\n",
91
+ " target_size=(img_width, img_height),\n",
92
+ " batch_size=batch_size,\n",
93
+ " class_mode=None,\n",
94
+ " shuffle=False)\n",
95
+ "bottleneck_features_train = model.predict_generator(\n",
96
+ " generator, nb_train_samples / batch_size)\n",
97
+ "np.save(open('bottleneck_features_trains.npy', 'wb'),\n",
98
+ " bottleneck_features_train)\n",
99
+ "\n",
100
+ "generator = datagen.flow_from_directory(\n",
101
+ " './breast-histopathology-images/8914/',\n",
102
+ " target_size=(img_width, img_height),\n",
103
+ " batch_size=batch_size,\n",
104
+ " class_mode=None,\n",
105
+ " shuffle=False)\n",
106
+ "bottleneck_features_validation = model.predict_generator(\n",
107
+ " generator, nb_validation_samples / batch_size)\n",
108
+ "np.save(open('bottleneck_features_validations.npy', 'wb'),\n",
109
+ " bottleneck_features_validation)\n",
110
+ "\n"
111
+ ]
112
+ },
113
+ {
114
+ "cell_type": "code",
115
+ "execution_count": 4,
116
+ "metadata": {},
117
+ "outputs": [
118
+ {
119
+ "name": "stdout",
120
+ "output_type": "stream",
121
+ "text": [
122
+ "WARNING:tensorflow:From C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow\\python\\ops\\nn_impl.py:180: add_dispatch_support.<locals>.wrapper (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n",
123
+ "Instructions for updating:\n",
124
+ "Use tf.where in 2.0, which has the same broadcast rule as np.where\n",
125
+ "Train on 1422 samples, validate on 800 samples\n",
126
+ "Epoch 1/10\n",
127
+ "1422/1422 [==============================] - 2s 1ms/step - loss: 0.6112 - accuracy: 0.6765 - val_loss: 0.6054 - val_accuracy: 0.6438\n",
128
+ "Epoch 2/10\n",
129
+ "1422/1422 [==============================] - 1s 539us/step - loss: 0.5067 - accuracy: 0.7475 - val_loss: 0.5923 - val_accuracy: 0.6675\n",
130
+ "Epoch 3/10\n",
131
+ "1422/1422 [==============================] - 1s 615us/step - loss: 0.4823 - accuracy: 0.7743 - val_loss: 0.6882 - val_accuracy: 0.6662\n",
132
+ "Epoch 4/10\n",
133
+ "1422/1422 [==============================] - 1s 604us/step - loss: 0.4645 - accuracy: 0.7771 - val_loss: 0.6441 - val_accuracy: 0.6862\n",
134
+ "Epoch 5/10\n",
135
+ "1422/1422 [==============================] - 1s 521us/step - loss: 0.4567 - accuracy: 0.7813 - val_loss: 0.6563 - val_accuracy: 0.6787\n",
136
+ "Epoch 6/10\n",
137
+ "1422/1422 [==============================] - 1s 573us/step - loss: 0.4429 - accuracy: 0.7925 - val_loss: 0.6073 - val_accuracy: 0.6975\n",
138
+ "Epoch 7/10\n",
139
+ "1422/1422 [==============================] - 1s 645us/step - loss: 0.4331 - accuracy: 0.7975 - val_loss: 0.6667 - val_accuracy: 0.6963\n",
140
+ "Epoch 8/10\n",
141
+ "1422/1422 [==============================] - 1s 641us/step - loss: 0.4287 - accuracy: 0.8031 - val_loss: 0.6444 - val_accuracy: 0.7050\n",
142
+ "Epoch 9/10\n",
143
+ "1422/1422 [==============================] - 1s 445us/step - loss: 0.4130 - accuracy: 0.8024 - val_loss: 0.6698 - val_accuracy: 0.6900\n",
144
+ "Epoch 10/10\n",
145
+ "1422/1422 [==============================] - 0s 279us/step - loss: 0.4027 - accuracy: 0.8059 - val_loss: 0.6730 - val_accuracy: 0.7025\n"
146
+ ]
147
+ }
148
+ ],
149
+ "source": [
150
+ "train_data = np.load(open('bottleneck_features_trains.npy','rb'))\n",
151
+ "train_labels = np.array(\n",
152
+ " [0] * int(nb_train_samples / 2) + [1] * int(nb_train_samples / 2))\n",
153
+ "\n",
154
+ "validation_data = np.load(open('bottleneck_features_validations.npy','rb'))\n",
155
+ "validation_labels = np.array(\n",
156
+ " [0] * int(nb_validation_samples / 2) + [1] * int(nb_validation_samples / 2))\n",
157
+ "\n",
158
+ "model = Sequential()\n",
159
+ "model.add(Flatten(input_shape=train_data.shape[1:]))\n",
160
+ "model.add(Dense(256, activation='relu'))\n",
161
+ "model.add(Dropout(0.5))\n",
162
+ "model.add(Dense(1, activation='sigmoid'))\n",
163
+ "\n",
164
+ "model.compile(optimizer='rmsprop',\n",
165
+ " loss='binary_crossentropy', metrics=['accuracy'])\n",
166
+ "\n",
167
+ "hist = model.fit(train_data, train_labels,\n",
168
+ " epochs=10,\n",
169
+ " batch_size=batch_size,\n",
170
+ " validation_data=(validation_data, validation_labels))\n",
171
+ "# model.save_weights(top_model_weights_path)\n"
172
+ ]
173
+ },
174
+ {
175
+ "cell_type": "code",
176
+ "execution_count": 5,
177
+ "metadata": {},
178
+ "outputs": [],
179
+ "source": [
180
+ "import matplotlib.pyplot as plt\n",
181
+ "acc = hist.history['accuracy']\n",
182
+ "val_acc = hist.history['val_accuracy']\n",
183
+ "loss = hist.history['loss']\n",
184
+ "val_loss = hist.history['val_loss']"
185
+ ]
186
+ },
187
+ {
188
+ "cell_type": "code",
189
+ "execution_count": 6,
190
+ "metadata": {
191
+ "scrolled": true
192
+ },
193
+ "outputs": [
194
+ {
195
+ "data": {
196
+ "image/png": "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\n",
197
+ "text/plain": [
198
+ "<Figure size 432x288 with 1 Axes>"
199
+ ]
200
+ },
201
+ "metadata": {
202
+ "needs_background": "light"
203
+ },
204
+ "output_type": "display_data"
205
+ }
206
+ ],
207
+ "source": [
208
+ "plt.plot(acc,label='accuracy')\n",
209
+ "plt.plot(val_acc,label='val_acc')\n",
210
+ "plt.legend()\n",
211
+ "plt.show()"
212
+ ]
213
+ },
214
+ {
215
+ "cell_type": "code",
216
+ "execution_count": 7,
217
+ "metadata": {},
218
+ "outputs": [
219
+ {
220
+ "data": {
221
+ "image/png": "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\n",
222
+ "text/plain": [
223
+ "<Figure size 432x288 with 1 Axes>"
224
+ ]
225
+ },
226
+ "metadata": {
227
+ "needs_background": "light"
228
+ },
229
+ "output_type": "display_data"
230
+ }
231
+ ],
232
+ "source": [
233
+ "plt.plot(loss,label='loss')\n",
234
+ "plt.plot(val_loss,label= 'val_loss')\n",
235
+ "plt.legend()\n",
236
+ "plt.show()"
237
+ ]
238
+ },
239
+ {
240
+ "cell_type": "code",
241
+ "execution_count": 8,
242
+ "metadata": {},
243
+ "outputs": [
244
+ {
245
+ "name": "stdout",
246
+ "output_type": "stream",
247
+ "text": [
248
+ "[[0.]\n",
249
+ " [0.]\n",
250
+ " [0.]\n",
251
+ " [0.]\n",
252
+ " [0.]\n",
253
+ " [0.]\n",
254
+ " [0.]\n",
255
+ " [0.]\n",
256
+ " [0.]\n",
257
+ " [0.]\n",
258
+ " [0.]\n",
259
+ " [0.]\n",
260
+ " [0.]\n",
261
+ " [0.]\n",
262
+ " [0.]\n",
263
+ " [1.]\n",
264
+ " [0.]\n",
265
+ " [0.]\n",
266
+ " [0.]\n",
267
+ " [1.]\n",
268
+ " [0.]\n",
269
+ " [0.]\n",
270
+ " [0.]\n",
271
+ " [0.]\n",
272
+ " [1.]\n",
273
+ " [1.]\n",
274
+ " [0.]\n",
275
+ " [0.]\n",
276
+ " [0.]\n",
277
+ " [0.]\n",
278
+ " [0.]\n",
279
+ " [0.]\n",
280
+ " [0.]\n",
281
+ " [1.]\n",
282
+ " [0.]\n",
283
+ " [0.]\n",
284
+ " [0.]\n",
285
+ " [0.]\n",
286
+ " [0.]\n",
287
+ " [0.]\n",
288
+ " [0.]\n",
289
+ " [1.]\n",
290
+ " [0.]\n",
291
+ " [0.]\n",
292
+ " [0.]\n",
293
+ " [0.]\n",
294
+ " [1.]\n",
295
+ " [0.]\n",
296
+ " [0.]\n",
297
+ " [0.]\n",
298
+ " [1.]\n",
299
+ " [0.]\n",
300
+ " [0.]\n",
301
+ " [0.]\n",
302
+ " [0.]\n",
303
+ " [0.]\n",
304
+ " [0.]\n",
305
+ " [1.]\n",
306
+ " [1.]\n",
307
+ " [0.]\n",
308
+ " [0.]\n",
309
+ " [1.]\n",
310
+ " [1.]\n",
311
+ " [0.]\n",
312
+ " [0.]\n",
313
+ " [1.]\n",
314
+ " [0.]\n",
315
+ " [0.]\n",
316
+ " [1.]\n",
317
+ " [0.]\n",
318
+ " [0.]\n",
319
+ " [0.]\n",
320
+ " [0.]\n",
321
+ " [0.]\n",
322
+ " [0.]\n",
323
+ " [1.]\n",
324
+ " [0.]\n",
325
+ " [1.]\n",
326
+ " [0.]\n",
327
+ " [0.]\n",
328
+ " [0.]\n",
329
+ " [0.]\n",
330
+ " [1.]\n",
331
+ " [0.]\n",
332
+ " [0.]\n",
333
+ " [0.]\n",
334
+ " [0.]\n",
335
+ " [0.]\n",
336
+ " [1.]\n",
337
+ " [0.]\n",
338
+ " [0.]\n",
339
+ " [0.]\n",
340
+ " [0.]\n",
341
+ " [0.]\n",
342
+ " [0.]\n",
343
+ " [0.]\n",
344
+ " [0.]\n",
345
+ " [0.]\n",
346
+ " [0.]\n",
347
+ " [1.]\n",
348
+ " [1.]\n",
349
+ " [1.]\n",
350
+ " [1.]\n",
351
+ " [0.]\n",
352
+ " [1.]\n",
353
+ " [1.]\n",
354
+ " [0.]\n",
355
+ " [1.]\n",
356
+ " [0.]\n",
357
+ " [0.]\n",
358
+ " [1.]\n",
359
+ " [0.]\n",
360
+ " [0.]\n",
361
+ " [0.]\n",
362
+ " [0.]\n",
363
+ " [0.]\n",
364
+ " [0.]\n",
365
+ " [0.]\n",
366
+ " [1.]\n",
367
+ " [0.]\n",
368
+ " [1.]\n",
369
+ " [0.]\n",
370
+ " [0.]\n",
371
+ " [0.]\n",
372
+ " [0.]\n",
373
+ " [0.]\n",
374
+ " [0.]\n",
375
+ " [0.]\n",
376
+ " [0.]\n",
377
+ " [1.]\n",
378
+ " [0.]\n",
379
+ " [0.]\n",
380
+ " [0.]\n",
381
+ " [0.]\n",
382
+ " [0.]\n",
383
+ " [0.]\n",
384
+ " [0.]\n",
385
+ " [0.]\n",
386
+ " [0.]\n",
387
+ " [0.]\n",
388
+ " [0.]\n",
389
+ " [0.]\n",
390
+ " [1.]\n",
391
+ " [0.]\n",
392
+ " [1.]\n",
393
+ " [0.]\n",
394
+ " [0.]\n",
395
+ " [0.]\n",
396
+ " [1.]\n",
397
+ " [0.]\n",
398
+ " [0.]\n",
399
+ " [0.]\n",
400
+ " [0.]\n",
401
+ " [1.]\n",
402
+ " [1.]\n",
403
+ " [1.]\n",
404
+ " [0.]\n",
405
+ " [0.]\n",
406
+ " [0.]\n",
407
+ " [0.]\n",
408
+ " [0.]\n",
409
+ " [1.]\n",
410
+ " [1.]\n",
411
+ " [1.]\n",
412
+ " [0.]\n",
413
+ " [0.]\n",
414
+ " [1.]\n",
415
+ " [0.]\n",
416
+ " [0.]\n",
417
+ " [1.]\n",
418
+ " [0.]\n",
419
+ " [0.]\n",
420
+ " [0.]\n",
421
+ " [0.]\n",
422
+ " [0.]\n",
423
+ " [0.]\n",
424
+ " [0.]\n",
425
+ " [0.]\n",
426
+ " [0.]\n",
427
+ " [0.]\n",
428
+ " [0.]\n",
429
+ " [0.]\n",
430
+ " [0.]\n",
431
+ " [0.]\n",
432
+ " [0.]\n",
433
+ " [0.]\n",
434
+ " [0.]\n",
435
+ " [0.]\n",
436
+ " [0.]\n",
437
+ " [0.]\n",
438
+ " [0.]\n",
439
+ " [0.]\n",
440
+ " [0.]\n",
441
+ " [0.]\n",
442
+ " [0.]\n",
443
+ " [0.]\n",
444
+ " [0.]\n",
445
+ " [1.]\n",
446
+ " [0.]\n",
447
+ " [0.]\n",
448
+ " [0.]\n",
449
+ " [0.]\n",
450
+ " [1.]\n",
451
+ " [0.]\n",
452
+ " [0.]\n",
453
+ " [1.]\n",
454
+ " [0.]\n",
455
+ " [1.]\n",
456
+ " [1.]\n",
457
+ " [0.]\n",
458
+ " [0.]\n",
459
+ " [0.]\n",
460
+ " [0.]\n",
461
+ " [0.]\n",
462
+ " [0.]\n",
463
+ " [0.]\n",
464
+ " [0.]\n",
465
+ " [0.]\n",
466
+ " [0.]\n",
467
+ " [0.]\n",
468
+ " [0.]\n",
469
+ " [0.]\n",
470
+ " [0.]\n",
471
+ " [0.]\n",
472
+ " [0.]\n",
473
+ " [0.]\n",
474
+ " [1.]\n",
475
+ " [0.]\n",
476
+ " [0.]\n",
477
+ " [1.]\n",
478
+ " [1.]\n",
479
+ " [0.]\n",
480
+ " [0.]\n",
481
+ " [0.]\n",
482
+ " [0.]\n",
483
+ " [0.]\n",
484
+ " [1.]\n",
485
+ " [0.]\n",
486
+ " [1.]\n",
487
+ " [0.]\n",
488
+ " [0.]\n",
489
+ " [0.]\n",
490
+ " [0.]\n",
491
+ " [1.]\n",
492
+ " [1.]\n",
493
+ " [1.]\n",
494
+ " [1.]\n",
495
+ " [1.]\n",
496
+ " [1.]\n",
497
+ " [1.]\n",
498
+ " [0.]\n",
499
+ " [0.]\n",
500
+ " [0.]\n",
501
+ " [0.]\n",
502
+ " [0.]\n",
503
+ " [0.]\n",
504
+ " [0.]\n",
505
+ " [1.]\n",
506
+ " [0.]\n",
507
+ " [0.]\n",
508
+ " [0.]\n",
509
+ " [0.]\n",
510
+ " [1.]\n",
511
+ " [0.]\n",
512
+ " [0.]\n",
513
+ " [0.]\n",
514
+ " [0.]\n",
515
+ " [0.]\n",
516
+ " [0.]\n",
517
+ " [0.]\n",
518
+ " [0.]\n",
519
+ " [0.]\n",
520
+ " [0.]\n",
521
+ " [0.]\n",
522
+ " [0.]\n",
523
+ " [1.]\n",
524
+ " [0.]\n",
525
+ " [0.]\n",
526
+ " [0.]\n",
527
+ " [0.]\n",
528
+ " [0.]\n",
529
+ " [0.]\n",
530
+ " [0.]\n",
531
+ " [0.]\n",
532
+ " [0.]\n",
533
+ " [0.]\n",
534
+ " [0.]\n",
535
+ " [0.]\n",
536
+ " [0.]\n",
537
+ " [0.]\n",
538
+ " [0.]\n",
539
+ " [0.]\n",
540
+ " [0.]\n",
541
+ " [0.]\n",
542
+ " [0.]\n",
543
+ " [0.]\n",
544
+ " [0.]\n",
545
+ " [0.]\n",
546
+ " [0.]\n",
547
+ " [0.]\n",
548
+ " [0.]\n",
549
+ " [0.]\n",
550
+ " [0.]\n",
551
+ " [0.]\n",
552
+ " [0.]\n",
553
+ " [0.]\n",
554
+ " [0.]\n",
555
+ " [0.]\n",
556
+ " [0.]\n",
557
+ " [0.]\n",
558
+ " [0.]\n",
559
+ " [0.]\n",
560
+ " [0.]\n",
561
+ " [0.]\n",
562
+ " [0.]\n",
563
+ " [0.]\n",
564
+ " [0.]\n",
565
+ " [0.]\n",
566
+ " [1.]\n",
567
+ " [0.]\n",
568
+ " [1.]\n",
569
+ " [0.]\n",
570
+ " [0.]\n",
571
+ " [0.]\n",
572
+ " [0.]\n",
573
+ " [0.]\n",
574
+ " [0.]\n",
575
+ " [0.]\n",
576
+ " [0.]\n",
577
+ " [0.]\n",
578
+ " [0.]\n",
579
+ " [0.]\n",
580
+ " [0.]\n",
581
+ " [0.]\n",
582
+ " [1.]\n",
583
+ " [0.]\n",
584
+ " [1.]\n",
585
+ " [0.]\n",
586
+ " [0.]\n",
587
+ " [0.]\n",
588
+ " [0.]\n",
589
+ " [0.]\n",
590
+ " [0.]\n",
591
+ " [0.]\n",
592
+ " [0.]\n",
593
+ " [0.]\n",
594
+ " [0.]\n",
595
+ " [0.]\n",
596
+ " [0.]\n",
597
+ " [1.]\n",
598
+ " [0.]\n",
599
+ " [0.]\n",
600
+ " [0.]\n",
601
+ " [0.]\n",
602
+ " [0.]\n",
603
+ " [0.]\n",
604
+ " [0.]\n",
605
+ " [0.]\n",
606
+ " [0.]\n",
607
+ " [0.]\n",
608
+ " [0.]\n",
609
+ " [0.]\n",
610
+ " [0.]\n",
611
+ " [1.]\n",
612
+ " [0.]\n",
613
+ " [0.]\n",
614
+ " [0.]\n",
615
+ " [0.]\n",
616
+ " [0.]\n",
617
+ " [0.]\n",
618
+ " [0.]\n",
619
+ " [0.]\n",
620
+ " [1.]\n",
621
+ " [0.]\n",
622
+ " [0.]\n",
623
+ " [0.]\n",
624
+ " [0.]\n",
625
+ " [0.]\n",
626
+ " [0.]\n",
627
+ " [0.]\n",
628
+ " [0.]\n",
629
+ " [0.]\n",
630
+ " [0.]\n",
631
+ " [0.]\n",
632
+ " [0.]\n",
633
+ " [0.]\n",
634
+ " [0.]\n",
635
+ " [0.]\n",
636
+ " [0.]\n",
637
+ " [0.]\n",
638
+ " [0.]\n",
639
+ " [0.]\n",
640
+ " [0.]\n",
641
+ " [0.]\n",
642
+ " [0.]\n",
643
+ " [0.]\n",
644
+ " [0.]\n",
645
+ " [0.]\n",
646
+ " [0.]\n",
647
+ " [0.]\n",
648
+ " [0.]\n",
649
+ " [0.]\n",
650
+ " [0.]\n",
651
+ " [1.]\n",
652
+ " [0.]\n",
653
+ " [0.]\n",
654
+ " [0.]\n",
655
+ " [0.]\n",
656
+ " [0.]\n",
657
+ " [0.]\n",
658
+ " [0.]\n",
659
+ " [0.]\n",
660
+ " [0.]\n",
661
+ " [0.]\n",
662
+ " [0.]\n",
663
+ " [0.]\n",
664
+ " [0.]\n",
665
+ " [0.]\n",
666
+ " [0.]\n",
667
+ " [0.]\n",
668
+ " [0.]\n",
669
+ " [0.]\n",
670
+ " [0.]\n",
671
+ " [0.]\n",
672
+ " [0.]\n",
673
+ " [0.]\n",
674
+ " [0.]\n",
675
+ " [0.]\n",
676
+ " [0.]\n",
677
+ " [0.]\n",
678
+ " [0.]\n",
679
+ " [0.]\n",
680
+ " [0.]\n",
681
+ " [0.]\n",
682
+ " [0.]\n",
683
+ " [0.]\n",
684
+ " [0.]\n",
685
+ " [0.]\n",
686
+ " [0.]\n",
687
+ " [0.]\n",
688
+ " [0.]\n",
689
+ " [0.]\n",
690
+ " [0.]\n",
691
+ " [0.]\n",
692
+ " [0.]\n",
693
+ " [0.]\n",
694
+ " [1.]\n",
695
+ " [0.]\n",
696
+ " [0.]\n",
697
+ " [0.]\n",
698
+ " [0.]\n",
699
+ " [1.]\n",
700
+ " [0.]\n",
701
+ " [0.]\n",
702
+ " [0.]\n",
703
+ " [0.]\n",
704
+ " [0.]\n",
705
+ " [0.]\n",
706
+ " [0.]\n",
707
+ " [0.]\n",
708
+ " [0.]\n",
709
+ " [0.]\n",
710
+ " [0.]\n",
711
+ " [1.]\n",
712
+ " [0.]\n",
713
+ " [0.]\n",
714
+ " [0.]\n",
715
+ " [0.]\n",
716
+ " [0.]\n",
717
+ " [0.]\n",
718
+ " [1.]\n",
719
+ " [0.]\n",
720
+ " [1.]\n",
721
+ " [0.]\n",
722
+ " [1.]\n",
723
+ " [0.]\n",
724
+ " [0.]\n",
725
+ " [0.]\n",
726
+ " [0.]\n",
727
+ " [0.]\n",
728
+ " [0.]\n",
729
+ " [0.]\n",
730
+ " [0.]\n",
731
+ " [0.]\n",
732
+ " [0.]\n",
733
+ " [0.]\n",
734
+ " [0.]\n",
735
+ " [0.]\n",
736
+ " [0.]\n",
737
+ " [1.]\n",
738
+ " [0.]\n",
739
+ " [0.]\n",
740
+ " [0.]\n",
741
+ " [0.]\n",
742
+ " [0.]\n",
743
+ " [0.]\n",
744
+ " [0.]\n",
745
+ " [0.]\n",
746
+ " [0.]\n",
747
+ " [0.]\n",
748
+ " [1.]\n",
749
+ " [0.]\n",
750
+ " [0.]\n",
751
+ " [1.]\n",
752
+ " [1.]\n",
753
+ " [1.]\n",
754
+ " [1.]\n",
755
+ " [1.]\n",
756
+ " [1.]\n",
757
+ " [0.]\n",
758
+ " [1.]\n",
759
+ " [1.]\n",
760
+ " [1.]\n",
761
+ " [1.]\n",
762
+ " [1.]\n",
763
+ " [1.]\n",
764
+ " [1.]\n",
765
+ " [0.]\n",
766
+ " [0.]\n",
767
+ " [0.]\n",
768
+ " [1.]\n",
769
+ " [1.]\n",
770
+ " [0.]\n",
771
+ " [1.]\n",
772
+ " [1.]\n",
773
+ " [0.]\n",
774
+ " [0.]\n",
775
+ " [0.]\n",
776
+ " [0.]\n",
777
+ " [0.]\n",
778
+ " [1.]\n",
779
+ " [1.]\n",
780
+ " [1.]\n",
781
+ " [1.]\n",
782
+ " [1.]\n",
783
+ " [1.]\n",
784
+ " [1.]\n",
785
+ " [0.]\n",
786
+ " [1.]\n",
787
+ " [0.]\n",
788
+ " [1.]\n",
789
+ " [1.]\n",
790
+ " [0.]\n",
791
+ " [0.]\n",
792
+ " [1.]\n",
793
+ " [1.]\n",
794
+ " [0.]\n",
795
+ " [1.]\n",
796
+ " [1.]\n",
797
+ " [1.]\n",
798
+ " [0.]\n",
799
+ " [1.]\n",
800
+ " [1.]\n",
801
+ " [1.]\n",
802
+ " [1.]\n",
803
+ " [0.]\n",
804
+ " [0.]\n",
805
+ " [0.]\n",
806
+ " [1.]\n",
807
+ " [0.]\n",
808
+ " [0.]\n",
809
+ " [0.]\n",
810
+ " [1.]\n",
811
+ " [1.]\n",
812
+ " [1.]\n",
813
+ " [0.]\n",
814
+ " [1.]\n",
815
+ " [0.]\n",
816
+ " [0.]\n",
817
+ " [1.]\n",
818
+ " [1.]\n",
819
+ " [1.]\n",
820
+ " [1.]\n",
821
+ " [0.]\n",
822
+ " [1.]\n",
823
+ " [1.]\n",
824
+ " [1.]\n",
825
+ " [1.]\n",
826
+ " [1.]\n",
827
+ " [0.]\n",
828
+ " [1.]\n",
829
+ " [1.]\n",
830
+ " [1.]\n",
831
+ " [1.]\n",
832
+ " [1.]\n",
833
+ " [1.]\n",
834
+ " [1.]\n",
835
+ " [0.]\n",
836
+ " [1.]\n",
837
+ " [1.]\n",
838
+ " [1.]\n",
839
+ " [1.]\n",
840
+ " [1.]\n",
841
+ " [1.]\n",
842
+ " [0.]\n",
843
+ " [1.]\n",
844
+ " [1.]\n",
845
+ " [1.]\n",
846
+ " [1.]\n",
847
+ " [1.]\n",
848
+ " [0.]\n",
849
+ " [1.]\n",
850
+ " [1.]\n",
851
+ " [0.]\n",
852
+ " [1.]\n",
853
+ " [1.]\n",
854
+ " [1.]\n",
855
+ " [1.]\n",
856
+ " [1.]\n",
857
+ " [0.]\n",
858
+ " [0.]\n",
859
+ " [0.]\n",
860
+ " [1.]\n",
861
+ " [1.]\n",
862
+ " [1.]\n",
863
+ " [1.]\n",
864
+ " [1.]\n",
865
+ " [1.]\n",
866
+ " [0.]\n",
867
+ " [1.]\n",
868
+ " [0.]\n",
869
+ " [0.]\n",
870
+ " [0.]\n",
871
+ " [1.]\n",
872
+ " [1.]\n",
873
+ " [1.]\n",
874
+ " [1.]\n",
875
+ " [1.]\n",
876
+ " [0.]\n",
877
+ " [0.]\n",
878
+ " [1.]\n",
879
+ " [1.]\n",
880
+ " [0.]\n",
881
+ " [1.]\n",
882
+ " [1.]\n",
883
+ " [1.]\n",
884
+ " [1.]\n",
885
+ " [1.]\n",
886
+ " [1.]\n",
887
+ " [0.]\n",
888
+ " [1.]\n",
889
+ " [1.]\n",
890
+ " [0.]\n",
891
+ " [1.]\n",
892
+ " [1.]\n",
893
+ " [0.]\n",
894
+ " [0.]\n",
895
+ " [1.]\n",
896
+ " [0.]\n",
897
+ " [0.]\n",
898
+ " [1.]\n",
899
+ " [0.]\n",
900
+ " [1.]\n",
901
+ " [1.]\n",
902
+ " [0.]\n",
903
+ " [0.]\n",
904
+ " [0.]\n",
905
+ " [0.]\n",
906
+ " [0.]\n",
907
+ " [1.]\n",
908
+ " [1.]\n",
909
+ " [1.]\n",
910
+ " [0.]\n",
911
+ " [0.]\n",
912
+ " [0.]\n",
913
+ " [0.]\n",
914
+ " [0.]\n",
915
+ " [0.]\n",
916
+ " [1.]\n",
917
+ " [1.]\n",
918
+ " [1.]\n",
919
+ " [1.]\n",
920
+ " [1.]\n",
921
+ " [1.]\n",
922
+ " [0.]\n",
923
+ " [1.]\n",
924
+ " [0.]\n",
925
+ " [0.]\n",
926
+ " [1.]\n",
927
+ " [1.]\n",
928
+ " [1.]\n",
929
+ " [0.]\n",
930
+ " [0.]\n",
931
+ " [1.]\n",
932
+ " [1.]\n",
933
+ " [1.]\n",
934
+ " [1.]\n",
935
+ " [0.]\n",
936
+ " [0.]\n",
937
+ " [0.]\n",
938
+ " [1.]\n",
939
+ " [1.]\n",
940
+ " [0.]\n",
941
+ " [1.]\n",
942
+ " [1.]\n",
943
+ " [1.]\n",
944
+ " [1.]\n",
945
+ " [1.]\n",
946
+ " [1.]\n",
947
+ " [1.]\n",
948
+ " [0.]\n",
949
+ " [1.]\n",
950
+ " [0.]\n",
951
+ " [0.]\n",
952
+ " [1.]\n",
953
+ " [1.]\n",
954
+ " [1.]\n",
955
+ " [0.]\n",
956
+ " [1.]\n",
957
+ " [1.]\n",
958
+ " [1.]\n",
959
+ " [1.]\n",
960
+ " [1.]\n",
961
+ " [1.]\n",
962
+ " [1.]\n",
963
+ " [1.]\n",
964
+ " [1.]\n",
965
+ " [1.]\n",
966
+ " [1.]\n",
967
+ " [1.]\n",
968
+ " [0.]\n",
969
+ " [0.]\n",
970
+ " [0.]\n",
971
+ " [1.]\n",
972
+ " [1.]\n",
973
+ " [0.]\n",
974
+ " [1.]\n",
975
+ " [0.]\n",
976
+ " [1.]\n",
977
+ " [1.]\n",
978
+ " [1.]\n",
979
+ " [1.]\n",
980
+ " [1.]\n",
981
+ " [1.]\n",
982
+ " [1.]\n",
983
+ " [1.]\n",
984
+ " [1.]\n",
985
+ " [1.]\n",
986
+ " [1.]\n",
987
+ " [1.]\n",
988
+ " [1.]\n",
989
+ " [1.]\n",
990
+ " [1.]\n",
991
+ " [1.]\n",
992
+ " [1.]\n",
993
+ " [1.]\n",
994
+ " [1.]\n",
995
+ " [1.]\n",
996
+ " [1.]\n",
997
+ " [1.]\n",
998
+ " [1.]\n",
999
+ " [1.]\n",
1000
+ " [1.]\n",
1001
+ " [1.]\n",
1002
+ " [1.]\n",
1003
+ " [1.]\n",
1004
+ " [1.]\n",
1005
+ " [1.]\n",
1006
+ " [1.]\n",
1007
+ " [1.]\n",
1008
+ " [1.]\n",
1009
+ " [1.]\n",
1010
+ " [1.]\n",
1011
+ " [1.]\n",
1012
+ " [1.]\n",
1013
+ " [1.]\n",
1014
+ " [1.]\n",
1015
+ " [1.]\n",
1016
+ " [1.]\n",
1017
+ " [1.]\n",
1018
+ " [1.]\n",
1019
+ " [1.]\n",
1020
+ " [1.]\n",
1021
+ " [1.]\n",
1022
+ " [1.]\n",
1023
+ " [1.]\n",
1024
+ " [1.]\n",
1025
+ " [1.]\n",
1026
+ " [1.]\n",
1027
+ " [1.]\n",
1028
+ " [1.]\n",
1029
+ " [1.]\n",
1030
+ " [1.]\n",
1031
+ " [1.]\n",
1032
+ " [1.]\n",
1033
+ " [1.]\n",
1034
+ " [1.]\n",
1035
+ " [1.]\n",
1036
+ " [1.]\n",
1037
+ " [1.]\n",
1038
+ " [1.]\n",
1039
+ " [1.]\n",
1040
+ " [1.]\n",
1041
+ " [1.]\n",
1042
+ " [1.]\n",
1043
+ " [1.]\n",
1044
+ " [1.]\n",
1045
+ " [1.]\n",
1046
+ " [1.]\n",
1047
+ " [1.]]\n"
1048
+ ]
1049
+ }
1050
+ ],
1051
+ "source": [
1052
+ "preds = np.round(model.predict(validation_data),0)\n",
1053
+ "print(preds)"
1054
+ ]
1055
+ },
1056
+ {
1057
+ "cell_type": "code",
1058
+ "execution_count": 21,
1059
+ "metadata": {},
1060
+ "outputs": [
1061
+ {
1062
+ "name": "stdout",
1063
+ "output_type": "stream",
1064
+ "text": [
1065
+ " precision recall f1-score support\n",
1066
+ "\n",
1067
+ " noncancer 0.66 0.83 0.74 400\n",
1068
+ " cancer 0.77 0.57 0.66 400\n",
1069
+ "\n",
1070
+ " micro avg 0.70 0.70 0.70 800\n",
1071
+ " macro avg 0.72 0.70 0.70 800\n",
1072
+ "weighted avg 0.72 0.70 0.70 800\n",
1073
+ "\n"
1074
+ ]
1075
+ }
1076
+ ],
1077
+ "source": [
1078
+ "from sklearn.metrics import confusion_matrix\n",
1079
+ "from sklearn import metrics\n",
1080
+ "\n",
1081
+ "status = [\"noncancer\",\"cancer\"]\n",
1082
+ "class_metrics = metrics.classification_report(validation_labels,preds,target_names = status)\n",
1083
+ "print(class_metrics)"
1084
+ ]
1085
+ },
1086
+ {
1087
+ "cell_type": "code",
1088
+ "execution_count": 16,
1089
+ "metadata": {},
1090
+ "outputs": [
1091
+ {
1092
+ "name": "stdout",
1093
+ "output_type": "stream",
1094
+ "text": [
1095
+ "800/800 [==============================] - 0s 43us/step\n"
1096
+ ]
1097
+ },
1098
+ {
1099
+ "data": {
1100
+ "text/plain": [
1101
+ "[0.6735305505990982, 0.706250011920929]"
1102
+ ]
1103
+ },
1104
+ "execution_count": 16,
1105
+ "metadata": {},
1106
+ "output_type": "execute_result"
1107
+ }
1108
+ ],
1109
+ "source": [
1110
+ "model.evaluate(validation_data,validation_labels)"
1111
+ ]
1112
+ },
1113
+ {
1114
+ "cell_type": "code",
1115
+ "execution_count": null,
1116
+ "metadata": {},
1117
+ "outputs": [],
1118
+ "source": []
1119
+ },
1120
+ {
1121
+ "cell_type": "code",
1122
+ "execution_count": null,
1123
+ "metadata": {},
1124
+ "outputs": [],
1125
+ "source": []
1126
+ },
1127
+ {
1128
+ "cell_type": "code",
1129
+ "execution_count": null,
1130
+ "metadata": {},
1131
+ "outputs": [],
1132
+ "source": []
1133
+ },
1134
+ {
1135
+ "cell_type": "code",
1136
+ "execution_count": null,
1137
+ "metadata": {},
1138
+ "outputs": [],
1139
+ "source": []
1140
+ },
1141
+ {
1142
+ "cell_type": "code",
1143
+ "execution_count": null,
1144
+ "metadata": {},
1145
+ "outputs": [],
1146
+ "source": []
1147
+ },
1148
+ {
1149
+ "cell_type": "code",
1150
+ "execution_count": null,
1151
+ "metadata": {},
1152
+ "outputs": [],
1153
+ "source": []
1154
+ },
1155
+ {
1156
+ "cell_type": "code",
1157
+ "execution_count": null,
1158
+ "metadata": {},
1159
+ "outputs": [],
1160
+ "source": []
1161
+ },
1162
+ {
1163
+ "cell_type": "code",
1164
+ "execution_count": null,
1165
+ "metadata": {},
1166
+ "outputs": [],
1167
+ "source": []
1168
+ },
1169
+ {
1170
+ "cell_type": "code",
1171
+ "execution_count": null,
1172
+ "metadata": {},
1173
+ "outputs": [],
1174
+ "source": []
1175
+ },
1176
+ {
1177
+ "cell_type": "code",
1178
+ "execution_count": null,
1179
+ "metadata": {},
1180
+ "outputs": [],
1181
+ "source": []
1182
+ },
1183
+ {
1184
+ "cell_type": "code",
1185
+ "execution_count": null,
1186
+ "metadata": {},
1187
+ "outputs": [],
1188
+ "source": []
1189
+ },
1190
+ {
1191
+ "cell_type": "code",
1192
+ "execution_count": null,
1193
+ "metadata": {},
1194
+ "outputs": [],
1195
+ "source": []
1196
+ }
1197
+ ],
1198
+ "metadata": {
1199
+ "kernelspec": {
1200
+ "display_name": "Python 3",
1201
+ "language": "python",
1202
+ "name": "python3"
1203
+ },
1204
+ "language_info": {
1205
+ "codemirror_mode": {
1206
+ "name": "ipython",
1207
+ "version": 3
1208
+ },
1209
+ "file_extension": ".py",
1210
+ "mimetype": "text/x-python",
1211
+ "name": "python",
1212
+ "nbconvert_exporter": "python",
1213
+ "pygments_lexer": "ipython3",
1214
+ "version": "3.7.3"
1215
+ }
1216
+ },
1217
+ "nbformat": 4,
1218
+ "nbformat_minor": 2
1219
+ }
Xception.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
bottleneck_fc_model.h5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:df67e97e0eea9331b6511ea00a81c27d95d06140206f3ecfaecea9caa9d0ea0c
3
+ size 539316
bottleneck_features_trains.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e20c8a54b2b6bab062a9ba7b77334389959cd179eb758f7eb269988238b1d766
3
+ size 2912384
bottleneck_features_validations.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5273fafb03d2e27fa954aa1903b776bd042212cb18c1b14eea49580472e4091f
3
+ size 1638528
can.png ADDED
cancer detection new.ipynb ADDED
@@ -0,0 +1,1404 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 1,
6
+ "metadata": {},
7
+ "outputs": [
8
+ {
9
+ "name": "stderr",
10
+ "output_type": "stream",
11
+ "text": [
12
+ "Using TensorFlow backend.\n"
13
+ ]
14
+ },
15
+ {
16
+ "name": "stdout",
17
+ "output_type": "stream",
18
+ "text": [
19
+ "['cancer', 'noncancer']\n",
20
+ "./breast-histopathology-images/8867/cancer\n",
21
+ "./breast-histopathology-images/8867/noncancer\n"
22
+ ]
23
+ }
24
+ ],
25
+ "source": [
26
+ "from keras.preprocessing import image\n",
27
+ "import os \n",
28
+ "folders = os.listdir(\"./breast-histopathology-images/8867/\")\n",
29
+ "print(folders)\n",
30
+ "\n",
31
+ "image_data = []\n",
32
+ "labels = []\n",
33
+ "\n",
34
+ "\n",
35
+ "label_dict = {\"noncancer\":0,\"cancer\":1}\n",
36
+ "\n",
37
+ "for ix in folders:\n",
38
+ " path = os.path.join(\"./breast-histopathology-images/8867/\",ix)\n",
39
+ " print(path)\n",
40
+ " for im in os.listdir(path):\n",
41
+ " img = image.load_img(os.path.join(path,im),target_size=((224,224)))\n",
42
+ " img_array = image.img_to_array(img)\n",
43
+ " image_data.append(img_array)\n",
44
+ " labels.append(label_dict[ix])"
45
+ ]
46
+ },
47
+ {
48
+ "cell_type": "code",
49
+ "execution_count": 2,
50
+ "metadata": {},
51
+ "outputs": [],
52
+ "source": [
53
+ "import random\n",
54
+ "import numpy as np\n",
55
+ "combined = list(zip(image_data,labels))\n",
56
+ "random.shuffle(combined)\n",
57
+ "\n",
58
+ "image_data[:],labels[:] = zip(*combined)"
59
+ ]
60
+ },
61
+ {
62
+ "cell_type": "code",
63
+ "execution_count": 3,
64
+ "metadata": {},
65
+ "outputs": [
66
+ {
67
+ "name": "stdout",
68
+ "output_type": "stream",
69
+ "text": [
70
+ "[1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1]\n"
71
+ ]
72
+ }
73
+ ],
74
+ "source": [
75
+ "print(labels[:15])#First five labels"
76
+ ]
77
+ },
78
+ {
79
+ "cell_type": "code",
80
+ "execution_count": 4,
81
+ "metadata": {},
82
+ "outputs": [],
83
+ "source": [
84
+ "from keras.models import Sequential\n",
85
+ "from keras.layers.normalization import BatchNormalization\n",
86
+ "from keras.layers.convolutional import SeparableConv2D\n",
87
+ "from keras.layers.convolutional import MaxPooling2D\n",
88
+ "from keras.layers.core import Activation\n",
89
+ "from keras.layers.core import Flatten\n",
90
+ "from keras.layers.core import Dropout\n",
91
+ "from keras.layers.core import Dense\n",
92
+ "from keras.layers import *"
93
+ ]
94
+ },
95
+ {
96
+ "cell_type": "code",
97
+ "execution_count": 5,
98
+ "metadata": {},
99
+ "outputs": [
100
+ {
101
+ "name": "stdout",
102
+ "output_type": "stream",
103
+ "text": [
104
+ "WARNING:tensorflow:From C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\keras\\backend\\tensorflow_backend.py:4070: The name tf.nn.max_pool is deprecated. Please use tf.nn.max_pool2d instead.\n",
105
+ "\n",
106
+ "Model: \"sequential_1\"\n",
107
+ "_________________________________________________________________\n",
108
+ "Layer (type) Output Shape Param # \n",
109
+ "=================================================================\n",
110
+ "conv2d_1 (Conv2D) (None, 48, 48, 32) 896 \n",
111
+ "_________________________________________________________________\n",
112
+ "max_pooling2d_1 (MaxPooling2 (None, 24, 24, 32) 0 \n",
113
+ "_________________________________________________________________\n",
114
+ "dropout_1 (Dropout) (None, 24, 24, 32) 0 \n",
115
+ "_________________________________________________________________\n",
116
+ "conv2d_2 (Conv2D) (None, 22, 22, 64) 18496 \n",
117
+ "_________________________________________________________________\n",
118
+ "max_pooling2d_2 (MaxPooling2 (None, 11, 11, 64) 0 \n",
119
+ "_________________________________________________________________\n",
120
+ "dropout_2 (Dropout) (None, 11, 11, 64) 0 \n",
121
+ "_________________________________________________________________\n",
122
+ "conv2d_3 (Conv2D) (None, 9, 9, 128) 73856 \n",
123
+ "_________________________________________________________________\n",
124
+ "max_pooling2d_3 (MaxPooling2 (None, 4, 4, 128) 0 \n",
125
+ "_________________________________________________________________\n",
126
+ "dropout_3 (Dropout) (None, 4, 4, 128) 0 \n",
127
+ "_________________________________________________________________\n",
128
+ "flatten_1 (Flatten) (None, 2048) 0 \n",
129
+ "_________________________________________________________________\n",
130
+ "dense_1 (Dense) (None, 256) 524544 \n",
131
+ "_________________________________________________________________\n",
132
+ "dropout_4 (Dropout) (None, 256) 0 \n",
133
+ "_________________________________________________________________\n",
134
+ "dense_2 (Dense) (None, 2) 514 \n",
135
+ "=================================================================\n",
136
+ "Total params: 618,306\n",
137
+ "Trainable params: 618,306\n",
138
+ "Non-trainable params: 0\n",
139
+ "_________________________________________________________________\n"
140
+ ]
141
+ }
142
+ ],
143
+ "source": [
144
+ "#CNN model\n",
145
+ "\n",
146
+ "model = Sequential()\n",
147
+ "model.add(Convolution2D(32,(3,3),activation='relu',input_shape = (50,50,3)))#32 filters each going to be 3*3 matrix \n",
148
+ "#for first we have to give input_shape\n",
149
+ "model.add(MaxPooling2D(2,2))\n",
150
+ "model.add(Dropout(0.25))\n",
151
+ "\n",
152
+ "model.add(Convolution2D(64,(3,3),activation='relu'))#For all layers we dont need to specify input shape\n",
153
+ "model.add(MaxPooling2D(2,2))\n",
154
+ "model.add(Dropout(0.25))\n",
155
+ "\n",
156
+ "model.add(Convolution2D(128,(3,3),activation='relu'))#For all layers we dont need to specify input shape\n",
157
+ "model.add(MaxPooling2D(2,2))\n",
158
+ "model.add(Dropout(0.25))\n",
159
+ "\n",
160
+ "model.add(Flatten())# its not a layer its just a reshaper function,it will make 3d volume to a linear layer\n",
161
+ "model.add(Dense(256,activation='relu'))\n",
162
+ "model.add(Dropout(0.5))\n",
163
+ "model.add(Dense(2,activation = 'softmax'))#dense have value of 10 which means 10 neurons so we can predict output for 10 classes \n",
164
+ "model.summary()\n",
165
+ "\n",
166
+ "#we increase the no. pf filter for complex images ,so we increase the depth by this"
167
+ ]
168
+ },
169
+ {
170
+ "cell_type": "code",
171
+ "execution_count": 6,
172
+ "metadata": {},
173
+ "outputs": [
174
+ {
175
+ "name": "stdout",
176
+ "output_type": "stream",
177
+ "text": [
178
+ "(324, 224, 224, 3) (324,)\n"
179
+ ]
180
+ }
181
+ ],
182
+ "source": [
183
+ "X_train = np.array(image_data)\n",
184
+ "Y_train = np.array(labels)\n",
185
+ "\n",
186
+ "\n",
187
+ "print(X_train.shape,Y_train.shape)"
188
+ ]
189
+ },
190
+ {
191
+ "cell_type": "code",
192
+ "execution_count": 7,
193
+ "metadata": {},
194
+ "outputs": [
195
+ {
196
+ "name": "stdout",
197
+ "output_type": "stream",
198
+ "text": [
199
+ "(324, 224, 224, 3)\n",
200
+ "(324, 2)\n"
201
+ ]
202
+ }
203
+ ],
204
+ "source": [
205
+ "from keras.utils import np_utils\n",
206
+ "\n",
207
+ "Y_train = np_utils.to_categorical(Y_train)\n",
208
+ "print(X_train.shape)\n",
209
+ "print(Y_train.shape)"
210
+ ]
211
+ },
212
+ {
213
+ "cell_type": "code",
214
+ "execution_count": 8,
215
+ "metadata": {},
216
+ "outputs": [],
217
+ "source": [
218
+ "#Create the resnet 50 model\n",
219
+ "from keras.optimizers import Adam\n",
220
+ "from keras.preprocessing.image import ImageDataGenerator"
221
+ ]
222
+ },
223
+ {
224
+ "cell_type": "code",
225
+ "execution_count": 9,
226
+ "metadata": {},
227
+ "outputs": [],
228
+ "source": [
229
+ "train_imagedata = ImageDataGenerator(\n",
230
+ " rescale=1./255,\n",
231
+ " shear_range=0.2,\n",
232
+ " zoom_range=0.2,\n",
233
+ " horizontal_flip=True)\n",
234
+ "\n",
235
+ "test_imagedata = ImageDataGenerator(rescale=1./255)"
236
+ ]
237
+ },
238
+ {
239
+ "cell_type": "code",
240
+ "execution_count": 10,
241
+ "metadata": {},
242
+ "outputs": [
243
+ {
244
+ "name": "stdout",
245
+ "output_type": "stream",
246
+ "text": [
247
+ "Found 324 images belonging to 2 classes.\n",
248
+ "Found 150 images belonging to 2 classes.\n",
249
+ "Found 56 images belonging to 2 classes.\n"
250
+ ]
251
+ }
252
+ ],
253
+ "source": [
254
+ "training_set = \\\n",
255
+ " train_imagedata.flow_from_directory('.\\\\breast-histopathology-images\\\\8867/',shuffle = True\n",
256
+ " , target_size=(50, 50), batch_size=32, class_mode='categorical')\n",
257
+ "\n",
258
+ "val_set = \\\n",
259
+ " test_imagedata.flow_from_directory('.\\\\breast-histopathology-images\\\\8914/',shuffle = False\n",
260
+ " , target_size=(50, 50), batch_size=32, class_mode='categorical')\n",
261
+ "\n",
262
+ "test_set = \\\n",
263
+ " test_imagedata.flow_from_directory('.\\\\breast-histopathology-images\\\\8917/',shuffle = False\n",
264
+ " , target_size=(50, 50), batch_size=32, class_mode='categorical')\n"
265
+ ]
266
+ },
267
+ {
268
+ "cell_type": "code",
269
+ "execution_count": 11,
270
+ "metadata": {},
271
+ "outputs": [],
272
+ "source": [
273
+ "model.compile(loss=\"binary_crossentropy\", optimizer='adam',metrics=[\"accuracy\"])\n"
274
+ ]
275
+ },
276
+ {
277
+ "cell_type": "code",
278
+ "execution_count": 12,
279
+ "metadata": {},
280
+ "outputs": [
281
+ {
282
+ "name": "stdout",
283
+ "output_type": "stream",
284
+ "text": [
285
+ "WARNING:tensorflow:From C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow\\python\\ops\\math_grad.py:1250: add_dispatch_support.<locals>.wrapper (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n",
286
+ "Instructions for updating:\n",
287
+ "Use tf.where in 2.0, which has the same broadcast rule as np.where\n",
288
+ "WARNING:tensorflow:From C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\keras\\backend\\tensorflow_backend.py:422: The name tf.global_variables is deprecated. Please use tf.compat.v1.global_variables instead.\n",
289
+ "\n",
290
+ "Epoch 1/15\n",
291
+ "1000/1000 [==============================] - 92s 92ms/step - loss: 0.1583 - accuracy: 0.9341 - val_loss: 0.4515 - val_accuracy: 0.7467\n",
292
+ "Epoch 2/15\n",
293
+ "1000/1000 [==============================] - 84s 84ms/step - loss: 0.0679 - accuracy: 0.9756 - val_loss: 1.8259 - val_accuracy: 0.5867\n",
294
+ "Epoch 3/15\n",
295
+ "1000/1000 [==============================] - 78s 78ms/step - loss: 0.0398 - accuracy: 0.9866 - val_loss: 2.0831 - val_accuracy: 0.5733\n",
296
+ "Epoch 4/15\n",
297
+ "1000/1000 [==============================] - 80s 80ms/step - loss: 0.1757 - accuracy: 0.9336 - val_loss: 0.3006 - val_accuracy: 0.7067\n",
298
+ "Epoch 5/15\n",
299
+ "1000/1000 [==============================] - 75s 75ms/step - loss: 0.0990 - accuracy: 0.9622 - val_loss: 0.0912 - val_accuracy: 0.7333\n",
300
+ "Epoch 6/15\n",
301
+ "1000/1000 [==============================] - 76s 76ms/step - loss: 0.0433 - accuracy: 0.9841 - val_loss: 0.6332 - val_accuracy: 0.6867\n",
302
+ "Epoch 7/15\n",
303
+ "1000/1000 [==============================] - 77s 77ms/step - loss: 0.0312 - accuracy: 0.9898 - val_loss: 0.6004 - val_accuracy: 0.6733\n",
304
+ "Epoch 8/15\n",
305
+ "1000/1000 [==============================] - 79s 79ms/step - loss: 0.0510 - accuracy: 0.9828 - val_loss: 0.2405 - val_accuracy: 0.7200\n",
306
+ "Epoch 9/15\n",
307
+ "1000/1000 [==============================] - 79s 79ms/step - loss: 0.0167 - accuracy: 0.9945 - val_loss: 1.3188 - val_accuracy: 0.6267\n",
308
+ "Epoch 10/15\n",
309
+ "1000/1000 [==============================] - 78s 78ms/step - loss: 0.0396 - accuracy: 0.9884 - val_loss: 0.2395 - val_accuracy: 0.7133\n",
310
+ "Epoch 11/15\n",
311
+ "1000/1000 [==============================] - 79s 79ms/step - loss: 0.0206 - accuracy: 0.9940 - val_loss: 0.8288 - val_accuracy: 0.7267\n",
312
+ "Epoch 12/15\n",
313
+ "1000/1000 [==============================] - 80s 80ms/step - loss: 0.0200 - accuracy: 0.9941 - val_loss: 0.3362 - val_accuracy: 0.7600\n",
314
+ "Epoch 13/15\n",
315
+ "1000/1000 [==============================] - 79s 79ms/step - loss: 0.0216 - accuracy: 0.9939 - val_loss: 0.4209 - val_accuracy: 0.7667\n",
316
+ "Epoch 14/15\n",
317
+ "1000/1000 [==============================] - 79s 79ms/step - loss: 0.0158 - accuracy: 0.9956 - val_loss: 1.2731 - val_accuracy: 0.6533\n",
318
+ "Epoch 15/15\n",
319
+ "1000/1000 [==============================] - 79s 79ms/step - loss: 0.0103 - accuracy: 0.9972 - val_loss: 0.5199 - val_accuracy: 0.7000\n"
320
+ ]
321
+ }
322
+ ],
323
+ "source": [
324
+ "history=model.fit_generator(training_set, steps_per_epoch=1000, epochs=15,\n",
325
+ " validation_data=val_set,\n",
326
+ " validation_steps=30,)"
327
+ ]
328
+ },
329
+ {
330
+ "cell_type": "code",
331
+ "execution_count": 13,
332
+ "metadata": {},
333
+ "outputs": [],
334
+ "source": [
335
+ "import matplotlib.pyplot as plt\n",
336
+ "acc = history.history['accuracy']\n",
337
+ "val_acc = history.history['val_accuracy']\n",
338
+ "loss = history.history['loss']\n",
339
+ "val_loss = history.history['val_loss']"
340
+ ]
341
+ },
342
+ {
343
+ "cell_type": "code",
344
+ "execution_count": 14,
345
+ "metadata": {},
346
+ "outputs": [
347
+ {
348
+ "data": {
349
+ "image/png": "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\n",
350
+ "text/plain": [
351
+ "<Figure size 432x288 with 1 Axes>"
352
+ ]
353
+ },
354
+ "metadata": {
355
+ "needs_background": "light"
356
+ },
357
+ "output_type": "display_data"
358
+ }
359
+ ],
360
+ "source": [
361
+ "plt.plot(acc,label='accuracy')\n",
362
+ "plt.plot(val_acc,label='val_acc')\n",
363
+ "plt.legend()\n",
364
+ "plt.show()"
365
+ ]
366
+ },
367
+ {
368
+ "cell_type": "code",
369
+ "execution_count": 15,
370
+ "metadata": {},
371
+ "outputs": [
372
+ {
373
+ "data": {
374
+ "image/png": "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\n",
375
+ "text/plain": [
376
+ "<Figure size 432x288 with 1 Axes>"
377
+ ]
378
+ },
379
+ "metadata": {
380
+ "needs_background": "light"
381
+ },
382
+ "output_type": "display_data"
383
+ }
384
+ ],
385
+ "source": [
386
+ "plt.plot(loss,label='loss')\n",
387
+ "plt.plot(val_loss,label= 'val_loss')\n",
388
+ "plt.legend()\n",
389
+ "plt.show()"
390
+ ]
391
+ },
392
+ {
393
+ "cell_type": "code",
394
+ "execution_count": 26,
395
+ "metadata": {},
396
+ "outputs": [
397
+ {
398
+ "name": "stdout",
399
+ "output_type": "stream",
400
+ "text": [
401
+ "noncancer\n"
402
+ ]
403
+ }
404
+ ],
405
+ "source": [
406
+ "test_image = \\\n",
407
+ " image.load_img('./test/8864_idx5_x1801_y2451_class1.png',\n",
408
+ " target_size=(50,50))\n",
409
+ "test_image = image.img_to_array(test_image)\n",
410
+ "test_image = np.expand_dims(test_image,axis =0)\n",
411
+ "result = model.predict(test_image)\n",
412
+ "training_set.class_indices\n",
413
+ "if result[0][0] == 1:\n",
414
+ " print('cancer')\n",
415
+ "else:\n",
416
+ " print('noncancer')"
417
+ ]
418
+ },
419
+ {
420
+ "cell_type": "code",
421
+ "execution_count": 28,
422
+ "metadata": {},
423
+ "outputs": [
424
+ {
425
+ "name": "stdout",
426
+ "output_type": "stream",
427
+ "text": [
428
+ "0.0\n"
429
+ ]
430
+ }
431
+ ],
432
+ "source": [
433
+ "test_image = \\\n",
434
+ " image.load_img('./test/8864_idx5_x201_y2351_class0.png',\n",
435
+ " target_size=(50,50))\n",
436
+ "test_image = image.img_to_array(test_image)\n",
437
+ "test_image = np.expand_dims(test_image,axis =0)\n",
438
+ "result = model.predict(test_image)\n",
439
+ "training_set.class_indices\n",
440
+ "print(result[0][0])"
441
+ ]
442
+ },
443
+ {
444
+ "cell_type": "code",
445
+ "execution_count": 23,
446
+ "metadata": {},
447
+ "outputs": [
448
+ {
449
+ "name": "stdout",
450
+ "output_type": "stream",
451
+ "text": [
452
+ "0.0\n"
453
+ ]
454
+ }
455
+ ],
456
+ "source": [
457
+ "test_image = \\\n",
458
+ " image.load_img('./test/8864_idx5_x201_y2301_class0.png',\n",
459
+ " target_size=(50,50))\n",
460
+ "test_image = image.img_to_array(test_image)\n",
461
+ "test_image = np.expand_dims(test_image,axis =0)\n",
462
+ "result = model.predict(test_image)\n",
463
+ "print(result[0][0])"
464
+ ]
465
+ },
466
+ {
467
+ "cell_type": "code",
468
+ "execution_count": 24,
469
+ "metadata": {},
470
+ "outputs": [
471
+ {
472
+ "data": {
473
+ "text/plain": [
474
+ "array([1], dtype=int64)"
475
+ ]
476
+ },
477
+ "execution_count": 24,
478
+ "metadata": {},
479
+ "output_type": "execute_result"
480
+ }
481
+ ],
482
+ "source": [
483
+ "import numpy as np\n",
484
+ "test_image = \\\n",
485
+ " image.load_img('./test/8864_idx5_x51_y2201_class0.png',\n",
486
+ " target_size=(50,50))\n",
487
+ "test_image = image.img_to_array(test_image)\n",
488
+ "test_image = np.expand_dims(test_image,axis =0)\n",
489
+ "result = model.predict_classes(test_image)\n",
490
+ "result"
491
+ ]
492
+ },
493
+ {
494
+ "cell_type": "code",
495
+ "execution_count": null,
496
+ "metadata": {},
497
+ "outputs": [],
498
+ "source": []
499
+ },
500
+ {
501
+ "cell_type": "code",
502
+ "execution_count": null,
503
+ "metadata": {},
504
+ "outputs": [],
505
+ "source": []
506
+ },
507
+ {
508
+ "cell_type": "code",
509
+ "execution_count": null,
510
+ "metadata": {},
511
+ "outputs": [],
512
+ "source": []
513
+ },
514
+ {
515
+ "cell_type": "code",
516
+ "execution_count": null,
517
+ "metadata": {},
518
+ "outputs": [],
519
+ "source": []
520
+ },
521
+ {
522
+ "cell_type": "code",
523
+ "execution_count": null,
524
+ "metadata": {},
525
+ "outputs": [],
526
+ "source": []
527
+ },
528
+ {
529
+ "cell_type": "code",
530
+ "execution_count": null,
531
+ "metadata": {},
532
+ "outputs": [],
533
+ "source": []
534
+ },
535
+ {
536
+ "cell_type": "code",
537
+ "execution_count": null,
538
+ "metadata": {},
539
+ "outputs": [],
540
+ "source": []
541
+ },
542
+ {
543
+ "cell_type": "code",
544
+ "execution_count": null,
545
+ "metadata": {},
546
+ "outputs": [],
547
+ "source": []
548
+ },
549
+ {
550
+ "cell_type": "code",
551
+ "execution_count": null,
552
+ "metadata": {},
553
+ "outputs": [],
554
+ "source": []
555
+ },
556
+ {
557
+ "cell_type": "code",
558
+ "execution_count": null,
559
+ "metadata": {},
560
+ "outputs": [],
561
+ "source": []
562
+ },
563
+ {
564
+ "cell_type": "code",
565
+ "execution_count": null,
566
+ "metadata": {},
567
+ "outputs": [],
568
+ "source": []
569
+ },
570
+ {
571
+ "cell_type": "code",
572
+ "execution_count": null,
573
+ "metadata": {},
574
+ "outputs": [],
575
+ "source": []
576
+ },
577
+ {
578
+ "cell_type": "code",
579
+ "execution_count": null,
580
+ "metadata": {},
581
+ "outputs": [],
582
+ "source": []
583
+ },
584
+ {
585
+ "cell_type": "code",
586
+ "execution_count": null,
587
+ "metadata": {},
588
+ "outputs": [],
589
+ "source": []
590
+ },
591
+ {
592
+ "cell_type": "code",
593
+ "execution_count": null,
594
+ "metadata": {},
595
+ "outputs": [],
596
+ "source": []
597
+ },
598
+ {
599
+ "cell_type": "code",
600
+ "execution_count": null,
601
+ "metadata": {},
602
+ "outputs": [],
603
+ "source": []
604
+ },
605
+ {
606
+ "cell_type": "code",
607
+ "execution_count": null,
608
+ "metadata": {},
609
+ "outputs": [],
610
+ "source": []
611
+ },
612
+ {
613
+ "cell_type": "code",
614
+ "execution_count": null,
615
+ "metadata": {},
616
+ "outputs": [],
617
+ "source": []
618
+ },
619
+ {
620
+ "cell_type": "code",
621
+ "execution_count": null,
622
+ "metadata": {},
623
+ "outputs": [],
624
+ "source": []
625
+ },
626
+ {
627
+ "cell_type": "code",
628
+ "execution_count": null,
629
+ "metadata": {},
630
+ "outputs": [],
631
+ "source": []
632
+ },
633
+ {
634
+ "cell_type": "code",
635
+ "execution_count": null,
636
+ "metadata": {},
637
+ "outputs": [],
638
+ "source": []
639
+ },
640
+ {
641
+ "cell_type": "code",
642
+ "execution_count": null,
643
+ "metadata": {},
644
+ "outputs": [],
645
+ "source": []
646
+ },
647
+ {
648
+ "cell_type": "code",
649
+ "execution_count": null,
650
+ "metadata": {},
651
+ "outputs": [],
652
+ "source": []
653
+ },
654
+ {
655
+ "cell_type": "code",
656
+ "execution_count": null,
657
+ "metadata": {},
658
+ "outputs": [],
659
+ "source": []
660
+ },
661
+ {
662
+ "cell_type": "code",
663
+ "execution_count": null,
664
+ "metadata": {},
665
+ "outputs": [],
666
+ "source": []
667
+ },
668
+ {
669
+ "cell_type": "code",
670
+ "execution_count": null,
671
+ "metadata": {},
672
+ "outputs": [],
673
+ "source": []
674
+ },
675
+ {
676
+ "cell_type": "code",
677
+ "execution_count": null,
678
+ "metadata": {},
679
+ "outputs": [],
680
+ "source": []
681
+ },
682
+ {
683
+ "cell_type": "code",
684
+ "execution_count": null,
685
+ "metadata": {},
686
+ "outputs": [],
687
+ "source": []
688
+ },
689
+ {
690
+ "cell_type": "code",
691
+ "execution_count": null,
692
+ "metadata": {},
693
+ "outputs": [],
694
+ "source": []
695
+ },
696
+ {
697
+ "cell_type": "code",
698
+ "execution_count": null,
699
+ "metadata": {},
700
+ "outputs": [],
701
+ "source": []
702
+ },
703
+ {
704
+ "cell_type": "code",
705
+ "execution_count": null,
706
+ "metadata": {},
707
+ "outputs": [],
708
+ "source": []
709
+ },
710
+ {
711
+ "cell_type": "code",
712
+ "execution_count": null,
713
+ "metadata": {},
714
+ "outputs": [],
715
+ "source": []
716
+ },
717
+ {
718
+ "cell_type": "code",
719
+ "execution_count": null,
720
+ "metadata": {},
721
+ "outputs": [],
722
+ "source": []
723
+ },
724
+ {
725
+ "cell_type": "code",
726
+ "execution_count": null,
727
+ "metadata": {},
728
+ "outputs": [],
729
+ "source": []
730
+ },
731
+ {
732
+ "cell_type": "code",
733
+ "execution_count": null,
734
+ "metadata": {},
735
+ "outputs": [],
736
+ "source": []
737
+ },
738
+ {
739
+ "cell_type": "code",
740
+ "execution_count": null,
741
+ "metadata": {},
742
+ "outputs": [],
743
+ "source": []
744
+ },
745
+ {
746
+ "cell_type": "code",
747
+ "execution_count": null,
748
+ "metadata": {},
749
+ "outputs": [],
750
+ "source": []
751
+ },
752
+ {
753
+ "cell_type": "code",
754
+ "execution_count": null,
755
+ "metadata": {},
756
+ "outputs": [],
757
+ "source": []
758
+ },
759
+ {
760
+ "cell_type": "code",
761
+ "execution_count": null,
762
+ "metadata": {},
763
+ "outputs": [],
764
+ "source": []
765
+ },
766
+ {
767
+ "cell_type": "code",
768
+ "execution_count": null,
769
+ "metadata": {},
770
+ "outputs": [],
771
+ "source": []
772
+ },
773
+ {
774
+ "cell_type": "code",
775
+ "execution_count": null,
776
+ "metadata": {},
777
+ "outputs": [],
778
+ "source": []
779
+ },
780
+ {
781
+ "cell_type": "code",
782
+ "execution_count": null,
783
+ "metadata": {},
784
+ "outputs": [],
785
+ "source": []
786
+ },
787
+ {
788
+ "cell_type": "code",
789
+ "execution_count": null,
790
+ "metadata": {},
791
+ "outputs": [],
792
+ "source": []
793
+ },
794
+ {
795
+ "cell_type": "code",
796
+ "execution_count": null,
797
+ "metadata": {},
798
+ "outputs": [],
799
+ "source": []
800
+ },
801
+ {
802
+ "cell_type": "code",
803
+ "execution_count": null,
804
+ "metadata": {},
805
+ "outputs": [],
806
+ "source": []
807
+ },
808
+ {
809
+ "cell_type": "code",
810
+ "execution_count": null,
811
+ "metadata": {},
812
+ "outputs": [],
813
+ "source": []
814
+ },
815
+ {
816
+ "cell_type": "code",
817
+ "execution_count": null,
818
+ "metadata": {},
819
+ "outputs": [],
820
+ "source": []
821
+ },
822
+ {
823
+ "cell_type": "code",
824
+ "execution_count": null,
825
+ "metadata": {},
826
+ "outputs": [],
827
+ "source": []
828
+ },
829
+ {
830
+ "cell_type": "code",
831
+ "execution_count": null,
832
+ "metadata": {},
833
+ "outputs": [],
834
+ "source": []
835
+ },
836
+ {
837
+ "cell_type": "code",
838
+ "execution_count": null,
839
+ "metadata": {},
840
+ "outputs": [],
841
+ "source": []
842
+ },
843
+ {
844
+ "cell_type": "code",
845
+ "execution_count": null,
846
+ "metadata": {},
847
+ "outputs": [],
848
+ "source": []
849
+ },
850
+ {
851
+ "cell_type": "code",
852
+ "execution_count": null,
853
+ "metadata": {},
854
+ "outputs": [],
855
+ "source": []
856
+ },
857
+ {
858
+ "cell_type": "code",
859
+ "execution_count": null,
860
+ "metadata": {},
861
+ "outputs": [],
862
+ "source": []
863
+ },
864
+ {
865
+ "cell_type": "code",
866
+ "execution_count": null,
867
+ "metadata": {},
868
+ "outputs": [],
869
+ "source": []
870
+ },
871
+ {
872
+ "cell_type": "code",
873
+ "execution_count": null,
874
+ "metadata": {},
875
+ "outputs": [],
876
+ "source": []
877
+ },
878
+ {
879
+ "cell_type": "code",
880
+ "execution_count": null,
881
+ "metadata": {},
882
+ "outputs": [],
883
+ "source": []
884
+ },
885
+ {
886
+ "cell_type": "code",
887
+ "execution_count": null,
888
+ "metadata": {},
889
+ "outputs": [],
890
+ "source": []
891
+ },
892
+ {
893
+ "cell_type": "code",
894
+ "execution_count": null,
895
+ "metadata": {},
896
+ "outputs": [],
897
+ "source": []
898
+ },
899
+ {
900
+ "cell_type": "code",
901
+ "execution_count": null,
902
+ "metadata": {},
903
+ "outputs": [],
904
+ "source": []
905
+ },
906
+ {
907
+ "cell_type": "code",
908
+ "execution_count": null,
909
+ "metadata": {},
910
+ "outputs": [],
911
+ "source": []
912
+ },
913
+ {
914
+ "cell_type": "code",
915
+ "execution_count": null,
916
+ "metadata": {},
917
+ "outputs": [],
918
+ "source": []
919
+ },
920
+ {
921
+ "cell_type": "code",
922
+ "execution_count": null,
923
+ "metadata": {},
924
+ "outputs": [],
925
+ "source": []
926
+ },
927
+ {
928
+ "cell_type": "code",
929
+ "execution_count": null,
930
+ "metadata": {},
931
+ "outputs": [],
932
+ "source": []
933
+ },
934
+ {
935
+ "cell_type": "code",
936
+ "execution_count": null,
937
+ "metadata": {},
938
+ "outputs": [],
939
+ "source": []
940
+ },
941
+ {
942
+ "cell_type": "code",
943
+ "execution_count": null,
944
+ "metadata": {},
945
+ "outputs": [],
946
+ "source": []
947
+ },
948
+ {
949
+ "cell_type": "code",
950
+ "execution_count": null,
951
+ "metadata": {},
952
+ "outputs": [],
953
+ "source": []
954
+ },
955
+ {
956
+ "cell_type": "code",
957
+ "execution_count": null,
958
+ "metadata": {},
959
+ "outputs": [],
960
+ "source": []
961
+ },
962
+ {
963
+ "cell_type": "code",
964
+ "execution_count": null,
965
+ "metadata": {},
966
+ "outputs": [],
967
+ "source": []
968
+ },
969
+ {
970
+ "cell_type": "code",
971
+ "execution_count": null,
972
+ "metadata": {},
973
+ "outputs": [],
974
+ "source": []
975
+ },
976
+ {
977
+ "cell_type": "code",
978
+ "execution_count": null,
979
+ "metadata": {},
980
+ "outputs": [],
981
+ "source": []
982
+ },
983
+ {
984
+ "cell_type": "code",
985
+ "execution_count": null,
986
+ "metadata": {},
987
+ "outputs": [],
988
+ "source": []
989
+ },
990
+ {
991
+ "cell_type": "code",
992
+ "execution_count": null,
993
+ "metadata": {},
994
+ "outputs": [],
995
+ "source": []
996
+ },
997
+ {
998
+ "cell_type": "code",
999
+ "execution_count": null,
1000
+ "metadata": {},
1001
+ "outputs": [],
1002
+ "source": []
1003
+ },
1004
+ {
1005
+ "cell_type": "code",
1006
+ "execution_count": null,
1007
+ "metadata": {},
1008
+ "outputs": [],
1009
+ "source": []
1010
+ },
1011
+ {
1012
+ "cell_type": "code",
1013
+ "execution_count": null,
1014
+ "metadata": {},
1015
+ "outputs": [],
1016
+ "source": []
1017
+ },
1018
+ {
1019
+ "cell_type": "code",
1020
+ "execution_count": null,
1021
+ "metadata": {},
1022
+ "outputs": [],
1023
+ "source": []
1024
+ },
1025
+ {
1026
+ "cell_type": "code",
1027
+ "execution_count": null,
1028
+ "metadata": {},
1029
+ "outputs": [],
1030
+ "source": []
1031
+ },
1032
+ {
1033
+ "cell_type": "code",
1034
+ "execution_count": null,
1035
+ "metadata": {},
1036
+ "outputs": [],
1037
+ "source": []
1038
+ },
1039
+ {
1040
+ "cell_type": "code",
1041
+ "execution_count": null,
1042
+ "metadata": {},
1043
+ "outputs": [],
1044
+ "source": []
1045
+ },
1046
+ {
1047
+ "cell_type": "code",
1048
+ "execution_count": null,
1049
+ "metadata": {},
1050
+ "outputs": [],
1051
+ "source": []
1052
+ },
1053
+ {
1054
+ "cell_type": "code",
1055
+ "execution_count": null,
1056
+ "metadata": {},
1057
+ "outputs": [],
1058
+ "source": []
1059
+ },
1060
+ {
1061
+ "cell_type": "code",
1062
+ "execution_count": null,
1063
+ "metadata": {},
1064
+ "outputs": [],
1065
+ "source": []
1066
+ },
1067
+ {
1068
+ "cell_type": "code",
1069
+ "execution_count": null,
1070
+ "metadata": {},
1071
+ "outputs": [],
1072
+ "source": []
1073
+ },
1074
+ {
1075
+ "cell_type": "code",
1076
+ "execution_count": null,
1077
+ "metadata": {},
1078
+ "outputs": [],
1079
+ "source": []
1080
+ },
1081
+ {
1082
+ "cell_type": "code",
1083
+ "execution_count": null,
1084
+ "metadata": {},
1085
+ "outputs": [],
1086
+ "source": []
1087
+ },
1088
+ {
1089
+ "cell_type": "code",
1090
+ "execution_count": null,
1091
+ "metadata": {},
1092
+ "outputs": [],
1093
+ "source": []
1094
+ },
1095
+ {
1096
+ "cell_type": "code",
1097
+ "execution_count": null,
1098
+ "metadata": {},
1099
+ "outputs": [],
1100
+ "source": []
1101
+ },
1102
+ {
1103
+ "cell_type": "code",
1104
+ "execution_count": null,
1105
+ "metadata": {},
1106
+ "outputs": [],
1107
+ "source": []
1108
+ },
1109
+ {
1110
+ "cell_type": "code",
1111
+ "execution_count": null,
1112
+ "metadata": {},
1113
+ "outputs": [],
1114
+ "source": []
1115
+ },
1116
+ {
1117
+ "cell_type": "code",
1118
+ "execution_count": null,
1119
+ "metadata": {},
1120
+ "outputs": [],
1121
+ "source": []
1122
+ },
1123
+ {
1124
+ "cell_type": "code",
1125
+ "execution_count": null,
1126
+ "metadata": {},
1127
+ "outputs": [],
1128
+ "source": []
1129
+ },
1130
+ {
1131
+ "cell_type": "code",
1132
+ "execution_count": null,
1133
+ "metadata": {},
1134
+ "outputs": [],
1135
+ "source": []
1136
+ },
1137
+ {
1138
+ "cell_type": "code",
1139
+ "execution_count": null,
1140
+ "metadata": {},
1141
+ "outputs": [],
1142
+ "source": []
1143
+ },
1144
+ {
1145
+ "cell_type": "code",
1146
+ "execution_count": null,
1147
+ "metadata": {},
1148
+ "outputs": [],
1149
+ "source": []
1150
+ },
1151
+ {
1152
+ "cell_type": "code",
1153
+ "execution_count": null,
1154
+ "metadata": {},
1155
+ "outputs": [],
1156
+ "source": []
1157
+ },
1158
+ {
1159
+ "cell_type": "code",
1160
+ "execution_count": null,
1161
+ "metadata": {},
1162
+ "outputs": [],
1163
+ "source": []
1164
+ },
1165
+ {
1166
+ "cell_type": "code",
1167
+ "execution_count": null,
1168
+ "metadata": {},
1169
+ "outputs": [],
1170
+ "source": []
1171
+ },
1172
+ {
1173
+ "cell_type": "code",
1174
+ "execution_count": null,
1175
+ "metadata": {},
1176
+ "outputs": [],
1177
+ "source": []
1178
+ },
1179
+ {
1180
+ "cell_type": "code",
1181
+ "execution_count": null,
1182
+ "metadata": {},
1183
+ "outputs": [],
1184
+ "source": []
1185
+ },
1186
+ {
1187
+ "cell_type": "code",
1188
+ "execution_count": null,
1189
+ "metadata": {},
1190
+ "outputs": [],
1191
+ "source": []
1192
+ },
1193
+ {
1194
+ "cell_type": "code",
1195
+ "execution_count": null,
1196
+ "metadata": {},
1197
+ "outputs": [],
1198
+ "source": []
1199
+ },
1200
+ {
1201
+ "cell_type": "code",
1202
+ "execution_count": null,
1203
+ "metadata": {},
1204
+ "outputs": [],
1205
+ "source": []
1206
+ },
1207
+ {
1208
+ "cell_type": "code",
1209
+ "execution_count": null,
1210
+ "metadata": {},
1211
+ "outputs": [],
1212
+ "source": []
1213
+ },
1214
+ {
1215
+ "cell_type": "code",
1216
+ "execution_count": null,
1217
+ "metadata": {},
1218
+ "outputs": [],
1219
+ "source": []
1220
+ },
1221
+ {
1222
+ "cell_type": "code",
1223
+ "execution_count": null,
1224
+ "metadata": {},
1225
+ "outputs": [],
1226
+ "source": []
1227
+ },
1228
+ {
1229
+ "cell_type": "code",
1230
+ "execution_count": null,
1231
+ "metadata": {},
1232
+ "outputs": [],
1233
+ "source": []
1234
+ },
1235
+ {
1236
+ "cell_type": "code",
1237
+ "execution_count": null,
1238
+ "metadata": {},
1239
+ "outputs": [],
1240
+ "source": []
1241
+ },
1242
+ {
1243
+ "cell_type": "code",
1244
+ "execution_count": null,
1245
+ "metadata": {},
1246
+ "outputs": [],
1247
+ "source": []
1248
+ },
1249
+ {
1250
+ "cell_type": "code",
1251
+ "execution_count": null,
1252
+ "metadata": {},
1253
+ "outputs": [],
1254
+ "source": []
1255
+ },
1256
+ {
1257
+ "cell_type": "code",
1258
+ "execution_count": null,
1259
+ "metadata": {},
1260
+ "outputs": [],
1261
+ "source": []
1262
+ },
1263
+ {
1264
+ "cell_type": "code",
1265
+ "execution_count": null,
1266
+ "metadata": {},
1267
+ "outputs": [],
1268
+ "source": []
1269
+ },
1270
+ {
1271
+ "cell_type": "code",
1272
+ "execution_count": null,
1273
+ "metadata": {},
1274
+ "outputs": [],
1275
+ "source": []
1276
+ },
1277
+ {
1278
+ "cell_type": "code",
1279
+ "execution_count": null,
1280
+ "metadata": {},
1281
+ "outputs": [],
1282
+ "source": []
1283
+ },
1284
+ {
1285
+ "cell_type": "code",
1286
+ "execution_count": null,
1287
+ "metadata": {},
1288
+ "outputs": [],
1289
+ "source": []
1290
+ },
1291
+ {
1292
+ "cell_type": "code",
1293
+ "execution_count": null,
1294
+ "metadata": {},
1295
+ "outputs": [],
1296
+ "source": []
1297
+ },
1298
+ {
1299
+ "cell_type": "code",
1300
+ "execution_count": null,
1301
+ "metadata": {},
1302
+ "outputs": [],
1303
+ "source": []
1304
+ },
1305
+ {
1306
+ "cell_type": "code",
1307
+ "execution_count": null,
1308
+ "metadata": {},
1309
+ "outputs": [],
1310
+ "source": []
1311
+ },
1312
+ {
1313
+ "cell_type": "code",
1314
+ "execution_count": null,
1315
+ "metadata": {},
1316
+ "outputs": [],
1317
+ "source": []
1318
+ },
1319
+ {
1320
+ "cell_type": "code",
1321
+ "execution_count": null,
1322
+ "metadata": {},
1323
+ "outputs": [],
1324
+ "source": []
1325
+ },
1326
+ {
1327
+ "cell_type": "code",
1328
+ "execution_count": null,
1329
+ "metadata": {},
1330
+ "outputs": [],
1331
+ "source": []
1332
+ },
1333
+ {
1334
+ "cell_type": "code",
1335
+ "execution_count": null,
1336
+ "metadata": {},
1337
+ "outputs": [],
1338
+ "source": []
1339
+ },
1340
+ {
1341
+ "cell_type": "code",
1342
+ "execution_count": null,
1343
+ "metadata": {},
1344
+ "outputs": [],
1345
+ "source": []
1346
+ },
1347
+ {
1348
+ "cell_type": "code",
1349
+ "execution_count": null,
1350
+ "metadata": {},
1351
+ "outputs": [],
1352
+ "source": []
1353
+ },
1354
+ {
1355
+ "cell_type": "code",
1356
+ "execution_count": null,
1357
+ "metadata": {},
1358
+ "outputs": [],
1359
+ "source": []
1360
+ },
1361
+ {
1362
+ "cell_type": "code",
1363
+ "execution_count": null,
1364
+ "metadata": {},
1365
+ "outputs": [],
1366
+ "source": []
1367
+ },
1368
+ {
1369
+ "cell_type": "code",
1370
+ "execution_count": null,
1371
+ "metadata": {},
1372
+ "outputs": [],
1373
+ "source": []
1374
+ },
1375
+ {
1376
+ "cell_type": "code",
1377
+ "execution_count": null,
1378
+ "metadata": {},
1379
+ "outputs": [],
1380
+ "source": []
1381
+ }
1382
+ ],
1383
+ "metadata": {
1384
+ "kernelspec": {
1385
+ "display_name": "Python 3",
1386
+ "language": "python",
1387
+ "name": "python3"
1388
+ },
1389
+ "language_info": {
1390
+ "codemirror_mode": {
1391
+ "name": "ipython",
1392
+ "version": 3
1393
+ },
1394
+ "file_extension": ".py",
1395
+ "mimetype": "text/x-python",
1396
+ "name": "python",
1397
+ "nbconvert_exporter": "python",
1398
+ "pygments_lexer": "ipython3",
1399
+ "version": "3.7.3"
1400
+ }
1401
+ },
1402
+ "nbformat": 4,
1403
+ "nbformat_minor": 2
1404
+ }
cancer detection using transfer learning.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
main.py ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import cv2
2
+ import numpy as np
3
+ import pandas as pd
4
+ import matplotlib.pyplot as plt
5
+ from keras.layers import Convolution2D,MaxPooling2D,Flatten,Dense
6
+ import tensorflow as tf
7
+ from keras.models import Sequential
8
+
9
+
10
+ path = r'C:\Users\AVANISH SINGHAL\Desktop\MinorProject\breast-histopathology-images\8863\0\8863_idx5_x51_y1251_class0.png'
11
+
12
+ dataset_benign = cv2.imread(path)
13
+ cv2.waitKey(1000)
14
+ cv2.destroyAllWindows()
15
+ cv2.imshow('image',dataset_benign)
minor.docx ADDED
Binary file (215 kB). View file
 
model.h5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:689493a8329db371bfde3d3500d3bc9d7d9084674de6af370e27ded9493b838d
3
+ size 3045824
nonc.png ADDED