Skip to content

Instantly share code, notes, and snippets.

@tensorvijay
Created September 23, 2023 16:36
Show Gist options
  • Save tensorvijay/94c0911fc8cb5a815c676a26d3e75461 to your computer and use it in GitHub Desktop.
Save tensorvijay/94c0911fc8cb5a815c676a26d3e75461 to your computer and use it in GitHub Desktop.
19015_18CN11_quiz2.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"mount_file_id": "1KdCtLEPxcmHRm08cYW-Z5DM7BTrYWXz0",
"authorship_tag": "ABX9TyNKSk4SmYMkRdVpmzxMRJzw",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/tensorvijay/94c0911fc8cb5a815c676a26d3e75461/19015_18cn11_quiz2.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "_VDhHcHhLYGN"
},
"source": [
"#!unzip '/content/drive/My Drive/Thirdsem/DLforA/quiz2/chest_xray.zip'"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "TCg2IGlUNLkg"
},
"source": [
"import PIL.Image as im\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import scipy.io\n",
"from skimage.transform import rescale, resize, downscale_local_mean\n",
"from sklearn.model_selection import train_test_split\n",
"from tensorflow.keras.applications.resnet50 import ResNet50\n",
"import keras as K\n",
"import glob as glob\n",
"from skimage.transform import resize\n",
"from skimage.color import gray2rgb"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "i522xcgjUVPW"
},
"source": [
"def readImage(address):\n",
" x = im.open(address)\n",
" x = np.array(x)\n",
" return(x)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "haBMhk3XUa-S"
},
"source": [
"norm_test_add=glob.glob('/content/chest_xray/chest_xray/test/NORMAL/*.jpeg')\n",
"pne_test_add=glob.glob('/content/chest_xray/chest_xray/test/PNEUMONIA/*.jpeg')\n",
"norm_train_add=glob.glob('/content/chest_xray/chest_xray/train/NORMAL/*.jpeg')\n",
"pne_train_add=glob.glob('/content/chest_xray/chest_xray/train/PNEUMONIA/*.jpeg')\n",
"norm_val_add=glob.glob('/content/chest_xray/chest_xray/val/NORMAL/*.jpeg')\n",
"pne_val_add=glob.glob('/content/chest_xray/chest_xray/val/PNEUMONIA/*.jpeg')"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "Ien8fk-XXio1"
},
"source": [
" def load_img(norm_test_):\n",
" norm_test=[]\n",
" for i in range(0,len(norm_test_)):\n",
" img=readImage(norm_test_[i])\n",
" image_resized = resize(img, (100,100))\n",
" img_color=gray2rgb(image_resized)\n",
" norm_test.append(img_color)\n",
" return norm_test"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "0HbNUPsoWYa5",
"outputId": "fee80f57-5ebb-4a2f-b708-ba41a9f4807e",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"T_N=load_img(norm_test_add)\n",
"len(T_N)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"234"
]
},
"metadata": {
"tags": []
},
"execution_count": 6
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "W-5nIngPUrst"
},
"source": [
"T_P=load_img(pne_test_add)\n",
"TR_N=load_img(norm_train_add)\n",
"TR_P=load_img(pne_train_add)\n",
"V_N=load_img(norm_val_add)\n",
"V_P=load_img(pne_val_add)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "cXXb70yFYa6k"
},
"source": [
"y_test1=np.repeat(0,len(T_N))\n",
"y_test2=np.repeat(1,len(T_P))\n",
"y_test=np.concatenate((y_test1,y_test2))"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "3iZp0qRUjiSc"
},
"source": [
"y_test1=np.repeat(0,len(TR_N))\n",
"y_test2=np.repeat(1,len(TR_P))\n",
"y_train=np.concatenate((y_test1,y_test2))"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "oDxwGBaEjjlj"
},
"source": [
"y_test1=np.repeat(0,len(V_N))\n",
"y_test2=np.repeat(1,len(V_P))\n",
"y_val=np.concatenate((y_test1,y_test2))"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "0izErfS0yOEt"
},
"source": [
"x_train=np.concatenate((TR_N,TR_P))\n",
"x_test=np.concatenate((T_N,T_P))\n",
"x_val=np.concatenate((V_N,V_P))"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "OSkPIbXJ7oRY"
},
"source": [
"import keras"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "_Z_RUbTJVJPp"
},
"source": [
"VGG 16 Without Transfer learning and training all the weights"
]
},
{
"cell_type": "code",
"metadata": {
"id": "0lNIpXCl6nUE"
},
"source": [
"base_model = keras.applications.VGG16(\n",
" #weights='imagenet', # Load weights pre-trained on ImageNet.\n",
" input_shape=(100, 100, 3),\n",
" include_top=False) # Do not include the ImageNet classifier at the top."
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "1UKLRKNr8u6S"
},
"source": [
"count=0\n",
"for keras.layers in base_model.layers[:100]:\n",
" keras.layers.trainable=False"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "lvE7lpb3-LVN"
},
"source": [
"from keras.layers import Conv2D,MaxPooling2D,Dense,Flatten"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "4Nic4dSL7vRn"
},
"source": [
"model=keras.Sequential()\n",
"model.add(base_model)\n",
"model.add(Flatten())\n",
"model.add(Dense(2,activation='sigmoid'))"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "h3h9NhY7-UEb",
"outputId": "7787b3bd-acbe-4b6f-bc3f-1134bb6b0d09",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"model.summary()"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Model: \"sequential_4\"\n",
"_________________________________________________________________\n",
"Layer (type) Output Shape Param # \n",
"=================================================================\n",
"vgg16 (Functional) (None, 3, 3, 512) 14714688 \n",
"_________________________________________________________________\n",
"flatten_4 (Flatten) (None, 4608) 0 \n",
"_________________________________________________________________\n",
"dense_4 (Dense) (None, 2) 9218 \n",
"=================================================================\n",
"Total params: 14,723,906\n",
"Trainable params: 14,723,906\n",
"Non-trainable params: 0\n",
"_________________________________________________________________\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "1TPsw5Wn_e_2"
},
"source": [
"from keras.optimizers import SGD"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "efx1nCHgyais"
},
"source": [
"opt = SGD(lr=0.001, momentum=0.9)\n",
"model.compile(optimizer=opt, loss='binary_crossentropy', metrics=['accuracy'])"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "TuQbdYZXju6G"
},
"source": [
"from keras.preprocessing.image import ImageDataGenerator"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "wMM3he0Jj8i7"
},
"source": [
"aug = ImageDataGenerator(\n",
"\t\trotation_range=20,\n",
"\t\tzoom_range=0.15,\n",
"\t\twidth_shift_range=0.2,\n",
"\t\theight_shift_range=0.2,\n",
"\t\tshear_range=0.15,\n",
"\t\thorizontal_flip=True,\n",
"\t\tfill_mode=\"nearest\")"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "FR6CecdTABsE"
},
"source": [
"from keras.callbacks import ModelCheckpoint"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "FnZRAW8VCPII"
},
"source": [
"model.compile(optimizer=keras.optimizers.Adam(1e-5), # Very low learning rate\n",
" loss=keras.losses.BinaryCrossentropy(from_logits=True),\n",
" metrics=[keras.metrics.BinaryAccuracy()])"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "r19MF_xukVyG"
},
"source": [
"filepath=\"/content/chest_xray/weights-improvement-{epoch:02d}-{accuracy:.2f}.hdf5\"\n",
"checkpoint = ModelCheckpoint(filepath, monitor='accuracy', verbose=1, save_best_only=True, mode='max')\n",
"callbacks_list = [checkpoint]"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "wUjJFyn3AOUZ"
},
"source": [
"from keras.utils.np_utils import to_categorical\n",
"\n",
"Y_train = to_categorical(y_train, num_classes=2)\n",
"Y_test=to_categorical(y_test,num_classes=2)\n",
"Y_val=to_categorical(y_val,num_classes=2)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "cISMHhnDA0Qs"
},
"source": [
"len(x_train)/3"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "b-87zuDWEO8u"
},
"source": [
"x_train[10].shape"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "r5C3oMM4EbRf"
},
"source": [
"H=model.fit(x=x_train,y=Y_train,epochs=10,validation_data=(x_val,Y_val),callbacks=callbacks_list,verbose=1,shuffle=True,batch_size=32)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "z85jCDWFKPK8",
"outputId": "2ad7f365-a6b9-4647-ed7f-86ddc2cc04ae",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"Y_val"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[1., 0.],\n",
" [1., 0.],\n",
" [1., 0.],\n",
" [1., 0.],\n",
" [1., 0.],\n",
" [1., 0.],\n",
" [1., 0.],\n",
" [1., 0.],\n",
" [0., 1.],\n",
" [0., 1.],\n",
" [0., 1.],\n",
" [0., 1.],\n",
" [0., 1.],\n",
" [0., 1.],\n",
" [0., 1.],\n",
" [0., 1.]], dtype=float32)"
]
},
"metadata": {
"tags": []
},
"execution_count": 30
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "B0U_ecTXAlXv",
"outputId": "c5170ca2-6945-4aaa-ca07-f908706dbd17",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"H = model.fit(\n",
"\tx=aug.flow(x_train, Y_train, batch_size=32),\n",
"\tsteps_per_epoch=len(x_train)/32,\n",
"\tvalidation_data=(x_val,Y_val),\n",
"\tcallbacks=callbacks_list,\n",
"\tepochs=10)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Epoch 1/10\n",
" 2/163 [..............................] - ETA: 16s - loss: 0.7790 - accuracy: 0.2969WARNING:tensorflow:Callbacks method `on_train_batch_end` is slow compared to the batch time (batch time: 0.0458s vs `on_train_batch_end` time: 0.0702s). Check your callbacks.\n",
"163/163 [==============================] - ETA: 0s - loss: 0.2666 - accuracy: 0.8792\n",
"Epoch 00001: accuracy improved from -inf to 0.87922, saving model to /content/chest_xray/weights-improvement-01-0.88.hdf5\n",
"163/163 [==============================] - 19s 118ms/step - loss: 0.2666 - accuracy: 0.8792 - val_loss: 0.6176 - val_accuracy: 0.8125\n",
"Epoch 2/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1460 - accuracy: 0.9431\n",
"Epoch 00002: accuracy improved from 0.87922 to 0.94306, saving model to /content/chest_xray/weights-improvement-02-0.94.hdf5\n",
"163/163 [==============================] - 19s 117ms/step - loss: 0.1460 - accuracy: 0.9431 - val_loss: 0.4157 - val_accuracy: 0.8125\n",
"Epoch 3/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1249 - accuracy: 0.9532\n",
"Epoch 00003: accuracy improved from 0.94306 to 0.95322, saving model to /content/chest_xray/weights-improvement-03-0.95.hdf5\n",
"163/163 [==============================] - 19s 116ms/step - loss: 0.1249 - accuracy: 0.9532 - val_loss: 0.3944 - val_accuracy: 0.8125\n",
"Epoch 4/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1086 - accuracy: 0.9576\n",
"Epoch 00004: accuracy improved from 0.95322 to 0.95763, saving model to /content/chest_xray/weights-improvement-04-0.96.hdf5\n",
"163/163 [==============================] - 19s 115ms/step - loss: 0.1086 - accuracy: 0.9576 - val_loss: 0.9782 - val_accuracy: 0.6250\n",
"Epoch 5/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0972 - accuracy: 0.9626\n",
"Epoch 00005: accuracy improved from 0.95763 to 0.96262, saving model to /content/chest_xray/weights-improvement-05-0.96.hdf5\n",
"163/163 [==============================] - 19s 116ms/step - loss: 0.0972 - accuracy: 0.9626 - val_loss: 0.2057 - val_accuracy: 0.9375\n",
"Epoch 6/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0980 - accuracy: 0.9645\n",
"Epoch 00006: accuracy improved from 0.96262 to 0.96453, saving model to /content/chest_xray/weights-improvement-06-0.96.hdf5\n",
"163/163 [==============================] - 19s 115ms/step - loss: 0.0980 - accuracy: 0.9645 - val_loss: 0.2196 - val_accuracy: 0.8750\n",
"Epoch 7/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0832 - accuracy: 0.9676\n",
"Epoch 00007: accuracy improved from 0.96453 to 0.96760, saving model to /content/chest_xray/weights-improvement-07-0.97.hdf5\n",
"163/163 [==============================] - 19s 115ms/step - loss: 0.0832 - accuracy: 0.9676 - val_loss: 0.5428 - val_accuracy: 0.7500\n",
"Epoch 8/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0934 - accuracy: 0.9643\n",
"Epoch 00008: accuracy did not improve from 0.96760\n",
"163/163 [==============================] - 18s 113ms/step - loss: 0.0934 - accuracy: 0.9643 - val_loss: 0.5054 - val_accuracy: 0.7500\n",
"Epoch 9/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0750 - accuracy: 0.9724\n",
"Epoch 00009: accuracy improved from 0.96760 to 0.97239, saving model to /content/chest_xray/weights-improvement-09-0.97.hdf5\n",
"163/163 [==============================] - 18s 113ms/step - loss: 0.0750 - accuracy: 0.9724 - val_loss: 0.1137 - val_accuracy: 1.0000\n",
"Epoch 10/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0784 - accuracy: 0.9711\n",
"Epoch 00010: accuracy did not improve from 0.97239\n",
"163/163 [==============================] - 18s 112ms/step - loss: 0.0784 - accuracy: 0.9711 - val_loss: 0.0862 - val_accuracy: 1.0000\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "eC7FlJlbLopL"
},
"source": [
"y_pred=model.predict_classes(x_test)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "dCfcCwWzLu3y"
},
"source": [
"from sklearn.metrics import accuracy_score,confusion_matrix,f1_score"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "RAWbI2xgLvlW",
"outputId": "81636c59-d631-4898-fc05-6df3ce8319ca",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"score=accuracy_score(y_pred,y_test)\n",
"score"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.9439102564102564"
]
},
"metadata": {
"tags": []
},
"execution_count": 57
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "KLf3z08NNsti",
"outputId": "854d61be-77f8-415a-c483-7b308e638020",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"cf=confusion_matrix(y_pred,y_test)\n",
"cf"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[207, 8],\n",
" [ 27, 382]])"
]
},
"metadata": {
"tags": []
},
"execution_count": 59
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "As1oX8F_N0iU",
"outputId": "322a84be-0fc5-4add-8738-36dbf6399b69",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"fs=f1_score(y_pred,y_test)\n",
"fs"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.9561952440550688"
]
},
"metadata": {
"tags": []
},
"execution_count": 60
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "ABzYbxRXPQ7g",
"outputId": "82c502ac-92f6-4a81-a8fc-2ea7c3364e94",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
}
},
"source": [
"plt.plot(H.history['accuracy'])\n",
"plt.plot(H.history['val_accuracy'])\n",
"plt.title('model accuracy')\n",
"plt.ylabel('accuracy')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'validation'], loc='upper left')\n",
"plt.show()"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "BrNWSebnPX-a",
"outputId": "7e75aee4-7e3a-489e-8c25-821e20c90666",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
}
},
"source": [
"plt.plot(H.history['loss'])\n",
"plt.plot(H.history['val_loss'])\n",
"plt.title('model accuracy')\n",
"plt.ylabel('loss')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'validation'], loc='upper left')\n",
"plt.show()"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "p0-QIHqZOvKR"
},
"source": [
"We have seen without initialization of image net weights , let us see how it works for initialization of image net weights. VGG 16 with Transfer learning but keeping all layers trainable"
]
},
{
"cell_type": "code",
"metadata": {
"id": "zfQGsguYPlR2"
},
"source": [
"base_model = keras.applications.VGG16(\n",
" weights='imagenet', # Load weights pre-trained on ImageNet.\n",
" input_shape=(100, 100, 3),\n",
" include_top=False) # Do not include the ImageNet classifier at the top."
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "8l_vy4vsQ2Ct"
},
"source": [],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "PIFq2reYP3oZ"
},
"source": [
"opt = SGD(lr=0.001, momentum=0.9)\n",
"model.compile(optimizer=opt, loss='binary_crossentropy', metrics=['accuracy'])"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "zrkh8380QD6o"
},
"source": [
"filepath=\"/content/chest_xray/weights-improvement1-{epoch:02d}-{accuracy:.2f}.hdf5\"\n",
"checkpoint = ModelCheckpoint(filepath, monitor='accuracy', verbose=1, save_best_only=True, mode='max')\n",
"callbacks_list = [checkpoint]"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "aHoCTrKbQ8lN"
},
"source": [
"model=keras.Sequential()\n",
"model.add(base_model)\n",
"model.add(Flatten())\n",
"model.add(Dense(2,activation='sigmoid'))"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "UtR1y44jQTcu",
"outputId": "261384bd-6de1-47b7-fc6c-52e4e480846e",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"H = model.fit(\n",
"\tx=aug.flow(x_train, Y_train, batch_size=32),\n",
"\tsteps_per_epoch=len(x_train)/32,\n",
"\tvalidation_data=(x_val,Y_val),\n",
"\tcallbacks=callbacks_list,\n",
"\tepochs=10)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Epoch 1/10\n",
" 2/163 [..............................] - ETA: 17s - loss: 0.6528 - accuracy: 0.7812WARNING:tensorflow:Callbacks method `on_train_batch_end` is slow compared to the batch time (batch time: 0.0472s vs `on_train_batch_end` time: 0.0789s). Check your callbacks.\n",
"163/163 [==============================] - ETA: 0s - loss: 0.2869 - accuracy: 0.8786\n",
"Epoch 00001: accuracy did not improve from 0.97469\n",
"163/163 [==============================] - 19s 118ms/step - loss: 0.2869 - accuracy: 0.8786 - val_loss: 1.1080 - val_accuracy: 0.6250\n",
"Epoch 2/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1578 - accuracy: 0.9387\n",
"Epoch 00002: accuracy did not improve from 0.97469\n",
"163/163 [==============================] - 19s 116ms/step - loss: 0.1578 - accuracy: 0.9387 - val_loss: 0.3363 - val_accuracy: 0.8125\n",
"Epoch 3/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1130 - accuracy: 0.9557\n",
"Epoch 00003: accuracy did not improve from 0.97469\n",
"163/163 [==============================] - 19s 114ms/step - loss: 0.1130 - accuracy: 0.9557 - val_loss: 0.2239 - val_accuracy: 0.9375\n",
"Epoch 4/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1082 - accuracy: 0.9605\n",
"Epoch 00004: accuracy did not improve from 0.97469\n",
"163/163 [==============================] - 19s 115ms/step - loss: 0.1082 - accuracy: 0.9605 - val_loss: 0.3420 - val_accuracy: 0.8125\n",
"Epoch 5/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0972 - accuracy: 0.9657\n",
"Epoch 00005: accuracy did not improve from 0.97469\n",
"163/163 [==============================] - 19s 118ms/step - loss: 0.0972 - accuracy: 0.9657 - val_loss: 0.2043 - val_accuracy: 0.9375\n",
"Epoch 6/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0953 - accuracy: 0.9670\n",
"Epoch 00006: accuracy did not improve from 0.97469\n",
"163/163 [==============================] - 19s 118ms/step - loss: 0.0953 - accuracy: 0.9670 - val_loss: 0.1674 - val_accuracy: 0.9375\n",
"Epoch 7/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0846 - accuracy: 0.9705\n",
"Epoch 00007: accuracy did not improve from 0.97469\n",
"163/163 [==============================] - 19s 118ms/step - loss: 0.0846 - accuracy: 0.9705 - val_loss: 0.2988 - val_accuracy: 0.8125\n",
"Epoch 8/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0826 - accuracy: 0.9684\n",
"Epoch 00008: accuracy did not improve from 0.97469\n",
"163/163 [==============================] - 19s 116ms/step - loss: 0.0826 - accuracy: 0.9684 - val_loss: 0.0691 - val_accuracy: 1.0000\n",
"Epoch 9/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0831 - accuracy: 0.9688\n",
"Epoch 00009: accuracy did not improve from 0.97469\n",
"163/163 [==============================] - 19s 116ms/step - loss: 0.0831 - accuracy: 0.9688 - val_loss: 0.2335 - val_accuracy: 0.9375\n",
"Epoch 10/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0721 - accuracy: 0.9730\n",
"Epoch 00010: accuracy did not improve from 0.97469\n",
"163/163 [==============================] - 19s 116ms/step - loss: 0.0721 - accuracy: 0.9730 - val_loss: 0.4607 - val_accuracy: 0.7500\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "7yH9qksmSArG"
},
"source": [
"y_pred=model.predict_classes(x_test)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "-HFzU8RgSWor",
"outputId": "ea580217-d076-466b-a799-672c0e94338b",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"accuracy_score(y_pred,y_test) #clearly transfer learnign is not giving good results"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.8397435897435898"
]
},
"metadata": {
"tags": []
},
"execution_count": 72
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "-kAys6sRSgJH",
"outputId": "c2dd31cc-396d-44ae-c159-6fb92a7c5035",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"confusion_matrix(y_pred,y_test)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[135, 1],\n",
" [ 99, 389]])"
]
},
"metadata": {
"tags": []
},
"execution_count": 73
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "s0aowzP0Su89",
"outputId": "0a64fd52-99cd-4e27-8754-1f23d55f1277",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"f1_score(y_pred,y_test)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.8861047835990887"
]
},
"metadata": {
"tags": []
},
"execution_count": 75
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "xJ4RaO-VS28g",
"outputId": "548ffae6-8d29-4d5e-bba3-f5f2aadbd1fc",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
}
},
"source": [
"plt.plot(H.history['accuracy'])\n",
"plt.plot(H.history['val_accuracy'])\n",
"plt.title('model accuracy')\n",
"plt.ylabel('accuracy')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'validation'], loc='upper left')\n",
"plt.show()"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "k2t366LGTL-G",
"outputId": "d2582a27-232b-4763-cebd-e3e0d0777028",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
}
},
"source": [
"plt.plot(H.history['loss'])\n",
"plt.plot(H.history['val_loss'])\n",
"plt.title('model accuracy')\n",
"plt.ylabel('loss')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'validation'], loc='upper left')\n",
"plt.show()"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "R4oSBbnWTh-j"
},
"source": [
"Since adding pretrained weights did not give a good result so , the remaining project will be done using without them"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "74kGljdZVyOl"
},
"source": [
"RESNET 50"
]
},
{
"cell_type": "code",
"metadata": {
"id": "O75sROoDUH-m"
},
"source": [
"del model"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "-07oiXpcTOkU",
"outputId": "03b11b9f-370b-485e-e575-df166456af47",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"base_model = keras.applications.ResNet50(\n",
" #weights='imagenet', # Load weights pre-trained on ImageNet.\n",
" input_shape=(100, 100, 3),\n",
" include_top=False) # Do not include the ImageNet classifier at the top."
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/resnet/resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5\n",
"94773248/94765736 [==============================] - 1s 0us/step\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "uxfLaggnUPY9"
},
"source": [
"model=keras.Sequential()\n",
"model.add(base_model)\n",
"model.add(Flatten())\n",
"model.add(Dense(2,activation='sigmoid'))"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "IxNBytZUUaWP"
},
"source": [
"opt = SGD(lr=0.001, momentum=0.9)\n",
"model.compile(optimizer=opt, loss='binary_crossentropy', metrics=['accuracy'])"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "gGfyJda1Uh8N"
},
"source": [
"filepath=\"/content/chest_xray/weights-improvementresnet50-{epoch:02d}-{accuracy:.2f}.hdf5\"\n",
"checkpoint = ModelCheckpoint(filepath, monitor='accuracy', verbose=1, save_best_only=True, mode='max')\n",
"callbacks_list = [checkpoint]"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "ncl1ob1WUpIW",
"outputId": "152669d4-3f29-4452-a090-0846a0e24396",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"H = model.fit(\n",
"\tx=aug.flow(x_train, Y_train, batch_size=32),\n",
"\tsteps_per_epoch=len(x_train)/32,\n",
"\tvalidation_data=(x_val,Y_val),\n",
"\tcallbacks=callbacks_list,\n",
"\tepochs=10)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Epoch 1/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.2701 - accuracy: 0.9160\n",
"Epoch 00001: accuracy improved from -inf to 0.91603, saving model to /content/chest_xray/weights-improvementresnet50-01-0.92.hdf5\n",
"163/163 [==============================] - 21s 129ms/step - loss: 0.2701 - accuracy: 0.9160 - val_loss: 0.9753 - val_accuracy: 0.5000\n",
"Epoch 2/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1614 - accuracy: 0.9454\n",
"Epoch 00002: accuracy improved from 0.91603 to 0.94536, saving model to /content/chest_xray/weights-improvementresnet50-02-0.95.hdf5\n",
"163/163 [==============================] - 20s 123ms/step - loss: 0.1614 - accuracy: 0.9454 - val_loss: 0.9523 - val_accuracy: 0.5000\n",
"Epoch 3/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1147 - accuracy: 0.9576\n",
"Epoch 00003: accuracy improved from 0.94536 to 0.95763, saving model to /content/chest_xray/weights-improvementresnet50-03-0.96.hdf5\n",
"163/163 [==============================] - 20s 122ms/step - loss: 0.1147 - accuracy: 0.9576 - val_loss: 2.2779 - val_accuracy: 0.5000\n",
"Epoch 4/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0933 - accuracy: 0.9684\n",
"Epoch 00004: accuracy improved from 0.95763 to 0.96837, saving model to /content/chest_xray/weights-improvementresnet50-04-0.97.hdf5\n",
"163/163 [==============================] - 20s 123ms/step - loss: 0.0933 - accuracy: 0.9684 - val_loss: 2.3330 - val_accuracy: 0.5000\n",
"Epoch 5/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0873 - accuracy: 0.9697\n",
"Epoch 00005: accuracy improved from 0.96837 to 0.96971, saving model to /content/chest_xray/weights-improvementresnet50-05-0.97.hdf5\n",
"163/163 [==============================] - 20s 123ms/step - loss: 0.0873 - accuracy: 0.9697 - val_loss: 5.2416 - val_accuracy: 0.5000\n",
"Epoch 6/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0800 - accuracy: 0.9720\n",
"Epoch 00006: accuracy improved from 0.96971 to 0.97201, saving model to /content/chest_xray/weights-improvementresnet50-06-0.97.hdf5\n",
"163/163 [==============================] - 20s 122ms/step - loss: 0.0800 - accuracy: 0.9720 - val_loss: 2.5072 - val_accuracy: 0.6250\n",
"Epoch 7/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0746 - accuracy: 0.9720\n",
"Epoch 00007: accuracy did not improve from 0.97201\n",
"163/163 [==============================] - 19s 117ms/step - loss: 0.0746 - accuracy: 0.9720 - val_loss: 0.3626 - val_accuracy: 0.8125\n",
"Epoch 8/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0698 - accuracy: 0.9757\n",
"Epoch 00008: accuracy improved from 0.97201 to 0.97565, saving model to /content/chest_xray/weights-improvementresnet50-08-0.98.hdf5\n",
"163/163 [==============================] - 20s 123ms/step - loss: 0.0698 - accuracy: 0.9757 - val_loss: 0.2281 - val_accuracy: 0.8750\n",
"Epoch 9/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0634 - accuracy: 0.9766\n",
"Epoch 00009: accuracy improved from 0.97565 to 0.97661, saving model to /content/chest_xray/weights-improvementresnet50-09-0.98.hdf5\n",
"163/163 [==============================] - 20s 123ms/step - loss: 0.0634 - accuracy: 0.9766 - val_loss: 0.6218 - val_accuracy: 0.6875\n",
"Epoch 10/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0580 - accuracy: 0.9797\n",
"Epoch 00010: accuracy improved from 0.97661 to 0.97968, saving model to /content/chest_xray/weights-improvementresnet50-10-0.98.hdf5\n",
"163/163 [==============================] - 20s 123ms/step - loss: 0.0580 - accuracy: 0.9797 - val_loss: 0.0971 - val_accuracy: 1.0000\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "qzINrGBRViix"
},
"source": [
"y_pred=model.predict_classes(x_test)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "OJMqDFXNVq6_",
"outputId": "ef5550bf-c1fe-4c06-bfbe-809b8b639db9",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"accuracy_score(y_pred,y_test)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.9358974358974359"
]
},
"metadata": {
"tags": []
},
"execution_count": 87
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "cfWDH1_IVvQ6",
"outputId": "c4eb31ac-8ae9-485a-f5a6-4168a5dbb79c",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"f1_score(y_pred,y_test)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.9496221662468515"
]
},
"metadata": {
"tags": []
},
"execution_count": 88
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "O0LdTuC8V4oi",
"outputId": "8023fbcf-7463-4376-c055-696260e852b2",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"confusion_matrix(y_pred,y_test)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[207, 13],\n",
" [ 27, 377]])"
]
},
"metadata": {
"tags": []
},
"execution_count": 89
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "IRE3oOF3WEUD",
"outputId": "e51e8d18-34e9-4013-f00a-ab6f313b7d8e",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
}
},
"source": [
"plt.plot(H.history['accuracy'])\n",
"plt.plot(H.history['val_accuracy'])\n",
"plt.title('model accuracy')\n",
"plt.ylabel('accuracy')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'validation'], loc='upper left')\n",
"plt.show()"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "v0JDoMQ6WGsw",
"outputId": "0ad63bd6-25de-44ed-ae30-1f0b87918fd9",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
}
},
"source": [
"plt.plot(H.history['loss'])\n",
"plt.plot(H.history['val_loss'])\n",
"plt.title('model accuracy')\n",
"plt.ylabel('loss')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'validation'], loc='upper left')\n",
"plt.show()"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "CYejGnvOWmzS"
},
"source": [
"Just for the sake of it we can try pretrained model with Dense net and see if we can get any good accurcy like 98 or 99 percent , so far VGG16 has obtained an accuracy of 95.6 percent, while transfer learnig in other cases has not given very good results"
]
},
{
"cell_type": "code",
"metadata": {
"id": "el64JL6yWQtm",
"outputId": "ced21934-6dca-4970-f2cd-eac158d33c8a",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"base_model = keras.applications.DenseNet121(\n",
" weights='imagenet', # Load weights pre-trained on ImageNet.\n",
" input_shape=(100, 100, 3),\n",
" include_top=False) # Do not include the ImageNet classifier at the top."
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/densenet/densenet121_weights_tf_dim_ordering_tf_kernels_notop.h5\n",
"29089792/29084464 [==============================] - 0s 0us/step\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "9cZ_AmN2W4dD",
"outputId": "3bf6c951-1ed1-49e8-f1cb-99899887f9e0",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"model=keras.Sequential()\n",
"model.add(base_model)\n",
"model.add(Flatten())\n",
"model.add(Dense(2,activation='sigmoid'))\n",
"\n",
"opt = SGD(lr=0.001, momentum=0.9)\n",
"model.compile(optimizer=opt, loss='binary_crossentropy', metrics=['accuracy'])\n",
"\n",
"filepath=\"/content/chest_xray/weights-improvementdensenet121-{epoch:02d}-{accuracy:.2f}.hdf5\"\n",
"checkpoint = ModelCheckpoint(filepath, monitor='accuracy', verbose=1, save_best_only=True, mode='max')\n",
"callbacks_list = [checkpoint]\n",
"\n",
"H = model.fit(\n",
"\tx=aug.flow(x_train, Y_train, batch_size=32),\n",
"\tsteps_per_epoch=len(x_train)/32,\n",
"\tvalidation_data=(x_val,Y_val),\n",
"\tcallbacks=callbacks_list,\n",
"\tepochs=10)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Epoch 1/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.2472 - accuracy: 0.9093\n",
"Epoch 00001: accuracy improved from -inf to 0.90932, saving model to /content/chest_xray/weights-improvementdensenet121-01-0.91.hdf5\n",
"163/163 [==============================] - 20s 125ms/step - loss: 0.2472 - accuracy: 0.9093 - val_loss: 0.8205 - val_accuracy: 0.7500\n",
"Epoch 2/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1399 - accuracy: 0.9490\n",
"Epoch 00002: accuracy improved from 0.90932 to 0.94900, saving model to /content/chest_xray/weights-improvementdensenet121-02-0.95.hdf5\n",
"163/163 [==============================] - 18s 112ms/step - loss: 0.1399 - accuracy: 0.9490 - val_loss: 2.0207 - val_accuracy: 0.5625\n",
"Epoch 3/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1136 - accuracy: 0.9618\n",
"Epoch 00003: accuracy improved from 0.94900 to 0.96185, saving model to /content/chest_xray/weights-improvementdensenet121-03-0.96.hdf5\n",
"163/163 [==============================] - 18s 113ms/step - loss: 0.1136 - accuracy: 0.9618 - val_loss: 1.4012 - val_accuracy: 0.6875\n",
"Epoch 4/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1111 - accuracy: 0.9592\n",
"Epoch 00004: accuracy did not improve from 0.96185\n",
"163/163 [==============================] - 18s 110ms/step - loss: 0.1111 - accuracy: 0.9592 - val_loss: 1.7357 - val_accuracy: 0.5625\n",
"Epoch 5/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0796 - accuracy: 0.9718\n",
"Epoch 00005: accuracy improved from 0.96185 to 0.97182, saving model to /content/chest_xray/weights-improvementdensenet121-05-0.97.hdf5\n",
"163/163 [==============================] - 19s 115ms/step - loss: 0.0796 - accuracy: 0.9718 - val_loss: 0.9453 - val_accuracy: 0.6250\n",
"Epoch 6/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0780 - accuracy: 0.9718\n",
"Epoch 00006: accuracy did not improve from 0.97182\n",
"163/163 [==============================] - 18s 110ms/step - loss: 0.0780 - accuracy: 0.9718 - val_loss: 0.1152 - val_accuracy: 1.0000\n",
"Epoch 7/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0676 - accuracy: 0.9757\n",
"Epoch 00007: accuracy improved from 0.97182 to 0.97565, saving model to /content/chest_xray/weights-improvementdensenet121-07-0.98.hdf5\n",
"163/163 [==============================] - 19s 118ms/step - loss: 0.0676 - accuracy: 0.9757 - val_loss: 0.6172 - val_accuracy: 0.6250\n",
"Epoch 8/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0698 - accuracy: 0.9749\n",
"Epoch 00008: accuracy did not improve from 0.97565\n",
"163/163 [==============================] - 18s 109ms/step - loss: 0.0698 - accuracy: 0.9749 - val_loss: 0.6224 - val_accuracy: 0.6875\n",
"Epoch 9/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0620 - accuracy: 0.9776\n",
"Epoch 00009: accuracy improved from 0.97565 to 0.97757, saving model to /content/chest_xray/weights-improvementdensenet121-09-0.98.hdf5\n",
"163/163 [==============================] - 19s 114ms/step - loss: 0.0620 - accuracy: 0.9776 - val_loss: 0.2760 - val_accuracy: 0.7500\n",
"Epoch 10/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.0565 - accuracy: 0.9812\n",
"Epoch 00010: accuracy improved from 0.97757 to 0.98121, saving model to /content/chest_xray/weights-improvementdensenet121-10-0.98.hdf5\n",
"163/163 [==============================] - 19s 115ms/step - loss: 0.0565 - accuracy: 0.9812 - val_loss: 0.6243 - val_accuracy: 0.7500\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "osdgQ2JBYLqY",
"outputId": "626a0355-7d3e-4ad0-d66c-e1ae528016b2",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"\n",
"y_pred=model.predict_classes(x_test)\n",
"\n",
"\n",
"print(accuracy_score(y_pred,y_test))\n",
"print(f1_score(y_pred,y_test))\n",
"print(confusion_matrix(y_pred,y_test))"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"0.8589743589743589\n",
"0.8986175115207373\n",
"[[146 0]\n",
" [ 88 390]]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "BpY6QbloY9aQ"
},
"source": [
"Clearly Transfer Learning is not giving good results , accuracy and other parameters includign confusion matrix is giving comparitively bad results to the independent non inisialized weights. Now let us try Xception. We make the first 100 layers non traianable and train onlly the last few layers"
]
},
{
"cell_type": "code",
"metadata": {
"id": "xu8Hav5GZSwa"
},
"source": [
"base_model = keras.applications.Xception(\n",
" weights='imagenet', # Load weights pre-trained on ImageNet.\n",
" input_shape=(100, 100, 3),\n",
" include_top=False) # Do not include the ImageNet classifier at the top."
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "tZyefb7idy7w"
},
"source": [
"for keras.layers in base_model.layers[:100]:\n",
" keras.layers.trainable=False"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "-EAWo9KReBHA"
},
"source": [
"from keras.optimizers import SGD\n",
"from keras.callbacks import ModelCheckpoint"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "Y4rbHIQMZAkI",
"outputId": "8d7a5af3-381e-43c5-f6a8-6861080e26d8",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"model=keras.Sequential()\n",
"model.add(base_model)\n",
"model.add(Flatten())\n",
"model.add(Dense(2,activation='sigmoid'))\n",
"\n",
"opt = SGD(lr=0.001, momentum=0.9)\n",
"model.compile(optimizer=opt, loss='binary_crossentropy', metrics=['accuracy'])\n",
"\n",
"filepath=\"/content/chest_xray/weights-improvementXcept-{epoch:02d}-{accuracy:.2f}.hdf5\"\n",
"checkpoint = ModelCheckpoint(filepath, monitor='accuracy', verbose=1, save_best_only=True, mode='max')\n",
"callbacks_list = [checkpoint]\n",
"\n",
"H = model.fit(\n",
"\tx=aug.flow(x_train, Y_train, batch_size=32),\n",
"\tsteps_per_epoch=len(x_train)/32,\n",
"\tvalidation_data=(x_val,Y_val),\n",
"\tcallbacks=callbacks_list,\n",
"\tepochs=10)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Epoch 1/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.3988 - accuracy: 0.7826\n",
"Epoch 00001: accuracy improved from -inf to 0.78259, saving model to /content/chest_xray/weights-improvementXcept-01-0.78.hdf5\n",
"163/163 [==============================] - 16s 97ms/step - loss: 0.3988 - accuracy: 0.7826 - val_loss: 0.7239 - val_accuracy: 0.5000\n",
"Epoch 2/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.2786 - accuracy: 0.8909\n",
"Epoch 00002: accuracy improved from 0.78259 to 0.89091, saving model to /content/chest_xray/weights-improvementXcept-02-0.89.hdf5\n",
"163/163 [==============================] - 15s 93ms/step - loss: 0.2786 - accuracy: 0.8909 - val_loss: 0.4132 - val_accuracy: 0.8750\n",
"Epoch 3/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.2275 - accuracy: 0.9218\n",
"Epoch 00003: accuracy improved from 0.89091 to 0.92178, saving model to /content/chest_xray/weights-improvementXcept-03-0.92.hdf5\n",
"163/163 [==============================] - 15s 93ms/step - loss: 0.2275 - accuracy: 0.9218 - val_loss: 0.2868 - val_accuracy: 0.8750\n",
"Epoch 4/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1911 - accuracy: 0.9350\n",
"Epoch 00004: accuracy improved from 0.92178 to 0.93501, saving model to /content/chest_xray/weights-improvementXcept-04-0.94.hdf5\n",
"163/163 [==============================] - 15s 94ms/step - loss: 0.1911 - accuracy: 0.9350 - val_loss: 0.3458 - val_accuracy: 0.8125\n",
"Epoch 5/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1624 - accuracy: 0.9425\n",
"Epoch 00005: accuracy improved from 0.93501 to 0.94248, saving model to /content/chest_xray/weights-improvementXcept-05-0.94.hdf5\n",
"163/163 [==============================] - 15s 94ms/step - loss: 0.1624 - accuracy: 0.9425 - val_loss: 0.2409 - val_accuracy: 0.8750\n",
"Epoch 6/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1498 - accuracy: 0.9469\n",
"Epoch 00006: accuracy improved from 0.94248 to 0.94689, saving model to /content/chest_xray/weights-improvementXcept-06-0.95.hdf5\n",
"163/163 [==============================] - 15s 94ms/step - loss: 0.1498 - accuracy: 0.9469 - val_loss: 0.2286 - val_accuracy: 0.8750\n",
"Epoch 7/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1420 - accuracy: 0.9490\n",
"Epoch 00007: accuracy improved from 0.94689 to 0.94900, saving model to /content/chest_xray/weights-improvementXcept-07-0.95.hdf5\n",
"163/163 [==============================] - 15s 94ms/step - loss: 0.1420 - accuracy: 0.9490 - val_loss: 0.2346 - val_accuracy: 0.8750\n",
"Epoch 8/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1304 - accuracy: 0.9540\n",
"Epoch 00008: accuracy improved from 0.94900 to 0.95399, saving model to /content/chest_xray/weights-improvementXcept-08-0.95.hdf5\n",
"163/163 [==============================] - 15s 94ms/step - loss: 0.1304 - accuracy: 0.9540 - val_loss: 0.2047 - val_accuracy: 0.8750\n",
"Epoch 9/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1239 - accuracy: 0.9528\n",
"Epoch 00009: accuracy did not improve from 0.95399\n",
"163/163 [==============================] - 15s 92ms/step - loss: 0.1239 - accuracy: 0.9528 - val_loss: 0.1462 - val_accuracy: 0.9375\n",
"Epoch 10/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1127 - accuracy: 0.9590\n",
"Epoch 00010: accuracy improved from 0.95399 to 0.95897, saving model to /content/chest_xray/weights-improvementXcept-10-0.96.hdf5\n",
"163/163 [==============================] - 15s 94ms/step - loss: 0.1127 - accuracy: 0.9590 - val_loss: 0.1451 - val_accuracy: 0.8750\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "2Bw2f71DdtmA"
},
"source": [
"In this case some layers have been made non trainable. This is giving some good results"
]
},
{
"cell_type": "code",
"metadata": {
"id": "bvID93svdsVV",
"outputId": "37121617-50eb-47bf-af21-d5787d44e086",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
}
},
"source": [
"plt.plot(H.history['accuracy'])\n",
"plt.plot(H.history['val_accuracy'])\n",
"plt.title('model accuracy')\n",
"plt.ylabel('accuracy')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'validation'], loc='upper left')\n",
"plt.show()"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "tKA9TwJVfOKy",
"outputId": "eab50885-e889-4fde-fedf-c734ca3b3f87",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
}
},
"source": [
"plt.plot(H.history['loss'])\n",
"plt.plot(H.history['val_loss'])\n",
"plt.title('model accuracy')\n",
"plt.ylabel('loss')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'validation'], loc='upper left')\n",
"plt.show()"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "bQcHeu25fa59"
},
"source": [
"from sklearn.metrics import accuracy_score,f1_score,confusion_matrix"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "kOI6S7znfSXj",
"outputId": "d336ed7e-de35-4da3-8e35-074cf1be97a5",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"y_pred=model.predict_classes(x_test)\n",
"\n",
"\n",
"print(accuracy_score(y_pred,y_test))\n",
"print(f1_score(y_pred,y_test))\n",
"print(confusion_matrix(y_pred,y_test))"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"0.9150641025641025\n",
"0.9336670838548187\n",
"[[198 17]\n",
" [ 36 373]]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "bu_9us9ffhNU"
},
"source": [
"This is a much greater improvement for transfer learning. Clearly making some of the top layers non trainable is making Xception net work better. At the same time it is clear that not all layers must be made non trainable"
]
},
{
"cell_type": "code",
"metadata": {
"id": "X7lBmhUWfq-8",
"outputId": "4cc3862b-fce6-4df8-94b2-a65068534e82",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"base_model = keras.applications.InceptionResNetV2(\n",
" weights='imagenet', # Load weights pre-trained on ImageNet.\n",
" input_shape=(100, 100, 3),\n",
" include_top=False) # Do not include the ImageNet classifier at the top."
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/inception_resnet_v2/inception_resnet_v2_weights_tf_dim_ordering_tf_kernels_notop.h5\n",
"219062272/219055592 [==============================] - 2s 0us/step\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "VihoUDJmgGcq"
},
"source": [
"count=0\n",
"for keras.layers in base_model.layers[:70]:\n",
" #count=count+1\n",
" keras.layers.trainable=False"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "_vvcSQUTg8vj"
},
"source": [
"Out of a total of 100 layers we are making 70 of them non trainable, This is typical of various sources indicating make only the last few layers trainable while using imagenet weights"
]
},
{
"cell_type": "code",
"metadata": {
"id": "4IsMoqPegMfv",
"outputId": "db4f306c-8cfc-41ac-ea51-4321acbae95a",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"model=keras.Sequential()\n",
"model.add(base_model)\n",
"model.add(Flatten())\n",
"model.add(Dense(2,activation='sigmoid'))\n",
"\n",
"opt = SGD(lr=0.001, momentum=0.9)\n",
"model.compile(optimizer=opt, loss='binary_crossentropy', metrics=['accuracy'])\n",
"\n",
"filepath=\"/content/chest_xray/weights-improvementXcept-{epoch:02d}-{accuracy:.2f}.hdf5\"\n",
"checkpoint = ModelCheckpoint(filepath, monitor='accuracy', verbose=1, save_best_only=True, mode='max')\n",
"callbacks_list = [checkpoint]\n",
"\n",
"H = model.fit(\n",
"\tx=aug.flow(x_train, Y_train, batch_size=32),\n",
"\tsteps_per_epoch=len(x_train)/32,\n",
"\tvalidation_data=(x_val,Y_val),\n",
"\tcallbacks=callbacks_list,\n",
"\tepochs=10)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Epoch 1/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.3800 - accuracy: 0.8326\n",
"Epoch 00001: accuracy improved from -inf to 0.83263, saving model to /content/chest_xray/weights-improvementXcept-01-0.83.hdf5\n",
"163/163 [==============================] - 26s 158ms/step - loss: 0.3800 - accuracy: 0.8326 - val_loss: 0.7029 - val_accuracy: 0.6250\n",
"Epoch 2/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1981 - accuracy: 0.9279\n",
"Epoch 00002: accuracy improved from 0.83263 to 0.92791, saving model to /content/chest_xray/weights-improvementXcept-02-0.93.hdf5\n",
"163/163 [==============================] - 22s 138ms/step - loss: 0.1981 - accuracy: 0.9279 - val_loss: 0.6201 - val_accuracy: 0.6250\n",
"Epoch 3/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1559 - accuracy: 0.9417\n",
"Epoch 00003: accuracy improved from 0.92791 to 0.94172, saving model to /content/chest_xray/weights-improvementXcept-03-0.94.hdf5\n",
"163/163 [==============================] - 22s 138ms/step - loss: 0.1559 - accuracy: 0.9417 - val_loss: 0.4632 - val_accuracy: 0.6250\n",
"Epoch 4/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1509 - accuracy: 0.9427\n",
"Epoch 00004: accuracy improved from 0.94172 to 0.94268, saving model to /content/chest_xray/weights-improvementXcept-04-0.94.hdf5\n",
"163/163 [==============================] - 23s 138ms/step - loss: 0.1509 - accuracy: 0.9427 - val_loss: 0.5727 - val_accuracy: 0.6875\n",
"Epoch 5/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1229 - accuracy: 0.9526\n",
"Epoch 00005: accuracy improved from 0.94268 to 0.95265, saving model to /content/chest_xray/weights-improvementXcept-05-0.95.hdf5\n",
"163/163 [==============================] - 23s 139ms/step - loss: 0.1229 - accuracy: 0.9526 - val_loss: 0.6259 - val_accuracy: 0.7500\n",
"Epoch 6/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1337 - accuracy: 0.9492\n",
"Epoch 00006: accuracy did not improve from 0.95265\n",
"163/163 [==============================] - 20s 124ms/step - loss: 0.1337 - accuracy: 0.9492 - val_loss: 0.5473 - val_accuracy: 0.7500\n",
"Epoch 7/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1195 - accuracy: 0.9565\n",
"Epoch 00007: accuracy improved from 0.95265 to 0.95648, saving model to /content/chest_xray/weights-improvementXcept-07-0.96.hdf5\n",
"163/163 [==============================] - 23s 139ms/step - loss: 0.1195 - accuracy: 0.9565 - val_loss: 0.6294 - val_accuracy: 0.6875\n",
"Epoch 8/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1071 - accuracy: 0.9624\n",
"Epoch 00008: accuracy improved from 0.95648 to 0.96242, saving model to /content/chest_xray/weights-improvementXcept-08-0.96.hdf5\n",
"163/163 [==============================] - 22s 138ms/step - loss: 0.1071 - accuracy: 0.9624 - val_loss: 0.4365 - val_accuracy: 0.8125\n",
"Epoch 9/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1043 - accuracy: 0.9607\n",
"Epoch 00009: accuracy did not improve from 0.96242\n",
"163/163 [==============================] - 20s 124ms/step - loss: 0.1043 - accuracy: 0.9607 - val_loss: 1.1898 - val_accuracy: 0.5625\n",
"Epoch 10/10\n",
"163/163 [==============================] - ETA: 0s - loss: 0.1011 - accuracy: 0.9622\n",
"Epoch 00010: accuracy did not improve from 0.96242\n",
"163/163 [==============================] - 20s 123ms/step - loss: 0.1011 - accuracy: 0.9622 - val_loss: 0.6019 - val_accuracy: 0.7500\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "E_ZU2RepgM5X",
"outputId": "489bc365-e7e8-4473-8a79-9bcef9f90e08",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
}
},
"source": [
"plt.plot(H.history['accuracy'])\n",
"plt.plot(H.history['val_accuracy'])\n",
"plt.title('model accuracy')\n",
"plt.ylabel('accuracy')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'validation'], loc='upper left')\n",
"plt.show()"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Hl6_qcgqhVeg",
"outputId": "d536957f-095a-4de2-b4f6-ccb71436d708",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
}
},
"source": [
"plt.plot(H.history['loss'])\n",
"plt.plot(H.history['val_loss'])\n",
"plt.title('model accuracy')\n",
"plt.ylabel('loss')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'validation'], loc='upper left')\n",
"plt.show()"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "LHf93qqPhdGC",
"outputId": "0c4b7ab3-ca5a-4277-88c4-150f840a3c7a",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"y_pred=model.predict_classes(x_test)\n",
"\n",
"\n",
"print(accuracy_score(y_pred,y_test))\n",
"print(f1_score(y_pred,y_test))\n",
"print(confusion_matrix(y_pred,y_test))"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"0.9294871794871795\n",
"0.945679012345679\n",
"[[197 7]\n",
" [ 37 383]]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wSszta_BbX4e"
},
"source": [
"In this report, one can see that the VGG 16 architecture performs well by making all the layers not trainable giving the maximum accuracy, while image net weights are not used. But one can see that InsceptionV2Resnet gives a very slow training and will work better with more epochs possibly. This has been done with preloading imagenet weights making all the top layers as non trainable , inceptionV2Resnet a hybrid architecture gives good result but overall VGG 16 without any pretarined weights emerges as the most successful architecture. So Transfer learning musts be sparingly used."
]
},
{
"cell_type": "code",
"metadata": {
"id": "eu_Bk7SPXnMY"
},
"source": [],
"execution_count": null,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment