{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# **I used this [dataset](https://www.kaggle.com/givkashi/siim-covid19-dataset)**","metadata":{}},{"cell_type":"markdown","source":"# **feel free to upvote this kernel**","metadata":{}},{"cell_type":"code","source":"import os\nimport shutil\nimport cv2\nimport pandas as pd\nimport tensorflow as tf\nfrom tensorflow.keras.applications import EfficientNetB0\nfrom sklearn.preprocessing import OneHotEncoder\nfrom sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay\nfrom sklearn.model_selection import train_test_split\nimport yaml\n\nfrom kaggle_secrets import UserSecretsClient\nimport cv2\nimport pydicom\n\nfrom pathlib import Path\nfrom tqdm.auto import tqdm\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport skimage.io\nimport tqdm\nimport glob\nimport tensorflow \n\nfrom tqdm import tqdm\nfrom sklearn.utils import shuffle\nfrom sklearn.model_selection import train_test_split\nfrom tensorflow.keras.metrics import Recall,Precision\nfrom skimage.io import imread, imshow\nfrom skimage.transform import resize\nfrom skimage.color import grey2rgb\n\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import InputLayer, BatchNormalization, Dropout, Flatten, Dense, Activation, MaxPool2D, Conv2D\nfrom tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint\nfrom tensorflow.keras.applications.vgg19 import VGG19\nfrom tensorflow.keras.preprocessing.image import load_img, img_to_array","metadata":{"papermill":{"duration":5.954312,"end_time":"2021-07-24T12:01:50.924586","exception":false,"start_time":"2021-07-24T12:01:44.970274","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-10-01T14:55:27.768204Z","iopub.execute_input":"2021-10-01T14:55:27.768477Z","iopub.status.idle":"2021-10-01T14:55:27.780466Z","shell.execute_reply.started":"2021-10-01T14:55:27.768449Z","shell.execute_reply":"2021-10-01T14:55:27.779722Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"datagen_kwargs = dict(validation_split=.20\n                     )\ndataflow_kwargs = dict(target_size=(224, 224),\n                       batch_size=128,\n                       interpolation=\"lanczos\"\n                      )\n\nvalid_datagen = tf.keras.preprocessing.image.ImageDataGenerator(**datagen_kwargs)\nvalid_generator = valid_datagen.flow_from_directory('../input/siim-covid19-dataset/temp/train',\n                                                    subset=\"validation\",\n                                                    shuffle=False,\n                                                    **dataflow_kwargs)\n\ntrain_datagen = tf.keras.preprocessing.image.ImageDataGenerator(\n    rotation_range=40,\n    horizontal_flip=True,\n    width_shift_range=0.2,\n    height_shift_range=0.2,\n    shear_range=0.2,\n    zoom_range=0.2,\n    **datagen_kwargs)\ntrain_generator = train_datagen.flow_from_directory('../input/siim-covid19-dataset/temp/train',\n                                                    subset=\"training\",\n                                                    shuffle=True,\n                                                    **dataflow_kwargs)\n\nprint('classes :', train_generator.class_indices)","metadata":{"papermill":{"duration":2.838979,"end_time":"2021-07-24T12:01:53.774846","exception":false,"start_time":"2021-07-24T12:01:50.935867","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-10-01T14:55:28.036769Z","iopub.execute_input":"2021-10-01T14:55:28.037306Z","iopub.status.idle":"2021-10-01T14:55:30.461444Z","shell.execute_reply.started":"2021-10-01T14:55:28.03727Z","shell.execute_reply":"2021-10-01T14:55:30.46066Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Model Initialization\n\nbase_model = EfficientNetB0(input_shape=(224,224,3), \n                         include_top=False,\n                         weights=\"imagenet\")","metadata":{"papermill":{"duration":5.529554,"end_time":"2021-07-24T12:01:59.31641","exception":false,"start_time":"2021-07-24T12:01:53.786856","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-10-01T14:55:30.462912Z","iopub.execute_input":"2021-10-01T14:55:30.463605Z","iopub.status.idle":"2021-10-01T14:55:34.326604Z","shell.execute_reply.started":"2021-10-01T14:55:30.463566Z","shell.execute_reply":"2021-10-01T14:55:34.325877Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Freezing Layers\n\nfor layer in base_model.layers:\n    layer.trainable=False","metadata":{"papermill":{"duration":0.029791,"end_time":"2021-07-24T12:01:59.373673","exception":false,"start_time":"2021-07-24T12:01:59.343882","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-10-01T14:55:34.328141Z","iopub.execute_input":"2021-10-01T14:55:34.328427Z","iopub.status.idle":"2021-10-01T14:55:34.339964Z","shell.execute_reply.started":"2021-10-01T14:55:34.328392Z","shell.execute_reply":"2021-10-01T14:55:34.339283Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# model","metadata":{"papermill":{"duration":0.022371,"end_time":"2021-07-24T12:01:59.418677","exception":false,"start_time":"2021-07-24T12:01:59.396306","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# Building Model\nmodel=Sequential()\nmodel.add(base_model)\nmodel.add(Dropout(0.5))\nmodel.add(Flatten())\nmodel.add(BatchNormalization())\nmodel.add(Dense(2048,kernel_initializer='he_uniform'))\nmodel.add(BatchNormalization())\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(1024,kernel_initializer='he_uniform'))\nmodel.add(BatchNormalization())\nmodel.add(Activation('relu'))\nmodel.add(Dense(512,kernel_initializer='he_uniform'))\nmodel.add(BatchNormalization())\nmodel.add(Activation('relu'))\nmodel.add(Dense(4,activation='sigmoid'))","metadata":{"papermill":{"duration":0.239121,"end_time":"2021-07-24T12:01:59.681855","exception":false,"start_time":"2021-07-24T12:01:59.442734","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-10-01T14:55:34.34192Z","iopub.execute_input":"2021-10-01T14:55:34.342656Z","iopub.status.idle":"2021-10-01T14:55:34.989433Z","shell.execute_reply.started":"2021-10-01T14:55:34.342619Z","shell.execute_reply":"2021-10-01T14:55:34.988706Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Summary\n\nmodel.summary()","metadata":{"papermill":{"duration":0.043591,"end_time":"2021-07-24T12:01:59.74921","exception":false,"start_time":"2021-07-24T12:01:59.705619","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-10-01T14:55:34.99067Z","iopub.execute_input":"2021-10-01T14:55:34.990922Z","iopub.status.idle":"2021-10-01T14:55:35.017131Z","shell.execute_reply.started":"2021-10-01T14:55:34.990893Z","shell.execute_reply":"2021-10-01T14:55:35.015056Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.utils import plot_model\nfrom IPython.display import SVG, Image\nplot_model(model, to_file='model.png', show_shapes=True, show_layer_names=True)\nImage('model.png',width=400, height=200)","metadata":{"papermill":{"duration":0.523769,"end_time":"2021-07-24T12:02:00.298194","exception":false,"start_time":"2021-07-24T12:01:59.774425","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-10-01T14:55:35.018157Z","iopub.execute_input":"2021-10-01T14:55:35.018428Z","iopub.status.idle":"2021-10-01T14:55:35.897766Z","shell.execute_reply.started":"2021-10-01T14:55:35.018395Z","shell.execute_reply":"2021-10-01T14:55:35.894894Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Model Compile \n\nOPT    = tensorflow.keras.optimizers.Adam(lr=0.001)\n\nmodel.compile(loss='categorical_crossentropy',\n              metrics=['accuracy',Precision(),Recall()],\n              optimizer=OPT)","metadata":{"papermill":{"duration":0.051301,"end_time":"2021-07-24T12:02:00.368015","exception":false,"start_time":"2021-07-24T12:02:00.316714","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-10-01T14:55:35.898983Z","iopub.execute_input":"2021-10-01T14:55:35.899226Z","iopub.status.idle":"2021-10-01T14:55:35.930152Z","shell.execute_reply.started":"2021-10-01T14:55:35.899196Z","shell.execute_reply":"2021-10-01T14:55:35.929518Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Defining Callbacks\n\nfilepath = './best_weights.hdf5'\n\nearlystopping = EarlyStopping(monitor = 'val_accuracy', \n                              mode = 'max' , \n                              patience = 10,\n                              verbose = 1)\n\ncheckpoint    = ModelCheckpoint(filepath, \n                                monitor = 'val_accuracy', \n                                mode='max', \n                                save_best_only=True, \n                                verbose = 1)\n\n\ncallback_list = [earlystopping, checkpoint]","metadata":{"papermill":{"duration":0.02604,"end_time":"2021-07-24T12:02:00.413436","exception":false,"start_time":"2021-07-24T12:02:00.387396","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-10-01T14:55:35.931147Z","iopub.execute_input":"2021-10-01T14:55:35.931408Z","iopub.status.idle":"2021-10-01T14:55:35.938207Z","shell.execute_reply.started":"2021-10-01T14:55:35.931374Z","shell.execute_reply":"2021-10-01T14:55:35.937274Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_history=model.fit(train_generator,\n                        validation_data=valid_generator,\n                        epochs = 50,\n                        callbacks = callback_list,\n                        verbose = 1)","metadata":{"papermill":{"duration":3458.067815,"end_time":"2021-07-24T12:59:38.498744","exception":false,"start_time":"2021-07-24T12:02:00.430929","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-10-01T14:55:35.939826Z","iopub.execute_input":"2021-10-01T14:55:35.940416Z","iopub.status.idle":"2021-10-01T14:58:11.395212Z","shell.execute_reply.started":"2021-10-01T14:55:35.940296Z","shell.execute_reply":"2021-10-01T14:58:11.39447Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(model_history.history['accuracy'])\nplt.plot(model_history.history['val_accuracy'])\nplt.title('model accuracy')\nplt.ylabel('accuracy')\nplt.xlabel('epoch')\nplt.legend(['train', 'test'], loc='lower right')\nplt.show()\n\nplt.plot(model_history.history['loss'])\nplt.plot(model_history.history['val_loss'])\nplt.title('train set loss')\n\nplt.ylabel('loss')\nplt.xlabel('epoch')\nplt.legend(['train', 'test'], loc='upper right')\nplt.show()\n\nplt.plot(model_history.history['precision'])\nplt.plot(model_history.history['val_precision'])\nplt.title(' precision')\nplt.ylabel('precision')\nplt.xlabel('epoch')\nplt.legend(['train', 'test'], loc='upper right')\nplt.show()\n\n\nplt.plot(model_history.history['recall'])\nplt.plot(model_history.history['val_recall'])\nplt.title(' recall')\nplt.ylabel('recall')\nplt.xlabel('epoch')\nplt.legend(['train', 'test'], loc='upper right')\nplt.show()\n","metadata":{"papermill":{"duration":1.23146,"end_time":"2021-07-24T12:59:43.350321","exception":false,"start_time":"2021-07-24T12:59:42.118861","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-10-01T14:58:37.740627Z","iopub.execute_input":"2021-10-01T14:58:37.740946Z","iopub.status.idle":"2021-10-01T14:58:38.519561Z","shell.execute_reply.started":"2021-10-01T14:58:37.740916Z","shell.execute_reply":"2021-10-01T14:58:38.518867Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"loss, accuracy , precision,recall=model.evaluate(valid_generator)\nprint(' Accuracy: %.3f' % accuracy)\nprint(' Precision: %.3f' % precision)\nprint(' Recall: %.3f' % recall)\nprint(' loss: %.3f' % loss)\n","metadata":{"papermill":{"duration":5.879818,"end_time":"2021-07-24T12:59:49.810486","exception":false,"start_time":"2021-07-24T12:59:43.930668","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-10-01T14:58:45.15411Z","iopub.execute_input":"2021-10-01T14:58:45.154401Z","iopub.status.idle":"2021-10-01T14:58:48.90086Z","shell.execute_reply.started":"2021-10-01T14:58:45.154372Z","shell.execute_reply":"2021-10-01T14:58:48.900124Z"},"trusted":true},"execution_count":null,"outputs":[]}]}