{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Using TensorFlow backend.\n", "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", " _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n", "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", " _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n", "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", " _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n", "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", " _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n", "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", " _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n", "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", " np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n", "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", " _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n", "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", " _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n", "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", " _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n", "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", " _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n", "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", " _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n", "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", " np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n" ] } ], "source": [ "import sys\n", "import os\n", "from keras.layers import *\n", "from keras.optimizers import *\n", "from keras.applications import *\n", "from keras.models import Model\n", "from keras.preprocessing.image import ImageDataGenerator\n", "from keras.callbacks import ModelCheckpoint, EarlyStopping\n", "from keras import backend as k\n", "import tensorflow as tf" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 1138 images belonging to 2 classes.\n", "Found 122 images belonging to 2 classes.\n" ] } ], "source": [ "image_size = (299, 299)\n", "batch_size = 32\n", "train_datagen = ImageDataGenerator(\n", " rescale=1./255,\n", " rotation_range=40,\n", " shear_range=0.5,\n", " zoom_range=0.5,\n", " horizontal_flip=True,\n", " vertical_flip = True,\n", " validation_split=0.2,)\n", "\n", "# this is the augmentation configuration we will use for testing:\n", "# only rescaling\n", "test_datagen = ImageDataGenerator(rescale=1./255,validation_split=0.2,)\n", "\n", "train_ds = train_datagen.flow_from_directory(\n", " \"./breast-histopathology-images/8867/\",\n", " subset=\"training\",\n", " seed=1337,\n", " target_size=image_size,\n", " batch_size=batch_size,\n", " class_mode = 'binary'\n", ")\n", "val_ds = test_datagen.flow_from_directory(\n", " \"./breast-histopathology-images/8950/\",\n", " subset=\"validation\",\n", " seed=1337,\n", " target_size=image_size,\n", " batch_size=batch_size,\n", " class_mode = 'binary'\n", "\n", ")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "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", "\n", "Model: \"model_1\"\n", "__________________________________________________________________________________________________\n", "Layer (type) Output Shape Param # Connected to \n", "==================================================================================================\n", "input_1 (InputLayer) (None, 299, 299, 3) 0 \n", "__________________________________________________________________________________________________\n", "block1_conv1 (Conv2D) (None, 149, 149, 32) 864 input_1[0][0] \n", "__________________________________________________________________________________________________\n", "block1_conv1_bn (BatchNormaliza (None, 149, 149, 32) 128 block1_conv1[0][0] \n", "__________________________________________________________________________________________________\n", "block1_conv1_act (Activation) (None, 149, 149, 32) 0 block1_conv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block1_conv2 (Conv2D) (None, 147, 147, 64) 18432 block1_conv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block1_conv2_bn (BatchNormaliza (None, 147, 147, 64) 256 block1_conv2[0][0] \n", "__________________________________________________________________________________________________\n", "block1_conv2_act (Activation) (None, 147, 147, 64) 0 block1_conv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block2_sepconv1 (SeparableConv2 (None, 147, 147, 128 8768 block1_conv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block2_sepconv1_bn (BatchNormal (None, 147, 147, 128 512 block2_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block2_sepconv2_act (Activation (None, 147, 147, 128 0 block2_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block2_sepconv2 (SeparableConv2 (None, 147, 147, 128 17536 block2_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block2_sepconv2_bn (BatchNormal (None, 147, 147, 128 512 block2_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_1 (Conv2D) (None, 74, 74, 128) 8192 block1_conv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block2_pool (MaxPooling2D) (None, 74, 74, 128) 0 block2_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "batch_normalization_1 (BatchNor (None, 74, 74, 128) 512 conv2d_1[0][0] \n", "__________________________________________________________________________________________________\n", "add_1 (Add) (None, 74, 74, 128) 0 block2_pool[0][0] \n", " batch_normalization_1[0][0] \n", "__________________________________________________________________________________________________\n", "block3_sepconv1_act (Activation (None, 74, 74, 128) 0 add_1[0][0] \n", "__________________________________________________________________________________________________\n", "block3_sepconv1 (SeparableConv2 (None, 74, 74, 256) 33920 block3_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block3_sepconv1_bn (BatchNormal (None, 74, 74, 256) 1024 block3_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block3_sepconv2_act (Activation (None, 74, 74, 256) 0 block3_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block3_sepconv2 (SeparableConv2 (None, 74, 74, 256) 67840 block3_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block3_sepconv2_bn (BatchNormal (None, 74, 74, 256) 1024 block3_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_2 (Conv2D) (None, 37, 37, 256) 32768 add_1[0][0] \n", "__________________________________________________________________________________________________\n", "block3_pool (MaxPooling2D) (None, 37, 37, 256) 0 block3_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "batch_normalization_2 (BatchNor (None, 37, 37, 256) 1024 conv2d_2[0][0] \n", "__________________________________________________________________________________________________\n", "add_2 (Add) (None, 37, 37, 256) 0 block3_pool[0][0] \n", " batch_normalization_2[0][0] \n", "__________________________________________________________________________________________________\n", "block4_sepconv1_act (Activation (None, 37, 37, 256) 0 add_2[0][0] \n", "__________________________________________________________________________________________________\n", "block4_sepconv1 (SeparableConv2 (None, 37, 37, 728) 188672 block4_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block4_sepconv1_bn (BatchNormal (None, 37, 37, 728) 2912 block4_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block4_sepconv2_act (Activation (None, 37, 37, 728) 0 block4_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block4_sepconv2 (SeparableConv2 (None, 37, 37, 728) 536536 block4_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block4_sepconv2_bn (BatchNormal (None, 37, 37, 728) 2912 block4_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_3 (Conv2D) (None, 19, 19, 728) 186368 add_2[0][0] \n", "__________________________________________________________________________________________________\n", "block4_pool (MaxPooling2D) (None, 19, 19, 728) 0 block4_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "batch_normalization_3 (BatchNor (None, 19, 19, 728) 2912 conv2d_3[0][0] \n", "__________________________________________________________________________________________________\n", "add_3 (Add) (None, 19, 19, 728) 0 block4_pool[0][0] \n", " batch_normalization_3[0][0] \n", "__________________________________________________________________________________________________\n", "block5_sepconv1_act (Activation (None, 19, 19, 728) 0 add_3[0][0] \n", "__________________________________________________________________________________________________\n", "block5_sepconv1 (SeparableConv2 (None, 19, 19, 728) 536536 block5_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block5_sepconv1_bn (BatchNormal (None, 19, 19, 728) 2912 block5_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block5_sepconv2_act (Activation (None, 19, 19, 728) 0 block5_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block5_sepconv2 (SeparableConv2 (None, 19, 19, 728) 536536 block5_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block5_sepconv2_bn (BatchNormal (None, 19, 19, 728) 2912 block5_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "block5_sepconv3_act (Activation (None, 19, 19, 728) 0 block5_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block5_sepconv3 (SeparableConv2 (None, 19, 19, 728) 536536 block5_sepconv3_act[0][0] \n", "__________________________________________________________________________________________________\n", "block5_sepconv3_bn (BatchNormal (None, 19, 19, 728) 2912 block5_sepconv3[0][0] \n", "__________________________________________________________________________________________________\n", "add_4 (Add) (None, 19, 19, 728) 0 block5_sepconv3_bn[0][0] \n", " add_3[0][0] \n", "__________________________________________________________________________________________________\n", "block6_sepconv1_act (Activation (None, 19, 19, 728) 0 add_4[0][0] \n", "__________________________________________________________________________________________________\n", "block6_sepconv1 (SeparableConv2 (None, 19, 19, 728) 536536 block6_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block6_sepconv1_bn (BatchNormal (None, 19, 19, 728) 2912 block6_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block6_sepconv2_act (Activation (None, 19, 19, 728) 0 block6_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block6_sepconv2 (SeparableConv2 (None, 19, 19, 728) 536536 block6_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block6_sepconv2_bn (BatchNormal (None, 19, 19, 728) 2912 block6_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "block6_sepconv3_act (Activation (None, 19, 19, 728) 0 block6_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block6_sepconv3 (SeparableConv2 (None, 19, 19, 728) 536536 block6_sepconv3_act[0][0] \n", "__________________________________________________________________________________________________\n", "block6_sepconv3_bn (BatchNormal (None, 19, 19, 728) 2912 block6_sepconv3[0][0] \n", "__________________________________________________________________________________________________\n", "add_5 (Add) (None, 19, 19, 728) 0 block6_sepconv3_bn[0][0] \n", " add_4[0][0] \n", "__________________________________________________________________________________________________\n", "block7_sepconv1_act (Activation (None, 19, 19, 728) 0 add_5[0][0] \n", "__________________________________________________________________________________________________\n", "block7_sepconv1 (SeparableConv2 (None, 19, 19, 728) 536536 block7_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block7_sepconv1_bn (BatchNormal (None, 19, 19, 728) 2912 block7_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block7_sepconv2_act (Activation (None, 19, 19, 728) 0 block7_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block7_sepconv2 (SeparableConv2 (None, 19, 19, 728) 536536 block7_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block7_sepconv2_bn (BatchNormal (None, 19, 19, 728) 2912 block7_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "block7_sepconv3_act (Activation (None, 19, 19, 728) 0 block7_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block7_sepconv3 (SeparableConv2 (None, 19, 19, 728) 536536 block7_sepconv3_act[0][0] \n", "__________________________________________________________________________________________________\n", "block7_sepconv3_bn (BatchNormal (None, 19, 19, 728) 2912 block7_sepconv3[0][0] \n", "__________________________________________________________________________________________________\n", "add_6 (Add) (None, 19, 19, 728) 0 block7_sepconv3_bn[0][0] \n", " add_5[0][0] \n", "__________________________________________________________________________________________________\n", "block8_sepconv1_act (Activation (None, 19, 19, 728) 0 add_6[0][0] \n", "__________________________________________________________________________________________________\n", "block8_sepconv1 (SeparableConv2 (None, 19, 19, 728) 536536 block8_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block8_sepconv1_bn (BatchNormal (None, 19, 19, 728) 2912 block8_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block8_sepconv2_act (Activation (None, 19, 19, 728) 0 block8_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block8_sepconv2 (SeparableConv2 (None, 19, 19, 728) 536536 block8_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block8_sepconv2_bn (BatchNormal (None, 19, 19, 728) 2912 block8_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "block8_sepconv3_act (Activation (None, 19, 19, 728) 0 block8_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block8_sepconv3 (SeparableConv2 (None, 19, 19, 728) 536536 block8_sepconv3_act[0][0] \n", "__________________________________________________________________________________________________\n", "block8_sepconv3_bn (BatchNormal (None, 19, 19, 728) 2912 block8_sepconv3[0][0] \n", "__________________________________________________________________________________________________\n", "add_7 (Add) (None, 19, 19, 728) 0 block8_sepconv3_bn[0][0] \n", " add_6[0][0] \n", "__________________________________________________________________________________________________\n", "block9_sepconv1_act (Activation (None, 19, 19, 728) 0 add_7[0][0] \n", "__________________________________________________________________________________________________\n", "block9_sepconv1 (SeparableConv2 (None, 19, 19, 728) 536536 block9_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block9_sepconv1_bn (BatchNormal (None, 19, 19, 728) 2912 block9_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block9_sepconv2_act (Activation (None, 19, 19, 728) 0 block9_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block9_sepconv2 (SeparableConv2 (None, 19, 19, 728) 536536 block9_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block9_sepconv2_bn (BatchNormal (None, 19, 19, 728) 2912 block9_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "block9_sepconv3_act (Activation (None, 19, 19, 728) 0 block9_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block9_sepconv3 (SeparableConv2 (None, 19, 19, 728) 536536 block9_sepconv3_act[0][0] \n", "__________________________________________________________________________________________________\n", "block9_sepconv3_bn (BatchNormal (None, 19, 19, 728) 2912 block9_sepconv3[0][0] \n", "__________________________________________________________________________________________________\n", "add_8 (Add) (None, 19, 19, 728) 0 block9_sepconv3_bn[0][0] \n", " add_7[0][0] \n", "__________________________________________________________________________________________________\n", "block10_sepconv1_act (Activatio (None, 19, 19, 728) 0 add_8[0][0] \n", "__________________________________________________________________________________________________\n", "block10_sepconv1 (SeparableConv (None, 19, 19, 728) 536536 block10_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block10_sepconv1_bn (BatchNorma (None, 19, 19, 728) 2912 block10_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block10_sepconv2_act (Activatio (None, 19, 19, 728) 0 block10_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block10_sepconv2 (SeparableConv (None, 19, 19, 728) 536536 block10_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block10_sepconv2_bn (BatchNorma (None, 19, 19, 728) 2912 block10_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "block10_sepconv3_act (Activatio (None, 19, 19, 728) 0 block10_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block10_sepconv3 (SeparableConv (None, 19, 19, 728) 536536 block10_sepconv3_act[0][0] \n", "__________________________________________________________________________________________________\n", "block10_sepconv3_bn (BatchNorma (None, 19, 19, 728) 2912 block10_sepconv3[0][0] \n", "__________________________________________________________________________________________________\n", "add_9 (Add) (None, 19, 19, 728) 0 block10_sepconv3_bn[0][0] \n", " add_8[0][0] \n", "__________________________________________________________________________________________________\n", "block11_sepconv1_act (Activatio (None, 19, 19, 728) 0 add_9[0][0] \n", "__________________________________________________________________________________________________\n", "block11_sepconv1 (SeparableConv (None, 19, 19, 728) 536536 block11_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block11_sepconv1_bn (BatchNorma (None, 19, 19, 728) 2912 block11_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block11_sepconv2_act (Activatio (None, 19, 19, 728) 0 block11_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block11_sepconv2 (SeparableConv (None, 19, 19, 728) 536536 block11_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block11_sepconv2_bn (BatchNorma (None, 19, 19, 728) 2912 block11_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "block11_sepconv3_act (Activatio (None, 19, 19, 728) 0 block11_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block11_sepconv3 (SeparableConv (None, 19, 19, 728) 536536 block11_sepconv3_act[0][0] \n", "__________________________________________________________________________________________________\n", "block11_sepconv3_bn (BatchNorma (None, 19, 19, 728) 2912 block11_sepconv3[0][0] \n", "__________________________________________________________________________________________________\n", "add_10 (Add) (None, 19, 19, 728) 0 block11_sepconv3_bn[0][0] \n", " add_9[0][0] \n", "__________________________________________________________________________________________________\n", "block12_sepconv1_act (Activatio (None, 19, 19, 728) 0 add_10[0][0] \n", "__________________________________________________________________________________________________\n", "block12_sepconv1 (SeparableConv (None, 19, 19, 728) 536536 block12_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block12_sepconv1_bn (BatchNorma (None, 19, 19, 728) 2912 block12_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block12_sepconv2_act (Activatio (None, 19, 19, 728) 0 block12_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block12_sepconv2 (SeparableConv (None, 19, 19, 728) 536536 block12_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block12_sepconv2_bn (BatchNorma (None, 19, 19, 728) 2912 block12_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "block12_sepconv3_act (Activatio (None, 19, 19, 728) 0 block12_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block12_sepconv3 (SeparableConv (None, 19, 19, 728) 536536 block12_sepconv3_act[0][0] \n", "__________________________________________________________________________________________________\n", "block12_sepconv3_bn (BatchNorma (None, 19, 19, 728) 2912 block12_sepconv3[0][0] \n", "__________________________________________________________________________________________________\n", "add_11 (Add) (None, 19, 19, 728) 0 block12_sepconv3_bn[0][0] \n", " add_10[0][0] \n", "__________________________________________________________________________________________________\n", "block13_sepconv1_act (Activatio (None, 19, 19, 728) 0 add_11[0][0] \n", "__________________________________________________________________________________________________\n", "block13_sepconv1 (SeparableConv (None, 19, 19, 728) 536536 block13_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block13_sepconv1_bn (BatchNorma (None, 19, 19, 728) 2912 block13_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block13_sepconv2_act (Activatio (None, 19, 19, 728) 0 block13_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block13_sepconv2 (SeparableConv (None, 19, 19, 1024) 752024 block13_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block13_sepconv2_bn (BatchNorma (None, 19, 19, 1024) 4096 block13_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_4 (Conv2D) (None, 10, 10, 1024) 745472 add_11[0][0] \n", "__________________________________________________________________________________________________\n", "block13_pool (MaxPooling2D) (None, 10, 10, 1024) 0 block13_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "batch_normalization_4 (BatchNor (None, 10, 10, 1024) 4096 conv2d_4[0][0] \n", "__________________________________________________________________________________________________\n", "add_12 (Add) (None, 10, 10, 1024) 0 block13_pool[0][0] \n", " batch_normalization_4[0][0] \n", "__________________________________________________________________________________________________\n", "block14_sepconv1 (SeparableConv (None, 10, 10, 1536) 1582080 add_12[0][0] \n", "__________________________________________________________________________________________________\n", "block14_sepconv1_bn (BatchNorma (None, 10, 10, 1536) 6144 block14_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block14_sepconv1_act (Activatio (None, 10, 10, 1536) 0 block14_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block14_sepconv2 (SeparableConv (None, 10, 10, 2048) 3159552 block14_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block14_sepconv2_bn (BatchNorma (None, 10, 10, 2048) 8192 block14_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "block14_sepconv2_act (Activatio (None, 10, 10, 2048) 0 block14_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "global_average_pooling2d_1 (Glo (None, 2048) 0 block14_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "batch_normalization_5 (BatchNor (None, 2048) 8192 global_average_pooling2d_1[0][0] \n", "__________________________________________________________________________________________________\n", "dense_1 (Dense) (None, 256) 524544 batch_normalization_5[0][0] \n", "__________________________________________________________________________________________________\n", "dropout_1 (Dropout) (None, 256) 0 dense_1[0][0] \n", "__________________________________________________________________________________________________\n", "dense_2 (Dense) (None, 2) 514 dropout_1[0][0] \n", "==================================================================================================\n", "Total params: 21,394,730\n", "Trainable params: 21,336,106\n", "Non-trainable params: 58,624\n", "__________________________________________________________________________________________________\n", "None\n" ] } ], "source": [ "from keras.layers import Dense\n", "from keras.regularizers import l2\n", "\n", "base_model = Xception(input_shape=(299, 299, 3), weights='imagenet', include_top=False)\n", "\n", "# Top Model Block\n", "x = base_model.output\n", "x = GlobalAveragePooling2D()(x)\n", "x = layers.BatchNormalization()(x)\n", "x = Dense(256,activation='relu',kernel_regularizer=l2(0.01), bias_regularizer=l2(0.01))(x)\n", "x = Dropout(0.5)(x)\n", "predictions = Dense(2, activation='softmax')(x)\n", "\n", "# add your top layer block to your base model\n", "model = Model(base_model.input, predictions)\n", "print(model.summary())" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"model_1\"\n", "__________________________________________________________________________________________________\n", "Layer (type) Output Shape Param # Connected to \n", "==================================================================================================\n", "input_1 (InputLayer) (None, 299, 299, 3) 0 \n", "__________________________________________________________________________________________________\n", "block1_conv1 (Conv2D) (None, 149, 149, 32) 864 input_1[0][0] \n", "__________________________________________________________________________________________________\n", "block1_conv1_bn (BatchNormaliza (None, 149, 149, 32) 128 block1_conv1[0][0] \n", "__________________________________________________________________________________________________\n", "block1_conv1_act (Activation) (None, 149, 149, 32) 0 block1_conv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block1_conv2 (Conv2D) (None, 147, 147, 64) 18432 block1_conv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block1_conv2_bn (BatchNormaliza (None, 147, 147, 64) 256 block1_conv2[0][0] \n", "__________________________________________________________________________________________________\n", "block1_conv2_act (Activation) (None, 147, 147, 64) 0 block1_conv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block2_sepconv1 (SeparableConv2 (None, 147, 147, 128 8768 block1_conv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block2_sepconv1_bn (BatchNormal (None, 147, 147, 128 512 block2_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block2_sepconv2_act (Activation (None, 147, 147, 128 0 block2_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block2_sepconv2 (SeparableConv2 (None, 147, 147, 128 17536 block2_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block2_sepconv2_bn (BatchNormal (None, 147, 147, 128 512 block2_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_1 (Conv2D) (None, 74, 74, 128) 8192 block1_conv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block2_pool (MaxPooling2D) (None, 74, 74, 128) 0 block2_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "batch_normalization_1 (BatchNor (None, 74, 74, 128) 512 conv2d_1[0][0] \n", "__________________________________________________________________________________________________\n", "add_1 (Add) (None, 74, 74, 128) 0 block2_pool[0][0] \n", " batch_normalization_1[0][0] \n", "__________________________________________________________________________________________________\n", "block3_sepconv1_act (Activation (None, 74, 74, 128) 0 add_1[0][0] \n", "__________________________________________________________________________________________________\n", "block3_sepconv1 (SeparableConv2 (None, 74, 74, 256) 33920 block3_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block3_sepconv1_bn (BatchNormal (None, 74, 74, 256) 1024 block3_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block3_sepconv2_act (Activation (None, 74, 74, 256) 0 block3_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block3_sepconv2 (SeparableConv2 (None, 74, 74, 256) 67840 block3_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block3_sepconv2_bn (BatchNormal (None, 74, 74, 256) 1024 block3_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_2 (Conv2D) (None, 37, 37, 256) 32768 add_1[0][0] \n", "__________________________________________________________________________________________________\n", "block3_pool (MaxPooling2D) (None, 37, 37, 256) 0 block3_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "batch_normalization_2 (BatchNor (None, 37, 37, 256) 1024 conv2d_2[0][0] \n", "__________________________________________________________________________________________________\n", "add_2 (Add) (None, 37, 37, 256) 0 block3_pool[0][0] \n", " batch_normalization_2[0][0] \n", "__________________________________________________________________________________________________\n", "block4_sepconv1_act (Activation (None, 37, 37, 256) 0 add_2[0][0] \n", "__________________________________________________________________________________________________\n", "block4_sepconv1 (SeparableConv2 (None, 37, 37, 728) 188672 block4_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block4_sepconv1_bn (BatchNormal (None, 37, 37, 728) 2912 block4_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block4_sepconv2_act (Activation (None, 37, 37, 728) 0 block4_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block4_sepconv2 (SeparableConv2 (None, 37, 37, 728) 536536 block4_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block4_sepconv2_bn (BatchNormal (None, 37, 37, 728) 2912 block4_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_3 (Conv2D) (None, 19, 19, 728) 186368 add_2[0][0] \n", "__________________________________________________________________________________________________\n", "block4_pool (MaxPooling2D) (None, 19, 19, 728) 0 block4_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "batch_normalization_3 (BatchNor (None, 19, 19, 728) 2912 conv2d_3[0][0] \n", "__________________________________________________________________________________________________\n", "add_3 (Add) (None, 19, 19, 728) 0 block4_pool[0][0] \n", " batch_normalization_3[0][0] \n", "__________________________________________________________________________________________________\n", "block5_sepconv1_act (Activation (None, 19, 19, 728) 0 add_3[0][0] \n", "__________________________________________________________________________________________________\n", "block5_sepconv1 (SeparableConv2 (None, 19, 19, 728) 536536 block5_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block5_sepconv1_bn (BatchNormal (None, 19, 19, 728) 2912 block5_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block5_sepconv2_act (Activation (None, 19, 19, 728) 0 block5_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block5_sepconv2 (SeparableConv2 (None, 19, 19, 728) 536536 block5_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block5_sepconv2_bn (BatchNormal (None, 19, 19, 728) 2912 block5_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "block5_sepconv3_act (Activation (None, 19, 19, 728) 0 block5_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block5_sepconv3 (SeparableConv2 (None, 19, 19, 728) 536536 block5_sepconv3_act[0][0] \n", "__________________________________________________________________________________________________\n", "block5_sepconv3_bn (BatchNormal (None, 19, 19, 728) 2912 block5_sepconv3[0][0] \n", "__________________________________________________________________________________________________\n", "add_4 (Add) (None, 19, 19, 728) 0 block5_sepconv3_bn[0][0] \n", " add_3[0][0] \n", "__________________________________________________________________________________________________\n", "block6_sepconv1_act (Activation (None, 19, 19, 728) 0 add_4[0][0] \n", "__________________________________________________________________________________________________\n", "block6_sepconv1 (SeparableConv2 (None, 19, 19, 728) 536536 block6_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block6_sepconv1_bn (BatchNormal (None, 19, 19, 728) 2912 block6_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block6_sepconv2_act (Activation (None, 19, 19, 728) 0 block6_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block6_sepconv2 (SeparableConv2 (None, 19, 19, 728) 536536 block6_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block6_sepconv2_bn (BatchNormal (None, 19, 19, 728) 2912 block6_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "block6_sepconv3_act (Activation (None, 19, 19, 728) 0 block6_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block6_sepconv3 (SeparableConv2 (None, 19, 19, 728) 536536 block6_sepconv3_act[0][0] \n", "__________________________________________________________________________________________________\n", "block6_sepconv3_bn (BatchNormal (None, 19, 19, 728) 2912 block6_sepconv3[0][0] \n", "__________________________________________________________________________________________________\n", "add_5 (Add) (None, 19, 19, 728) 0 block6_sepconv3_bn[0][0] \n", " add_4[0][0] \n", "__________________________________________________________________________________________________\n", "block7_sepconv1_act (Activation (None, 19, 19, 728) 0 add_5[0][0] \n", "__________________________________________________________________________________________________\n", "block7_sepconv1 (SeparableConv2 (None, 19, 19, 728) 536536 block7_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block7_sepconv1_bn (BatchNormal (None, 19, 19, 728) 2912 block7_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block7_sepconv2_act (Activation (None, 19, 19, 728) 0 block7_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block7_sepconv2 (SeparableConv2 (None, 19, 19, 728) 536536 block7_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block7_sepconv2_bn (BatchNormal (None, 19, 19, 728) 2912 block7_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "block7_sepconv3_act (Activation (None, 19, 19, 728) 0 block7_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block7_sepconv3 (SeparableConv2 (None, 19, 19, 728) 536536 block7_sepconv3_act[0][0] \n", "__________________________________________________________________________________________________\n", "block7_sepconv3_bn (BatchNormal (None, 19, 19, 728) 2912 block7_sepconv3[0][0] \n", "__________________________________________________________________________________________________\n", "add_6 (Add) (None, 19, 19, 728) 0 block7_sepconv3_bn[0][0] \n", " add_5[0][0] \n", "__________________________________________________________________________________________________\n", "block8_sepconv1_act (Activation (None, 19, 19, 728) 0 add_6[0][0] \n", "__________________________________________________________________________________________________\n", "block8_sepconv1 (SeparableConv2 (None, 19, 19, 728) 536536 block8_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block8_sepconv1_bn (BatchNormal (None, 19, 19, 728) 2912 block8_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block8_sepconv2_act (Activation (None, 19, 19, 728) 0 block8_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block8_sepconv2 (SeparableConv2 (None, 19, 19, 728) 536536 block8_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block8_sepconv2_bn (BatchNormal (None, 19, 19, 728) 2912 block8_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "block8_sepconv3_act (Activation (None, 19, 19, 728) 0 block8_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block8_sepconv3 (SeparableConv2 (None, 19, 19, 728) 536536 block8_sepconv3_act[0][0] \n", "__________________________________________________________________________________________________\n", "block8_sepconv3_bn (BatchNormal (None, 19, 19, 728) 2912 block8_sepconv3[0][0] \n", "__________________________________________________________________________________________________\n", "add_7 (Add) (None, 19, 19, 728) 0 block8_sepconv3_bn[0][0] \n", " add_6[0][0] \n", "__________________________________________________________________________________________________\n", "block9_sepconv1_act (Activation (None, 19, 19, 728) 0 add_7[0][0] \n", "__________________________________________________________________________________________________\n", "block9_sepconv1 (SeparableConv2 (None, 19, 19, 728) 536536 block9_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block9_sepconv1_bn (BatchNormal (None, 19, 19, 728) 2912 block9_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block9_sepconv2_act (Activation (None, 19, 19, 728) 0 block9_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block9_sepconv2 (SeparableConv2 (None, 19, 19, 728) 536536 block9_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block9_sepconv2_bn (BatchNormal (None, 19, 19, 728) 2912 block9_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "block9_sepconv3_act (Activation (None, 19, 19, 728) 0 block9_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block9_sepconv3 (SeparableConv2 (None, 19, 19, 728) 536536 block9_sepconv3_act[0][0] \n", "__________________________________________________________________________________________________\n", "block9_sepconv3_bn (BatchNormal (None, 19, 19, 728) 2912 block9_sepconv3[0][0] \n", "__________________________________________________________________________________________________\n", "add_8 (Add) (None, 19, 19, 728) 0 block9_sepconv3_bn[0][0] \n", " add_7[0][0] \n", "__________________________________________________________________________________________________\n", "block10_sepconv1_act (Activatio (None, 19, 19, 728) 0 add_8[0][0] \n", "__________________________________________________________________________________________________\n", "block10_sepconv1 (SeparableConv (None, 19, 19, 728) 536536 block10_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block10_sepconv1_bn (BatchNorma (None, 19, 19, 728) 2912 block10_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block10_sepconv2_act (Activatio (None, 19, 19, 728) 0 block10_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block10_sepconv2 (SeparableConv (None, 19, 19, 728) 536536 block10_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block10_sepconv2_bn (BatchNorma (None, 19, 19, 728) 2912 block10_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "block10_sepconv3_act (Activatio (None, 19, 19, 728) 0 block10_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block10_sepconv3 (SeparableConv (None, 19, 19, 728) 536536 block10_sepconv3_act[0][0] \n", "__________________________________________________________________________________________________\n", "block10_sepconv3_bn (BatchNorma (None, 19, 19, 728) 2912 block10_sepconv3[0][0] \n", "__________________________________________________________________________________________________\n", "add_9 (Add) (None, 19, 19, 728) 0 block10_sepconv3_bn[0][0] \n", " add_8[0][0] \n", "__________________________________________________________________________________________________\n", "block11_sepconv1_act (Activatio (None, 19, 19, 728) 0 add_9[0][0] \n", "__________________________________________________________________________________________________\n", "block11_sepconv1 (SeparableConv (None, 19, 19, 728) 536536 block11_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block11_sepconv1_bn (BatchNorma (None, 19, 19, 728) 2912 block11_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block11_sepconv2_act (Activatio (None, 19, 19, 728) 0 block11_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block11_sepconv2 (SeparableConv (None, 19, 19, 728) 536536 block11_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block11_sepconv2_bn (BatchNorma (None, 19, 19, 728) 2912 block11_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "block11_sepconv3_act (Activatio (None, 19, 19, 728) 0 block11_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block11_sepconv3 (SeparableConv (None, 19, 19, 728) 536536 block11_sepconv3_act[0][0] \n", "__________________________________________________________________________________________________\n", "block11_sepconv3_bn (BatchNorma (None, 19, 19, 728) 2912 block11_sepconv3[0][0] \n", "__________________________________________________________________________________________________\n", "add_10 (Add) (None, 19, 19, 728) 0 block11_sepconv3_bn[0][0] \n", " add_9[0][0] \n", "__________________________________________________________________________________________________\n", "block12_sepconv1_act (Activatio (None, 19, 19, 728) 0 add_10[0][0] \n", "__________________________________________________________________________________________________\n", "block12_sepconv1 (SeparableConv (None, 19, 19, 728) 536536 block12_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block12_sepconv1_bn (BatchNorma (None, 19, 19, 728) 2912 block12_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block12_sepconv2_act (Activatio (None, 19, 19, 728) 0 block12_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block12_sepconv2 (SeparableConv (None, 19, 19, 728) 536536 block12_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block12_sepconv2_bn (BatchNorma (None, 19, 19, 728) 2912 block12_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "block12_sepconv3_act (Activatio (None, 19, 19, 728) 0 block12_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block12_sepconv3 (SeparableConv (None, 19, 19, 728) 536536 block12_sepconv3_act[0][0] \n", "__________________________________________________________________________________________________\n", "block12_sepconv3_bn (BatchNorma (None, 19, 19, 728) 2912 block12_sepconv3[0][0] \n", "__________________________________________________________________________________________________\n", "add_11 (Add) (None, 19, 19, 728) 0 block12_sepconv3_bn[0][0] \n", " add_10[0][0] \n", "__________________________________________________________________________________________________\n", "block13_sepconv1_act (Activatio (None, 19, 19, 728) 0 add_11[0][0] \n", "__________________________________________________________________________________________________\n", "block13_sepconv1 (SeparableConv (None, 19, 19, 728) 536536 block13_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block13_sepconv1_bn (BatchNorma (None, 19, 19, 728) 2912 block13_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block13_sepconv2_act (Activatio (None, 19, 19, 728) 0 block13_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block13_sepconv2 (SeparableConv (None, 19, 19, 1024) 752024 block13_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "block13_sepconv2_bn (BatchNorma (None, 19, 19, 1024) 4096 block13_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_4 (Conv2D) (None, 10, 10, 1024) 745472 add_11[0][0] \n", "__________________________________________________________________________________________________\n", "block13_pool (MaxPooling2D) (None, 10, 10, 1024) 0 block13_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "batch_normalization_4 (BatchNor (None, 10, 10, 1024) 4096 conv2d_4[0][0] \n", "__________________________________________________________________________________________________\n", "add_12 (Add) (None, 10, 10, 1024) 0 block13_pool[0][0] \n", " batch_normalization_4[0][0] \n", "__________________________________________________________________________________________________\n", "block14_sepconv1 (SeparableConv (None, 10, 10, 1536) 1582080 add_12[0][0] \n", "__________________________________________________________________________________________________\n", "block14_sepconv1_bn (BatchNorma (None, 10, 10, 1536) 6144 block14_sepconv1[0][0] \n", "__________________________________________________________________________________________________\n", "block14_sepconv1_act (Activatio (None, 10, 10, 1536) 0 block14_sepconv1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "block14_sepconv2 (SeparableConv (None, 10, 10, 2048) 3159552 block14_sepconv1_act[0][0] \n", "__________________________________________________________________________________________________\n", "block14_sepconv2_bn (BatchNorma (None, 10, 10, 2048) 8192 block14_sepconv2[0][0] \n", "__________________________________________________________________________________________________\n", "block14_sepconv2_act (Activatio (None, 10, 10, 2048) 0 block14_sepconv2_bn[0][0] \n", "__________________________________________________________________________________________________\n", "global_average_pooling2d_1 (Glo (None, 2048) 0 block14_sepconv2_act[0][0] \n", "__________________________________________________________________________________________________\n", "batch_normalization_5 (BatchNor (None, 2048) 8192 global_average_pooling2d_1[0][0] \n", "__________________________________________________________________________________________________\n", "dense_1 (Dense) (None, 256) 524544 batch_normalization_5[0][0] \n", "__________________________________________________________________________________________________\n", "dropout_1 (Dropout) (None, 256) 0 dense_1[0][0] \n", "__________________________________________________________________________________________________\n", "dense_2 (Dense) (None, 2) 514 dropout_1[0][0] \n", "==================================================================================================\n", "Total params: 21,394,730\n", "Trainable params: 529,154\n", "Non-trainable params: 20,865,576\n", "__________________________________________________________________________________________________\n" ] } ], "source": [ "for layer in base_model.layers:\n", " layer.trainable = False\n", "model.summary()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "model.compile(optimizer=Adam(1e-3),\n", " loss='sparse_categorical_crossentropy', # categorical_crossentropy if multi-class classifier\n", " metrics=['accuracy'])\n", "\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "callbacks_list = [\n", " ModelCheckpoint('top_model_weights.h5', monitor='val_acc', verbose=1, save_best_only=True),\n", " EarlyStopping(monitor='val_acc', patience=5, verbose=0)\n", "]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "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", "\n", "Epoch 1/10\n", "36/35 [==============================] - 715s 20s/step - loss: 4.9270 - accuracy: 0.7162 - val_loss: 4.0998 - val_accuracy: 0.6885\n", "Epoch 2/10\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\keras\\callbacks\\callbacks.py:707: RuntimeWarning: Can save best model only with val_acc available, skipping.\n", " 'skipping.' % (self.monitor), RuntimeWarning)\n", "C:\\Users\\AVANISH SINGHAL\\AppData\\Roaming\\Python\\Python37\\site-packages\\keras\\callbacks\\callbacks.py:846: RuntimeWarning: Early stopping conditioned on metric `val_acc` which is not available. Available metrics are: val_loss,val_accuracy,loss,accuracy\n", " (self.monitor, ','.join(list(logs.keys()))), RuntimeWarning\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "36/35 [==============================] - 709s 20s/step - loss: 3.8816 - accuracy: 0.7540 - val_loss: 3.5225 - val_accuracy: 0.6885\n", "Epoch 3/10\n", "36/35 [==============================] - 712s 20s/step - loss: 3.2357 - accuracy: 0.7487 - val_loss: 2.9117 - val_accuracy: 0.6885\n", "Epoch 4/10\n", "36/35 [==============================] - 703s 20s/step - loss: 2.6700 - accuracy: 0.7671 - val_loss: 2.4518 - val_accuracy: 0.6885\n", "Epoch 5/10\n", "36/35 [==============================] - 684s 19s/step - loss: 2.2430 - accuracy: 0.7724 - val_loss: 2.1110 - val_accuracy: 0.6885\n", "Epoch 6/10\n", "36/35 [==============================] - 687s 19s/step - loss: 1.9570 - accuracy: 0.7715 - val_loss: 2.1984 - val_accuracy: 0.6885\n", "Epoch 7/10\n", "36/35 [==============================] - 684s 19s/step - loss: 1.7108 - accuracy: 0.7557 - val_loss: 1.8141 - val_accuracy: 0.6885\n", "Epoch 8/10\n", "36/35 [==============================] - 684s 19s/step - loss: 1.4468 - accuracy: 0.7953 - val_loss: 1.5769 - val_accuracy: 0.6885\n", "Epoch 9/10\n", "36/35 [==============================] - 686s 19s/step - loss: 1.2904 - accuracy: 0.7689 - val_loss: 1.3963 - val_accuracy: 0.6885\n", "Epoch 10/10\n", "36/35 [==============================] - 688s 19s/step - loss: 1.1659 - accuracy: 0.7830 - val_loss: 1.2704 - val_accuracy: 0.6885\n", "\n", "Starting to Fine Tune Model\n", "\n" ] } ], "source": [ "# Train Simple CNN\n", "hist = model.fit_generator(\n", " train_ds,\n", " steps_per_epoch=1138/batch_size,\n", " epochs=10,\n", " validation_data=val_ds,\n", " validation_steps=122/batch_size,\n", " callbacks=callbacks_list)\n", "\n", "# verbose\n", "print(\"\\nStarting to Fine Tune Model\\n\")\n", "\n", "# add the best weights from the train top model\n", "# at this point we have the pre-train weights of the base model and the trained weight of the new/added top model\n", "# we re-load model weights to ensure the best epoch is selected and not the last one.\n", "# model.load_weights('top_model_weights.h5')" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "acc = hist.history['accuracy']\n", "val_acc = hist.history['val_accuracy']\n", "loss = hist.history['loss']\n", "val_loss = hist.history['val_loss']" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(acc,label='accuracy')\n", "plt.plot(val_acc,label='val_acc')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(loss,label='loss')\n", "plt.plot(val_loss,label= 'val_loss')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Confusion Matrix\n", "[[ 0 38]\n", " [ 0 84]]\n", "Classification Report\n", " precision recall f1-score support\n", "\n", " noncancer 0.00 0.00 0.00 38\n", " cancer 0.69 1.00 0.82 84\n", "\n", " micro avg 0.69 0.69 0.69 122\n", " macro avg 0.34 0.50 0.41 122\n", "weighted avg 0.47 0.69 0.56 122\n", "\n" ] } ], "source": [ "from sklearn.metrics import classification_report, confusion_matrix\n", "\n", "\n", "Y_pred = model.predict_generator(val_ds, 122 // batch_size+1)\n", "y_pred = np.argmax(Y_pred, axis=1)\n", "print('Confusion Matrix')\n", "print(confusion_matrix(val_ds.classes, y_pred))\n", "print('Classification Report')\n", "target_names = ['noncancer', 'cancer']\n", "print(classification_report(val_ds.classes, y_pred, target_names=target_names))\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }