{ "cells": [ { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from keras.layers import Input, Lambda, Dense, Flatten\n", "from keras.models import Model\n", "from keras.applications.vgg16 import VGG16\n", "from keras.applications.vgg16 import preprocess_input\n", "from keras.preprocessing import image\n", "from keras.preprocessing.image import ImageDataGenerator\n", "from keras.models import Sequential\n", "import numpy as np\n", "from glob import glob\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "IMAGE_SIZE = [224, 224]\n", "\n", "train_path = 'chest_xray/train'\n", "valid_path = 'chest_xray/test'\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5\n", "58892288/58889256 [==============================] - 9s 0us/step\n" ] } ], "source": [ "vgg = VGG16(input_shape=IMAGE_SIZE + [3], weights='imagenet', include_top=False)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "for layer in vgg.layers:\n", " layer.trainable = False" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "folders = glob('chest_xray/train/*')" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "x = Flatten()(vgg.output)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "prediction = Dense(len(folders), activation='softmax')(x)\n", "\n", "model = Model(inputs=vgg.input, outputs=prediction)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"model_1\"\n", "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "input_1 (InputLayer) [(None, 224, 224, 3)] 0 \n", "_________________________________________________________________\n", "block1_conv1 (Conv2D) (None, 224, 224, 64) 1792 \n", "_________________________________________________________________\n", "block1_conv2 (Conv2D) (None, 224, 224, 64) 36928 \n", "_________________________________________________________________\n", "block1_pool (MaxPooling2D) (None, 112, 112, 64) 0 \n", "_________________________________________________________________\n", "block2_conv1 (Conv2D) (None, 112, 112, 128) 73856 \n", "_________________________________________________________________\n", "block2_conv2 (Conv2D) (None, 112, 112, 128) 147584 \n", "_________________________________________________________________\n", "block2_pool (MaxPooling2D) (None, 56, 56, 128) 0 \n", "_________________________________________________________________\n", "block3_conv1 (Conv2D) (None, 56, 56, 256) 295168 \n", "_________________________________________________________________\n", "block3_conv2 (Conv2D) (None, 56, 56, 256) 590080 \n", "_________________________________________________________________\n", "block3_conv3 (Conv2D) (None, 56, 56, 256) 590080 \n", "_________________________________________________________________\n", "block3_pool (MaxPooling2D) (None, 28, 28, 256) 0 \n", "_________________________________________________________________\n", "block4_conv1 (Conv2D) (None, 28, 28, 512) 1180160 \n", "_________________________________________________________________\n", "block4_conv2 (Conv2D) (None, 28, 28, 512) 2359808 \n", "_________________________________________________________________\n", "block4_conv3 (Conv2D) (None, 28, 28, 512) 2359808 \n", "_________________________________________________________________\n", "block4_pool (MaxPooling2D) (None, 14, 14, 512) 0 \n", "_________________________________________________________________\n", "block5_conv1 (Conv2D) (None, 14, 14, 512) 2359808 \n", "_________________________________________________________________\n", "block5_conv2 (Conv2D) (None, 14, 14, 512) 2359808 \n", "_________________________________________________________________\n", "block5_conv3 (Conv2D) (None, 14, 14, 512) 2359808 \n", "_________________________________________________________________\n", "block5_pool (MaxPooling2D) (None, 7, 7, 512) 0 \n", "_________________________________________________________________\n", "flatten_1 (Flatten) (None, 25088) 0 \n", "_________________________________________________________________\n", "dense_1 (Dense) (None, 2) 50178 \n", "=================================================================\n", "Total params: 14,764,866\n", "Trainable params: 50,178\n", "Non-trainable params: 14,714,688\n", "_________________________________________________________________\n" ] } ], "source": [ "model.summary()" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "model.compile(\n", " loss='categorical_crossentropy',\n", " optimizer='adam',\n", " metrics=['accuracy']\n", ")\n" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "from keras.preprocessing.image import ImageDataGenerator\n", "\n", "train_datagen = ImageDataGenerator(rescale = 1./255,\n", " shear_range = 0.2,\n", " zoom_range = 0.2,\n", " horizontal_flip = True)\n", "\n", "test_datagen = ImageDataGenerator(rescale = 1./255)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 5216 images belonging to 2 classes.\n" ] } ], "source": [ "train= train_datagen.flow_from_directory('chest_xray/train',\n", " target_size = (224, 224),\n", " batch_size = 32,\n", " class_mode = 'categorical')" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 624 images belonging to 2 classes.\n" ] } ], "source": [ "test = test_datagen.flow_from_directory('chest_xray/test',\n", " target_size = (224, 224),\n", " batch_size = 32,\n", " class_mode = 'categorical')" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/5\n", "163/163 [==============================] - 1738s 11s/step - loss: 0.1352 - accuracy: 0.9515 - val_loss: 0.3047 - val_accuracy: 0.9071\n", "Epoch 2/5\n", "163/163 [==============================] - 1584s 10s/step - loss: 0.1006 - accuracy: 0.9609 - val_loss: 0.3198 - val_accuracy: 0.9054\n", "Epoch 3/5\n", "163/163 [==============================] - 1684s 10s/step - loss: 0.0982 - accuracy: 0.9613 - val_loss: 0.2883 - val_accuracy: 0.9135\n", "Epoch 4/5\n", "163/163 [==============================] - 1811s 11s/step - loss: 0.0753 - accuracy: 0.9724 - val_loss: 0.3813 - val_accuracy: 0.8990\n", "Epoch 5/5\n", "163/163 [==============================] - 1855s 11s/step - loss: 0.0771 - accuracy: 0.9714 - val_loss: 0.3549 - val_accuracy: 0.8990\n" ] } ], "source": [ "r = model.fit_generator(\n", " train,\n", " validation_data=test,\n", " epochs=5,\n", " steps_per_epoch=len(training_set),\n", " validation_steps=len(test_set)\n", ")" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(r.history['loss'], label='train loss')\n", "plt.plot(r.history['val_loss'], label='val loss')\n", "plt.legend()\n", "plt.show()\n", "plt.savefig('LossVal_loss')" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "import tensorflow as tf\n", "\n", "from keras.models import load_model\n", "\n", "model.save('pneumonia_model.h5')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "from keras.models import load_model\n", "from keras.preprocessing import image\n", "from keras.applications.vgg16 import preprocess_input\n", "import numpy as np\n", "model=load_model('pneumonia_model.h5')" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "img=image.load_img('./chest_xray/train/PNEUMONIA/person2_bacteria_4.jpeg',target_size=(224,224))\n", "x=image.img_to_array(img)\n", "x=np.expand_dims(x,axis=0)\n", "img_data=preprocess_input(x)\n", "classes=model.predict(img_data)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "int(classes[0][1])" ] }, { "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.0" } }, "nbformat": 4, "nbformat_minor": 2 }