├── .gitignore ├── README.md ├── Skin Cancer - EDA.ipynb ├── Skin Cancer Prediction Baseline.ipynb ├── Skin Cancer Prediction DenseNet121.ipynb ├── Skin Cancer Prediction EfficientNetB4.ipynb ├── Skin Cancer Prediction GradCam Visualization.ipynb ├── Skin Cancer Prediction InceptionResNetV2.ipynb ├── Skin Cancer Prediction ResNet50.ipynb ├── Skin Cancer Prediction VGG16.ipynb └── docs ├── model_architecture.png └── results.png /.gitignore: -------------------------------------------------------------------------------- 1 | .ipynb_checkpoints -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |

Skin Cancer Classification using Transfer Learning
4 |

5 | 6 | 7 | [![Springer CCIS](https://img.shields.io/badge/SpringerCCIS-ICCR-eb7e1f.svg?logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyOCAyNCI+DQogICAgPHBhdGgNCiAgICAgICAgZD0iTTIzLjY1MSAyMy4wMmgtMTkuMzgxdi0xLjE5MWgxLjY0M2MuMjg3LTMuODYgMy45ODItNS4zIDYuMDM2LTguNDE3aC0yLjM4MWMtMS4xNS40MTEtMi44NzUgMi45NTYtMi44NzUgNC40MzRoLTNsLjA0MS0xLjIzMi0uOTg2LjgyMS0yLjYyNS0zLjAzNWEuNjMyLjYzMiAwIDAgMS0uMTIzLS4yOS41MDYuNTA2IDAgMCAxIC4wNDEtLjIxbDQuMTQ3LTUuNjIxLjczOS0yLjIxNyAxLjEwOS0uNDEgMS4xNS0xLjYtLjQxMS0yLjc5NWEyLjYyMSAyLjYyMSAwIDAgMSAyLjcxLjQ5MiAxNC4zMiAxNC4zMiAwIDAgMC0uMDQxLTEuNzI0IDIuNDg1IDIuNDg1IDAgMCAxIDMgMi4wNTMgMTMuOTgyIDEzLjk4MiAwIDAgMSAxLjQ3OC4yMDYuNjY5LjY2OSAwIDAgMSAuNjE2LS40NTIuNi42IDAgMCAxIC42MTYuNjE2di4xNjRhMTEuODkxIDExLjg5MSAwIDAgMSAyLjQyMyAxLjE1LjU4NS41ODUgMCAwIDEgLjQ5Mi0uMjQ3LjYuNiAwIDAgMSAuNjE2LjYxNi41MDUuNTA1IDAgMCAxLS4xMjMuMzcgMTAuNTY5IDEwLjU2OSAwIDAgMSAxLjgwNyAyLjAxMi43Ni43NiAwIDAgMSAuMjg3LS4wODIuNjQxLjY0MSAwIDAgMSAuNjU3LjYxNi41NS41NSAwIDAgMS0uMzI4LjUzNCAxMS40NzQgMTEuNDc0IDAgMCAxIC45ODIgMi40MTkuMjQ2LjI0NiAwIDAgMSAuMTY0LS4wNDEuNi42IDAgMCAxIC42MTYuNjE2LjU5My41OTMgMCAwIDEtLjQ1MS42MTZjLjE2NC44NjIuMjg3IDEuNzI1LjM2OSAyLjYyOGEuNjQxLjY0MSAwIDAgMSAuNjU3LjYxNi42Ny42NyAwIDAgMS0uNjE2LjY1N2MwIC44NjItLjA0MSAxLjgwNy0uMTIzIDIuNzFhLjY2NC42NjQgMCAwIDEgLjU3NS42NTcuNjQuNjQgMCAwIDEtLjY1Ny42MTZoLS4wNDFjLS4xNjQuOS0uMzI4IDEuODA2LS41MzQgMi43NTFoMS43MjV2MS4xOTR6bS0yLjk1Ny0xLjE1YzIuMzgyLTkuODE0LS40MTEtMTcuNjE1LTguMDA3LTE4LjUxOWExMC4wNDMgMTAuMDQzIDAgMCAxIC4wNDEgMS4wNjhjMCAuNDkzLS4wNDEuOS0uMDQxLjlsLTEuMTg3LS4yMDNjLjA0MS0uNDExLjEyMy0zLjItLjg2My0zLjgxOGExNS41MjMgMTUuNTIzIDAgMCAxLS4zMjggMi45NTZsLTEuMTA5LS4yMDRhMS42NiAxLjY2IDAgMCAwLTEuMDY5LTEuNzI1bC4yODcgMi4wMTItLjcgMS4wMjcuMzMuOTQ0LTIuMTc2LjczOS0uNjE2IDEuNzY2LTMuODE5IDUuMjU2IDEuNDM4IDEuNzI0IDEuNi0xLjM1NS4zNjkuMjQ2djIuMDE2aC44NjNhOC4wNjkgOC4wNjkgMCAwIDEgMi42NjktMy45NDJsLS42MTYtLjc0My45LS43OC44NjUgMS4wNjVzMy4wOCAwIDMuMDgtLjA0MWE4LjUgOC41IDAgMCAwIC43MzktMy41NzJoMS4xOTFjMCA0LjY4MS0yLjM0IDYuNTI5LTUuMjU2IDkuNGE2LjA5IDYuMDkgMCAwIDAtMi4xMzUgMy43ODNoMTMuNTV6bS0xNy4xMjEtOS4wN2EzLjE3MiAzLjE3MiAwIDAgMS0uMzI5IDEuNzY2bC0uODYyLS4zMjlhMi43MjIgMi43MjIgMCAwIDAgLjQ1Mi0xLjQ3OHptNC43MjEtNC41NjJsLTEuODQ3Ljk4NS0uMTI0LTEuNTIzIDEuOTMtLjJ6Ig0KICAgICAgICBmaWxsPSIjZmZmZmZmIiAvPg0KPC9zdmc+)](https://doi.org/10.1007/978-3-031-22405-8_27) 11 | ![GitHub stars](https://img.shields.io/github/stars/Defcon27/Skin-Cancer-Classification-using-Transfer-Learning?label=Stars&color=green&logo=github&style=flat) 12 | 17 |
18 | 19 | 20 | ### 📌 Introduction 21 |

22 | According to the Skin Cancer Foundation statistics, skin cancer is known to be the most common cancer in the United States and worldwide. By the age of seventy years, about twenty percent of Americans will have developed skin cancer due to exposure to radiation. Of all the types of skin cancers, melanoma is particularly deadly and responsible for most skin cancer deaths. Therefore, early detection is the key to survival. An automatic skin lesion diagnosis system can assist dermatologists since its challenging to differentiate between the different classes of skin lesions. In this paper, we propose a transfer learning based deep learning system using deep convolutional neural networks that leverage residual connections to perform the mentioned task with high accuracy. The HAM10000 dataset was utilized for training and testing the model and comparing its performance with other pre-trained models. This kind of automated classification system can be integrated into a computeraided diagnosis (CAD) system pipeline to assist in the early detection of skin cancer. 23 |

24 |


25 | 26 | 27 | ### 🗃️ Dataset 28 |

29 | A public dataset from the International Skin Imaging Collaboration (ISCI) archive was obtained for this work known as HAM10000. It is quite a large dataset that consists of 10015 samples of multi-source dermatoscopic images of common pigmented skin lesions.

30 | 31 | Get the data [here](https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/DBW86T) 32 |


33 | 34 | 35 | ## Modified Inception-ResNetV2 Model Architecture 36 |

37 |

38 | We modified the Inception-ResNetV2 architecture, which belongs to the inception family but improved with the help of residual connections instead of the conventional filter concatenation stage. It combines the two architectures of Inception and Residual networks to obtain more solid performance but at the same time keeping the computational costs relatively low. It consists of a stem block, three sets of residual inception block modules with [5,10,5] blocks of Inception-ResNetA, Inception-RetNetB, Inception-RetNetC modules, respectively, and subsequently pooling layer after each set of Inception-ResNet modules, all of which are connected sequentially. With a total of 164 layers, this deep convolutional network is capable of learning rich feature representation for broad categories of image data 39 |

40 |


41 | 42 | 43 | ## Conclusion 44 |

45 |

46 | In this paper, we have taken up the task of multi-class classification of skin lesions from dermatoscopic images in the HAM10000 dataset using deep convolutional neural networks, alleviating the need for complex feature engineering. We leveraged transfer learning by using pre-trained models and modified the Inception-ResNetV2 architecture to the required problem. The model achieved an accuracy of 90.08% with an F1-score of 89%, outperforming the rest. 47 |

48 |


49 | 50 | 51 | ### 📝 Citation 52 | If you found this code helpful please consider citing, 53 | ``` 54 | Kollipara, V.N.H., Kollipara, V.N.D.P. (2022). Residual Learning Based Approach for Multi-class Classification of Skin Lesion Using Deep Convolutional Neural Network. In: Guru, D.S., Y. H., S.K., K., B., Agrawal, R.K., Ichino, M. (eds) Cognition and Recognition. ICCR 2021. Communications in Computer and Information Science, vol 1697. Springer, Cham. https://doi.org/10.1007/978-3-031-22405-8_27 55 | ``` 56 | 57 | ### ⚖️ License 58 | Copyright © 2023 Hemanth Kollipara, Pavithra Kollipara 59 | -------------------------------------------------------------------------------- /Skin Cancer Prediction Baseline.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "6fa5a720", 6 | "metadata": {}, 7 | "source": [ 8 | "## Skin Cancer Classification baseline model" 9 | ] 10 | }, 11 | { 12 | "cell_type": "code", 13 | "execution_count": 1, 14 | "id": "fdf93ec8", 15 | "metadata": {}, 16 | "outputs": [], 17 | "source": [ 18 | "import os\n", 19 | "import shutil\n", 20 | "import numpy as np\n", 21 | "import pandas as pd\n", 22 | "import matplotlib.pyplot as plt\n", 23 | "import seaborn as sns\n", 24 | "import cv2\n", 25 | "import sklearn" 26 | ] 27 | }, 28 | { 29 | "cell_type": "markdown", 30 | "id": "79ab8ac8", 31 | "metadata": {}, 32 | "source": [ 33 | "### Loading Dataset" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 2, 39 | "id": "34c3ceb8", 40 | "metadata": {}, 41 | "outputs": [ 42 | { 43 | "name": "stdout", 44 | "output_type": "stream", 45 | "text": [ 46 | "['BKL', 'NV', 'AKIEC', 'MEL', 'DF', 'BCC', 'VASC']\n" 47 | ] 48 | } 49 | ], 50 | "source": [ 51 | "os.mkdir(\"HAM_Dataset\")\n", 52 | "base = \"HAM_Dataset\"\n", 53 | "\n", 54 | "os.mkdir(os.path.join(base, \"MEL\"))\n", 55 | "os.mkdir(os.path.join(base, \"NV\"))\n", 56 | "os.mkdir(os.path.join(base, \"BCC\"))\n", 57 | "os.mkdir(os.path.join(base, \"AKIEC\"))\n", 58 | "os.mkdir(os.path.join(base, \"BKL\"))\n", 59 | "os.mkdir(os.path.join(base, \"DF\"))\n", 60 | "os.mkdir(os.path.join(base, \"VASC\"))\n", 61 | "\n", 62 | "print(os.listdir(base))" 63 | ] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "execution_count": null, 68 | "id": "e754affa", 69 | "metadata": {}, 70 | "outputs": [], 71 | "source": [ 72 | "for image in os.listdir('ISIC2018_Task3_Training_Input'):\n", 73 | " if \"jpg\" not in image:\n", 74 | " os.remove('ISIC2018_Task3_Training_Input/'+image)\n", 75 | "\n", 76 | "for image in os.listdir('ISIC2018_Task3_Training_Input'):\n", 77 | " if \"jpg\" not in image:\n", 78 | " print(image)" 79 | ] 80 | }, 81 | { 82 | "cell_type": "code", 83 | "execution_count": null, 84 | "id": "b71a7814", 85 | "metadata": {}, 86 | "outputs": [], 87 | "source": [ 88 | "mapping = {0:\"MEL\", 1:\"NV\", 2:\"BCC\", 3:\"AKIEC\", 4:\"BKL\", 5:\"DF\", 6:\"VASC\"}\n", 89 | "\n", 90 | "df_labels = pd.read_csv(\"../input/isictruth/ISIC2018GroundTruth.csv\")\n", 91 | "for i in range(len(df_labels)):\n", 92 | " labels = df_labels.iloc[i,1:]\n", 93 | " df_labels.loc[i,\"label\"] = mapping[list(labels).index(1)]\n", 94 | "\n", 95 | "#df_labels[\"label\"]=df_labels[\"label\"].astype(int)\n", 96 | "df_labels.set_index('image', inplace=True)" 97 | ] 98 | }, 99 | { 100 | "cell_type": "code", 101 | "execution_count": 5, 102 | "id": "083c0229", 103 | "metadata": {}, 104 | "outputs": [ 105 | { 106 | "name": "stdout", 107 | "output_type": "stream", 108 | "text": [ 109 | "NV 6705\n", 110 | "MEL 1113\n", 111 | "BKL 1099\n", 112 | "BCC 514\n", 113 | "AKIEC 327\n", 114 | "VASC 142\n", 115 | "DF 115\n", 116 | "Name: label, dtype: int64\n" 117 | ] 118 | } 119 | ], 120 | "source": [ 121 | "df_labels['label'].value_counts()" 122 | ] 123 | }, 124 | { 125 | "cell_type": "markdown", 126 | "id": "fe973dfb", 127 | "metadata": {}, 128 | "source": [ 129 | "### Computing class weights" 130 | ] 131 | }, 132 | { 133 | "cell_type": "code", 134 | "execution_count": 10, 135 | "id": "da687f41", 136 | "metadata": {}, 137 | "outputs": [ 138 | { 139 | "name": "stdout", 140 | "output_type": "stream", 141 | "text": [ 142 | "{0: 4.375273044997815,\n", 143 | " 1: 2.78349082823791,\n", 144 | " 2: 1.301832835044846,\n", 145 | " 3: 12.440993788819876,\n", 146 | " 4: 1.2854575792581184,\n", 147 | " 5: 0.21338020666879728,\n", 148 | " 6: 10.075452716297788}\n" 149 | ] 150 | } 151 | ], 152 | "source": [ 153 | "from sklearn.utils import class_weight\n", 154 | "\n", 155 | "class_weights = class_weight.compute_class_weight('balanced',\n", 156 | " classes=['AKIEC', 'BCC', 'BKL', 'DF', 'MEL', 'NV', 'VASC'],\n", 157 | " y=df_labels[\"label\"])\n", 158 | "class_wt_dict=dict(enumerate(class_weights))\n", 159 | "class_wt_dict" 160 | ] 161 | }, 162 | { 163 | "cell_type": "code", 164 | "execution_count": 18, 165 | "id": "e6dc59ec", 166 | "metadata": {}, 167 | "outputs": [ 168 | { 169 | "name": "stdout", 170 | "output_type": "stream", 171 | "text": [ 172 | "\n", 173 | "100%|██████████| 10015/10015 [00:06<00:00, 1625.40it/s]\n", 174 | "\n" 175 | ] 176 | } 177 | ], 178 | "source": [ 179 | "from tqdm import tqdm\n", 180 | "\n", 181 | "images = os.listdir('ISIC2018_Task3_Training_Input')\n", 182 | "\n", 183 | "for image in tqdm(images):\n", 184 | " fname=image[:-4]\n", 185 | " label=df_labels.loc[fname, \"label\"]\n", 186 | " src = os.path.join('ISIC2018_Task3_Training_Input', image)\n", 187 | " dst = os.path.join('HAM_Dataset', label, image)\n", 188 | " shutil.copyfile(src, dst)" 189 | ] 190 | }, 191 | { 192 | "cell_type": "markdown", 193 | "id": "7db46759", 194 | "metadata": {}, 195 | "source": [ 196 | "### Data Augmentation" 197 | ] 198 | }, 199 | { 200 | "cell_type": "code", 201 | "execution_count": 11, 202 | "id": "fc89f32c", 203 | "metadata": {}, 204 | "outputs": [ 205 | { 206 | "name": "stdout", 207 | "output_type": "stream", 208 | "text": [ 209 | "Found 8516 images belonging to 7 classes.\n", 210 | " Found 1499 images belonging to 7 classes.\n", 211 | " {'AKIEC': 0, 'BCC': 1, 'BKL': 2, 'DF': 3, 'MEL': 4, 'NV': 5, 'VASC': 6}\n" 212 | ] 213 | } 214 | ], 215 | "source": [ 216 | "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n", 217 | "from tensorflow.keras.applications.resnet_v2 import preprocess_input as base_preprocess\n", 218 | "\n", 219 | "image_gen = ImageDataGenerator(rotation_range=30,\n", 220 | " width_shift_range=0.1,\n", 221 | " height_shift_range=0.1,\n", 222 | " shear_range=0.1,\n", 223 | " zoom_range=0.2,\n", 224 | " horizontal_flip=True,\n", 225 | " fill_mode='nearest',\n", 226 | " rescale=1/255,\n", 227 | " validation_split=0.15)\n", 228 | "\n", 229 | "data_dir = 'HAM_Dataset'\n", 230 | "batch_size = 128\n", 231 | "target_size = (224,224)\n", 232 | "train_image_gen = image_gen.flow_from_directory(data_dir, \n", 233 | " target_size=target_size,\n", 234 | " color_mode='rgb',\n", 235 | " batch_size=batch_size,\n", 236 | " class_mode='categorical',\n", 237 | " subset=\"training\")\n", 238 | "\n", 239 | "test_image_gen = image_gen.flow_from_directory(data_dir, \n", 240 | " target_size=target_size, \n", 241 | " color_mode='rgb',\n", 242 | " batch_size=batch_size,\n", 243 | " class_mode='categorical',\n", 244 | " shuffle=False,\n", 245 | " subset=\"validation\")\n", 246 | "\n", 247 | "print(test_image_gen.class_indices)" 248 | ] 249 | }, 250 | { 251 | "cell_type": "markdown", 252 | "id": "b9d19125", 253 | "metadata": {}, 254 | "source": [ 255 | "### Baseline CNN Model" 256 | ] 257 | }, 258 | { 259 | "cell_type": "code", 260 | "execution_count": 14, 261 | "id": "eb4948e5", 262 | "metadata": {}, 263 | "outputs": [ 264 | { 265 | "name": "stdout", 266 | "output_type": "stream", 267 | "text": [ 268 | "\n", 269 | "Model: \"sequential_3\"\n", 270 | "_________________________________________________________________\n", 271 | "Layer (type) Output Shape Param # \n", 272 | "=================================================================\n", 273 | "conv2d_12 (Conv2D) (None, 222, 222, 64) 1792 \n", 274 | "_________________________________________________________________\n", 275 | "max_pooling2d_12 (MaxPooling (None, 111, 111, 64) 0 \n", 276 | "_________________________________________________________________\n", 277 | "conv2d_13 (Conv2D) (None, 109, 109, 64) 36928 \n", 278 | "_________________________________________________________________\n", 279 | "max_pooling2d_13 (MaxPooling (None, 54, 54, 64) 0 \n", 280 | "_________________________________________________________________\n", 281 | "conv2d_14 (Conv2D) (None, 52, 52, 128) 73856 \n", 282 | "_________________________________________________________________\n", 283 | "max_pooling2d_14 (MaxPooling (None, 26, 26, 128) 0 \n", 284 | "_________________________________________________________________\n", 285 | "conv2d_15 (Conv2D) (None, 24, 24, 256) 295168 \n", 286 | "_________________________________________________________________\n", 287 | "max_pooling2d_15 (MaxPooling (None, 12, 12, 256) 0 \n", 288 | "_________________________________________________________________\n", 289 | "flatten_3 (Flatten) (None, 36864) 0 \n", 290 | "_________________________________________________________________\n", 291 | "dense_6 (Dense) (None, 128) 4718720 \n", 292 | "_________________________________________________________________\n", 293 | "dropout_3 (Dropout) (None, 128) 0 \n", 294 | "_________________________________________________________________\n", 295 | "dense_7 (Dense) (None, 7) 903 \n", 296 | "=================================================================\n", 297 | "Total params: 5,127,367\n", 298 | "Trainable params: 5,127,367\n", 299 | "Non-trainable params: 0\n", 300 | "_________________________________________________________________\n", 301 | "add Codeadd Markdown\n", 302 | "\n" 303 | ] 304 | } 305 | ], 306 | "source": [ 307 | "from tensorflow.keras.models import Sequential\n", 308 | "from tensorflow.keras.layers import Dense, Conv2D, MaxPool2D, Flatten, Dropout\n", 309 | "\n", 310 | "model = Sequential()\n", 311 | "\n", 312 | "model.add( Conv2D(filters=64, kernel_size=(3,3), input_shape=(224,224,3), activation=\"relu\") )\n", 313 | "model.add( MaxPool2D(pool_size=(2,2)) )\n", 314 | "\n", 315 | "model.add( Conv2D(filters=64, kernel_size=(3,3), activation=\"relu\") )\n", 316 | "model.add( MaxPool2D(pool_size=(2,2)) )\n", 317 | "\n", 318 | "model.add( Conv2D(filters=128, kernel_size=(3,3), activation=\"relu\") )\n", 319 | "model.add( MaxPool2D(pool_size=(2,2)) )\n", 320 | "\n", 321 | "model.add( Conv2D(filters=256, kernel_size=(3,3), activation=\"relu\") )\n", 322 | "model.add( MaxPool2D(pool_size=(2,2)) )\n", 323 | "\n", 324 | "model.add(Flatten())\n", 325 | "model.add(Dense(128, activation=\"relu\"))\n", 326 | "model.add(Dropout(0.5))\n", 327 | "\n", 328 | "model.add(Dense(7, activation=\"softmax\"))\n", 329 | "\n", 330 | "model.compile(loss=\"categorical_crossentropy\", optimizer=\"adam\", metrics=[\"accuracy\"])\n", 331 | "model.summary()" 332 | ] 333 | }, 334 | { 335 | "cell_type": "markdown", 336 | "id": "c62414f2", 337 | "metadata": {}, 338 | "source": [ 339 | "### Training and Validation" 340 | ] 341 | }, 342 | { 343 | "cell_type": "code", 344 | "execution_count": null, 345 | "id": "6b387e8b", 346 | "metadata": {}, 347 | "outputs": [], 348 | "source": [ 349 | "from tensorflow.keras.callbacks import ReduceLROnPlateau\n", 350 | "from tensorflow.keras.callbacks import EarlyStopping\n", 351 | "from tensorflow.keras.callbacks import ModelCheckpoint\n", 352 | "\n", 353 | "lr_reduce = ReduceLROnPlateau(monitor='val_accuracy', factor=0.5, patience=1,mode='max', min_lr=0.00001,verbose=1)\n", 354 | "early_stop = EarlyStopping(monitor=\"val_loss\", patience=2, verbose=1)\n", 355 | "model_chkpt = ModelCheckpoint('best_model_dn121.hdf5',save_best_only=True, monitor='val_accuracy',verbose=1)\n", 356 | "\n", 357 | "callback_list = [model_chkpt,lr_reduce]" 358 | ] 359 | }, 360 | { 361 | "cell_type": "code", 362 | "execution_count": 19, 363 | "id": "39ff5ca2", 364 | "metadata": {}, 365 | "outputs": [ 366 | { 367 | "name": "stdout", 368 | "output_type": "stream", 369 | "text": [ 370 | "\n", 371 | "Epoch 42/45\n", 372 | "67/67 [==============================] - 126s 2s/step - loss: 0.3013 - accuracy: 0.7550 - val_loss: 1.3435 - val_accuracy: 0.6758\n", 373 | "\n", 374 | "Epoch 00001: val_accuracy improved from 0.61107 to 0.67578, saving model to best_model_dn121.hdf5\n", 375 | "Epoch 43/45\n", 376 | "67/67 [==============================] - 124s 2s/step - loss: 0.2686 - accuracy: 0.7810 - val_loss: 1.5529 - val_accuracy: 0.6851\n", 377 | "\n", 378 | "Epoch 00002: val_accuracy improved from 0.67578 to 0.68512, saving model to best_model_dn121.hdf5\n", 379 | "Epoch 44/45\n", 380 | "67/67 [==============================] - 124s 2s/step - loss: 0.2371 - accuracy: 0.8033 - val_loss: 1.4009 - val_accuracy: 0.7111\n", 381 | "\n", 382 | "Epoch 00003: val_accuracy improved from 0.68512 to 0.71114, saving model to best_model_dn121.hdf5\n", 383 | "Epoch 45/45\n", 384 | "60/67 [=========================>....] - ETA: 11s - loss: 0.2297 - accuracy: 0.8042\n", 385 | "\n", 386 | "\n" 387 | ] 388 | } 389 | ], 390 | "source": [ 391 | "history = model.fit(train_image_gen,\n", 392 | " epochs=15, \n", 393 | " validation_data = test_image_gen,\n", 394 | " class_weight=class_wt_dict,\n", 395 | " callbacks=callback_list)" 396 | ] 397 | }, 398 | { 399 | "cell_type": "markdown", 400 | "id": "78865b82", 401 | "metadata": {}, 402 | "source": [ 403 | "### Model Evaluation" 404 | ] 405 | }, 406 | { 407 | "cell_type": "code", 408 | "execution_count": 16, 409 | "id": "336bcbf0", 410 | "metadata": {}, 411 | "outputs": [ 412 | { 413 | "name": "stdout", 414 | "output_type": "stream", 415 | "text": [ 416 | "\n", 417 | "array([[ 12, 16, 7, 1, 5, 8, 0],\n", 418 | " [ 2, 46, 6, 4, 9, 10, 0],\n", 419 | " [ 6, 23, 67, 2, 30, 34, 2],\n", 420 | " [ 3, 4, 2, 6, 1, 1, 0],\n", 421 | " [ 3, 4, 29, 0, 78, 51, 1],\n", 422 | " [ 8, 27, 44, 6, 78, 836, 6],\n", 423 | " [ 0, 3, 1, 0, 0, 2, 15]])\n", 424 | "\n" 425 | ] 426 | } 427 | ], 428 | "source": [ 429 | "import sklearn\n", 430 | "from sklearn.metrics import classification_report, confusion_matrix\n", 431 | "\n", 432 | "cm = confusion_matrix(test_labels, predictions)\n", 433 | "cm" 434 | ] 435 | }, 436 | { 437 | "cell_type": "code", 438 | "execution_count": 17, 439 | "id": "5c15da6a", 440 | "metadata": {}, 441 | "outputs": [ 442 | { 443 | "name": "stdout", 444 | "output_type": "stream", 445 | "text": [ 446 | "\n", 447 | "precision recall f1-score support\n", 448 | "\n", 449 | " 0 0.35 0.24 0.29 49\n", 450 | " 1 0.37 0.60 0.46 77\n", 451 | " 2 0.43 0.41 0.42 164\n", 452 | " 3 0.32 0.35 0.33 17\n", 453 | " 4 0.39 0.47 0.43 166\n", 454 | " 5 0.89 0.83 0.86 1005\n", 455 | " 6 0.62 0.71 0.67 21\n", 456 | "\n", 457 | " accuracy 0.71 1499\n", 458 | " macro avg 0.48 0.52 0.49 1499\n", 459 | "weighted avg 0.73 0.71 0.71 1499\n", 460 | "\n" 461 | ] 462 | } 463 | ], 464 | "source": [ 465 | "print(classification_report(test_labels, predictions))" 466 | ] 467 | }, 468 | { 469 | "cell_type": "code", 470 | "execution_count": null, 471 | "id": "ceef50c8", 472 | "metadata": {}, 473 | "outputs": [], 474 | "source": [] 475 | } 476 | ], 477 | "metadata": { 478 | "kernelspec": { 479 | "display_name": "Python 3", 480 | "language": "python", 481 | "name": "python3" 482 | }, 483 | "language_info": { 484 | "codemirror_mode": { 485 | "name": "ipython", 486 | "version": 3 487 | }, 488 | "file_extension": ".py", 489 | "mimetype": "text/x-python", 490 | "name": "python", 491 | "nbconvert_exporter": "python", 492 | "pygments_lexer": "ipython3", 493 | "version": "3.8.8" 494 | } 495 | }, 496 | "nbformat": 4, 497 | "nbformat_minor": 5 498 | } 499 | -------------------------------------------------------------------------------- /Skin Cancer Prediction DenseNet121.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Skin Cancer Classification Transfer Learning DenseNet121" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 2, 13 | "metadata": { 14 | "_cell_guid": "b1076dfc-b9ad-4769-8c92-a6c4dae69d19", 15 | "_uuid": "8f2839f25d086af736a60e9eeb907d3b93b6e0e5", 16 | "execution": { 17 | "iopub.execute_input": "2021-09-20T09:53:25.793096Z", 18 | "iopub.status.busy": "2021-09-20T09:53:25.792824Z", 19 | "iopub.status.idle": "2021-09-20T09:53:25.801106Z", 20 | "shell.execute_reply": "2021-09-20T09:53:25.800410Z", 21 | "shell.execute_reply.started": "2021-09-20T09:53:25.793067Z" 22 | } 23 | }, 24 | "outputs": [], 25 | "source": [ 26 | "import os\n", 27 | "import shutil\n", 28 | "from tqdm import tqdm\n", 29 | "\n", 30 | "import cv2\n", 31 | "import sklearn\n", 32 | "import numpy as np\n", 33 | "import pandas as pd\n", 34 | "import matplotlib.pyplot as plt\n", 35 | "import seaborn as sns\n", 36 | "plt.style.use(\"classic\")" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": {}, 42 | "source": [ 43 | "### Creating Dataset" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": 2, 49 | "metadata": { 50 | "execution": { 51 | "iopub.execute_input": "2021-09-20T05:53:07.683746Z", 52 | "iopub.status.busy": "2021-09-20T05:53:07.682980Z", 53 | "iopub.status.idle": "2021-09-20T05:53:07.709720Z", 54 | "shell.execute_reply": "2021-09-20T05:53:07.708962Z", 55 | "shell.execute_reply.started": "2021-09-20T05:53:07.683709Z" 56 | } 57 | }, 58 | "outputs": [ 59 | { 60 | "name": "stdout", 61 | "output_type": "stream", 62 | "text": [ 63 | "['MEL', 'VASC', 'DF', 'NV', 'BKL', 'AKIEC', 'BCC']\n" 64 | ] 65 | } 66 | ], 67 | "source": [ 68 | "print(os.listdir('../input/ham-dataset/HAM_Dataset'))" 69 | ] 70 | }, 71 | { 72 | "cell_type": "markdown", 73 | "metadata": {}, 74 | "source": [ 75 | "### Train Test Split" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": 77, 81 | "metadata": { 82 | "execution": { 83 | "iopub.execute_input": "2021-09-20T07:40:53.011177Z", 84 | "iopub.status.busy": "2021-09-20T07:40:53.010316Z", 85 | "iopub.status.idle": "2021-09-20T07:40:53.019292Z", 86 | "shell.execute_reply": "2021-09-20T07:40:53.018318Z", 87 | "shell.execute_reply.started": "2021-09-20T07:40:53.011131Z" 88 | } 89 | }, 90 | "outputs": [], 91 | "source": [ 92 | "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n", 93 | "from tensorflow.keras.applications.densenet import preprocess_input as base_preprocess\n", 94 | "\n", 95 | "\n", 96 | "image_gen = ImageDataGenerator(preprocessing_function=base_preprocess,\n", 97 | " rotation_range=20,\n", 98 | " width_shift_range=0.1,\n", 99 | " height_shift_range=0.1,\n", 100 | " shear_range=0.1,\n", 101 | " zoom_range=0.1,\n", 102 | " horizontal_flip=True,\n", 103 | " fill_mode='nearest',\n", 104 | " #rescale=1/255,\n", 105 | " validation_split=0.20)" 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": 78, 111 | "metadata": { 112 | "execution": { 113 | "iopub.execute_input": "2021-09-20T07:40:53.907860Z", 114 | "iopub.status.busy": "2021-09-20T07:40:53.907598Z", 115 | "iopub.status.idle": "2021-09-20T07:40:54.802207Z", 116 | "shell.execute_reply": "2021-09-20T07:40:54.801390Z", 117 | "shell.execute_reply.started": "2021-09-20T07:40:53.907829Z" 118 | } 119 | }, 120 | "outputs": [ 121 | { 122 | "name": "stdout", 123 | "output_type": "stream", 124 | "text": [ 125 | "Found 12085 images belonging to 7 classes.\n", 126 | "Found 3019 images belonging to 7 classes.\n", 127 | "{'AKIEC': 0, 'BCC': 1, 'BKL': 2, 'DF': 3, 'MEL': 4, 'NV': 5, 'VASC': 6}\n" 128 | ] 129 | } 130 | ], 131 | "source": [ 132 | "data_dir = '../input/ham-dataset/HAM_Dataset'\n", 133 | "batch_size = 64\n", 134 | "train_image_gen = image_gen.flow_from_directory(data_dir, \n", 135 | " target_size=(224,224), \n", 136 | " color_mode='rgb',\n", 137 | " batch_size=batch_size,\n", 138 | " class_mode='categorical',\n", 139 | " subset=\"training\")\n", 140 | "\n", 141 | "test_image_gen = image_gen.flow_from_directory(data_dir, \n", 142 | " target_size=(224,224), \n", 143 | " color_mode='rgb',\n", 144 | " batch_size=batch_size,\n", 145 | " class_mode='categorical',\n", 146 | " shuffle=False,\n", 147 | " subset=\"validation\")\n", 148 | "\n", 149 | "print(test_image_gen.class_indices)" 150 | ] 151 | }, 152 | { 153 | "cell_type": "code", 154 | "execution_count": 80, 155 | "metadata": { 156 | "execution": { 157 | "iopub.execute_input": "2021-09-20T07:40:55.225838Z", 158 | "iopub.status.busy": "2021-09-20T07:40:55.225619Z", 159 | "iopub.status.idle": "2021-09-20T07:40:56.697774Z", 160 | "shell.execute_reply": "2021-09-20T07:40:56.697080Z", 161 | "shell.execute_reply.started": "2021-09-20T07:40:55.225813Z" 162 | } 163 | }, 164 | "outputs": [ 165 | { 166 | "data": { 167 | "text/plain": [ 168 | "" 169 | ] 170 | }, 171 | "execution_count": 80, 172 | "metadata": {}, 173 | "output_type": "execute_result" 174 | }, 175 | { 176 | "data": { 177 | "image/png": "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\n", 178 | "text/plain": [ 179 | "
" 180 | ] 181 | }, 182 | "metadata": {}, 183 | "output_type": "display_data" 184 | } 185 | ], 186 | "source": [ 187 | "plt.figure(figsize=(3,3))\n", 188 | "plt.imshow(train_image_gen[0][0][0])" 189 | ] 190 | }, 191 | { 192 | "cell_type": "markdown", 193 | "metadata": {}, 194 | "source": [ 195 | "## Transfer Learning using DenseNet121 Model" 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": 1, 201 | "metadata": {}, 202 | "outputs": [ 203 | { 204 | "name": "stdout", 205 | "output_type": "stream", 206 | "text": [ 207 | "\n", 208 | "Model: \"model_12\"\n", 209 | "__________________________________________________________________________________________________\n", 210 | "Layer (type) Output Shape Param # Connected to \n", 211 | "==================================================================================================\n", 212 | "input_13 (InputLayer) [(None, 224, 224, 3) 0 \n", 213 | "__________________________________________________________________________________________________\n", 214 | "zero_padding2d_8 (ZeroPadding2D (None, 230, 230, 3) 0 input_13[0][0] \n", 215 | "__________________________________________________________________________________________________\n", 216 | "conv1/conv (Conv2D) (None, 112, 112, 64) 9408 zero_padding2d_8[0][0] \n", 217 | "__________________________________________________________________________________________________\n", 218 | "conv1/bn (BatchNormalization) (None, 112, 112, 64) 256 conv1/conv[0][0] \n", 219 | "__________________________________________________________________________________________________\n", 220 | "conv1/relu (Activation) (None, 112, 112, 64) 0 conv1/bn[0][0] \n", 221 | "__________________________________________________________________________________________________\n", 222 | "zero_padding2d_9 (ZeroPadding2D (None, 114, 114, 64) 0 conv1/relu[0][0] \n", 223 | "__________________________________________________________________________________________________\n", 224 | "pool1 (MaxPooling2D) (None, 56, 56, 64) 0 zero_padding2d_9[0][0] \n", 225 | "__________________________________________________________________________________________________\n", 226 | "conv2_block1_0_bn (BatchNormali (None, 56, 56, 64) 256 pool1[0][0] \n", 227 | "__________________________________________________________________________________________________\n", 228 | "conv2_block1_0_relu (Activation (None, 56, 56, 64) 0 conv2_block1_0_bn[0][0] \n", 229 | "__________________________________________________________________________________________________\n", 230 | "conv2_block1_1_conv (Conv2D) (None, 56, 56, 128) 8192 conv2_block1_0_relu[0][0] \n", 231 | "__________________________________________________________________________________________________\n", 232 | "conv2_block1_1_bn (BatchNormali (None, 56, 56, 128) 512 conv2_block1_1_conv[0][0] \n", 233 | "__________________________________________________________________________________________________\n", 234 | "conv2_block1_1_relu (Activation (None, 56, 56, 128) 0 conv2_block1_1_bn[0][0] \n", 235 | "__________________________________________________________________________________________________\n", 236 | "conv2_block1_2_conv (Conv2D) (None, 56, 56, 32) 36864 conv2_block1_1_relu[0][0] \n", 237 | "__________________________________________________________________________________________________\n", 238 | "conv2_block1_concat (Concatenat (None, 56, 56, 96) 0 pool1[0][0] \n", 239 | " conv2_block1_2_conv[0][0] \n", 240 | ".\n", 241 | ".\n", 242 | ".\n", 243 | ".\n", 244 | "\n", 245 | "__________________________________________________________________________________________________\n", 246 | "bn (BatchNormalization) (None, 7, 7, 1024) 4096 conv5_block16_concat[0][0] \n", 247 | "__________________________________________________________________________________________________\n", 248 | "relu (Activation) (None, 7, 7, 1024) 0 bn[0][0] \n", 249 | "__________________________________________________________________________________________________\n", 250 | "flatten_12 (Flatten) (None, 50176) 0 relu[0][0] \n", 251 | "__________________________________________________________________________________________________\n", 252 | "dense_24 (Dense) (None, 128) 6422656 flatten_12[0][0] \n", 253 | "__________________________________________________________________________________________________\n", 254 | "dropout_12 (Dropout) (None, 128) 0 dense_24[0][0] \n", 255 | "__________________________________________________________________________________________________\n", 256 | "dense_25 (Dense) (None, 7) 903 dropout_12[0][0] \n", 257 | "==================================================================================================\n", 258 | "Total params: 13,461,063\n", 259 | "Trainable params: 13,377,415\n", 260 | "Non-trainable params: 83,648\n", 261 | "__________________________________________________________________________________________________\n", 262 | "\n" 263 | ] 264 | } 265 | ], 266 | "source": [ 267 | "from tensorflow.keras.applications import *\n", 268 | "from tensorflow.keras.layers import Flatten, Dense, Input, Dropout\n", 269 | "from tensorflow.keras.models import Model\n", 270 | "from tensorflow.keras.optimizers import Adam\n", 271 | "\n", 272 | "base_model = DenseNet121(weights='imagenet', include_top=False, input_shape=(224, 224, 3))\n", 273 | "\n", 274 | "for layer in base_model.layers:\n", 275 | " layer.trainable = True\n", 276 | "\n", 277 | "x = base_model.output\n", 278 | "x = Flatten()(x)\n", 279 | "# x = Dense(4096, activation='relu')(x)\n", 280 | "# x = Dropout(0.5)(x)\n", 281 | "x = Dense(128, activation='relu')(x)\n", 282 | "x = Dropout(0.5)(x)\n", 283 | "x = Dense(7, activation='softmax')(x)\n", 284 | "tl_model = Model(inputs=base_model.input, outputs=x)\n", 285 | "\n", 286 | "\n", 287 | "tl_model.summary()\n", 288 | "optimizer = Adam(0.0001)\n", 289 | "tl_model.compile(loss=\"categorical_crossentropy\", optimizer=optimizer, metrics=[\"accuracy\"])" 290 | ] 291 | }, 292 | { 293 | "cell_type": "code", 294 | "execution_count": 84, 295 | "metadata": { 296 | "execution": { 297 | "iopub.execute_input": "2021-09-20T07:41:32.803559Z", 298 | "iopub.status.busy": "2021-09-20T07:41:32.802865Z", 299 | "iopub.status.idle": "2021-09-20T07:41:32.809583Z", 300 | "shell.execute_reply": "2021-09-20T07:41:32.808787Z", 301 | "shell.execute_reply.started": "2021-09-20T07:41:32.803522Z" 302 | } 303 | }, 304 | "outputs": [], 305 | "source": [ 306 | "from tensorflow.keras.callbacks import ReduceLROnPlateau\n", 307 | "from tensorflow.keras.callbacks import EarlyStopping\n", 308 | "from tensorflow.keras.callbacks import ModelCheckpoint\n", 309 | "\n", 310 | "lr_reduce = ReduceLROnPlateau(monitor='val_accuracy', factor=0.5, patience=2,mode='max', min_lr=0.00001,verbose=1)\n", 311 | "early_stop = EarlyStopping(monitor=\"val_loss\", patience=2, verbose=1)\n", 312 | "model_chkpt = ModelCheckpoint('best_model_aug.hdf5',save_best_only=True, monitor='val_accuracy',verbose=1)\n", 313 | "\n", 314 | "callback_list = [model_chkpt,lr_reduce]" 315 | ] 316 | }, 317 | { 318 | "cell_type": "markdown", 319 | "metadata": {}, 320 | "source": [ 321 | "### Model Training" 322 | ] 323 | }, 324 | { 325 | "cell_type": "code", 326 | "execution_count": 85, 327 | "metadata": { 328 | "execution": { 329 | "iopub.execute_input": "2021-09-20T07:41:33.998735Z", 330 | "iopub.status.busy": "2021-09-20T07:41:33.998425Z", 331 | "iopub.status.idle": "2021-09-20T09:37:55.639900Z", 332 | "shell.execute_reply": "2021-09-20T09:37:55.639133Z", 333 | "shell.execute_reply.started": "2021-09-20T07:41:33.998702Z" 334 | } 335 | }, 336 | "outputs": [ 337 | { 338 | "name": "stdout", 339 | "output_type": "stream", 340 | "text": [ 341 | "Epoch 1/20\n", 342 | "189/189 [==============================] - 352s 2s/step - loss: 1.7499 - accuracy: 0.4074 - val_loss: 0.9937 - val_accuracy: 0.6615\n", 343 | "\n", 344 | "Epoch 00001: val_accuracy improved from -inf to 0.66148, saving model to best_model_aug.hdf5\n", 345 | "Epoch 2/20\n", 346 | "189/189 [==============================] - 340s 2s/step - loss: 0.7136 - accuracy: 0.7340 - val_loss: 0.8230 - val_accuracy: 0.7284\n", 347 | "\n", 348 | "Epoch 00002: val_accuracy improved from 0.66148 to 0.72839, saving model to best_model_aug.hdf5\n", 349 | "Epoch 3/20\n", 350 | "189/189 [==============================] - 339s 2s/step - loss: 0.5030 - accuracy: 0.8223 - val_loss: 0.8826 - val_accuracy: 0.7479\n", 351 | "\n", 352 | "Epoch 00003: val_accuracy improved from 0.72839 to 0.74793, saving model to best_model_aug.hdf5\n", 353 | "Epoch 4/20\n", 354 | "189/189 [==============================] - 339s 2s/step - loss: 0.3668 - accuracy: 0.8721 - val_loss: 1.0351 - val_accuracy: 0.7440\n", 355 | "\n", 356 | "Epoch 00004: val_accuracy did not improve from 0.74793\n", 357 | "Epoch 5/20\n", 358 | "189/189 [==============================] - 340s 2s/step - loss: 0.3209 - accuracy: 0.8906 - val_loss: 0.7385 - val_accuracy: 0.8019\n", 359 | "\n", 360 | "Epoch 00005: val_accuracy improved from 0.74793 to 0.80192, saving model to best_model_aug.hdf5\n", 361 | "Epoch 6/20\n", 362 | "189/189 [==============================] - 340s 2s/step - loss: 0.2600 - accuracy: 0.9136 - val_loss: 0.8868 - val_accuracy: 0.7943\n", 363 | "\n", 364 | "Epoch 00006: val_accuracy did not improve from 0.80192\n", 365 | "Epoch 7/20\n", 366 | "189/189 [==============================] - 338s 2s/step - loss: 0.2152 - accuracy: 0.9310 - val_loss: 0.8217 - val_accuracy: 0.7764\n", 367 | "\n", 368 | "Epoch 00007: val_accuracy did not improve from 0.80192\n", 369 | "\n", 370 | "Epoch 00007: ReduceLROnPlateau reducing learning rate to 4.999999873689376e-05.\n", 371 | "Epoch 8/20\n", 372 | "189/189 [==============================] - 338s 2s/step - loss: 0.1439 - accuracy: 0.9501 - val_loss: 0.9309 - val_accuracy: 0.8066\n", 373 | "\n", 374 | "Epoch 00008: val_accuracy improved from 0.80192 to 0.80656, saving model to best_model_aug.hdf5\n", 375 | "Epoch 9/20\n", 376 | "189/189 [==============================] - 338s 2s/step - loss: 0.1155 - accuracy: 0.9583 - val_loss: 1.0752 - val_accuracy: 0.7870\n", 377 | "\n", 378 | "Epoch 00009: val_accuracy did not improve from 0.80656\n", 379 | "Epoch 10/20\n", 380 | "189/189 [==============================] - 343s 2s/step - loss: 0.0943 - accuracy: 0.9686 - val_loss: 1.0865 - val_accuracy: 0.7900\n", 381 | "\n", 382 | "Epoch 00010: val_accuracy did not improve from 0.80656\n", 383 | "\n", 384 | "Epoch 00010: ReduceLROnPlateau reducing learning rate to 2.499999936844688e-05.\n", 385 | "Epoch 11/20\n", 386 | "189/189 [==============================] - 349s 2s/step - loss: 0.0774 - accuracy: 0.9745 - val_loss: 1.0638 - val_accuracy: 0.8089\n", 387 | "\n", 388 | "Epoch 00011: val_accuracy improved from 0.80656 to 0.80888, saving model to best_model_aug.hdf5\n", 389 | "Epoch 12/20\n", 390 | "189/189 [==============================] - 371s 2s/step - loss: 0.0580 - accuracy: 0.9834 - val_loss: 1.1004 - val_accuracy: 0.8115\n", 391 | "\n", 392 | "Epoch 00012: val_accuracy improved from 0.80888 to 0.81153, saving model to best_model_aug.hdf5\n", 393 | "Epoch 13/20\n", 394 | "189/189 [==============================] - 356s 2s/step - loss: 0.0491 - accuracy: 0.9837 - val_loss: 1.3549 - val_accuracy: 0.7917\n", 395 | "\n", 396 | "Epoch 00013: val_accuracy did not improve from 0.81153\n", 397 | "Epoch 14/20\n", 398 | "189/189 [==============================] - 355s 2s/step - loss: 0.0460 - accuracy: 0.9837 - val_loss: 1.2851 - val_accuracy: 0.7976\n", 399 | "\n", 400 | "Epoch 00014: val_accuracy did not improve from 0.81153\n", 401 | "\n", 402 | "Epoch 00014: ReduceLROnPlateau reducing learning rate to 1.249999968422344e-05.\n", 403 | "Epoch 15/20\n", 404 | "189/189 [==============================] - 357s 2s/step - loss: 0.0422 - accuracy: 0.9839 - val_loss: 1.2144 - val_accuracy: 0.8119\n", 405 | "\n", 406 | "Epoch 00015: val_accuracy improved from 0.81153 to 0.81186, saving model to best_model_aug.hdf5\n", 407 | "Epoch 16/20\n", 408 | "189/189 [==============================] - 353s 2s/step - loss: 0.0345 - accuracy: 0.9874 - val_loss: 1.3847 - val_accuracy: 0.7950\n", 409 | "\n", 410 | "Epoch 00016: val_accuracy did not improve from 0.81186\n", 411 | "Epoch 17/20\n", 412 | "189/189 [==============================] - 353s 2s/step - loss: 0.0345 - accuracy: 0.9870 - val_loss: 1.2980 - val_accuracy: 0.7996\n", 413 | "\n", 414 | "Epoch 00017: val_accuracy did not improve from 0.81186\n", 415 | "\n", 416 | "Epoch 00017: ReduceLROnPlateau reducing learning rate to 1e-05.\n", 417 | "Epoch 18/20\n", 418 | "189/189 [==============================] - 361s 2s/step - loss: 0.0302 - accuracy: 0.9890 - val_loss: 1.3043 - val_accuracy: 0.8062\n", 419 | "\n", 420 | "Epoch 00018: val_accuracy did not improve from 0.81186\n", 421 | "Epoch 19/20\n", 422 | "189/189 [==============================] - 351s 2s/step - loss: 0.0285 - accuracy: 0.9912 - val_loss: 1.3658 - val_accuracy: 0.8062\n", 423 | "\n", 424 | "Epoch 00019: val_accuracy did not improve from 0.81186\n", 425 | "Epoch 20/20\n", 426 | "189/189 [==============================] - 354s 2s/step - loss: 0.0262 - accuracy: 0.9906 - val_loss: 1.3751 - val_accuracy: 0.8162\n", 427 | "\n", 428 | "Epoch 00020: val_accuracy improved from 0.81186 to 0.81616, saving model to best_model_aug.hdf5\n" 429 | ] 430 | } 431 | ], 432 | "source": [ 433 | "history = tl_model.fit(train_image_gen,\n", 434 | " epochs=20, \n", 435 | " validation_data = test_image_gen,\n", 436 | " callbacks=callback_list)" 437 | ] 438 | }, 439 | { 440 | "cell_type": "markdown", 441 | "metadata": {}, 442 | "source": [ 443 | "### Model Evaluation" 444 | ] 445 | }, 446 | { 447 | "cell_type": "code", 448 | "execution_count": 87, 449 | "metadata": { 450 | "execution": { 451 | "iopub.execute_input": "2021-09-20T09:40:42.140577Z", 452 | "iopub.status.busy": "2021-09-20T09:40:42.139902Z", 453 | "iopub.status.idle": "2021-09-20T09:40:42.381795Z", 454 | "shell.execute_reply": "2021-09-20T09:40:42.381131Z", 455 | "shell.execute_reply.started": "2021-09-20T09:40:42.140540Z" 456 | } 457 | }, 458 | "outputs": [ 459 | { 460 | "data": { 461 | "text/plain": [ 462 | "" 463 | ] 464 | }, 465 | "execution_count": 87, 466 | "metadata": {}, 467 | "output_type": "execute_result" 468 | }, 469 | { 470 | "data": { 471 | "image/png": "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DRuU3W6vyXqqfEo1/Pfgrnzz589XX3zxxWmf15j3u7vynez9999Xn3zyySmXtcb+aymvbXI5eWINk8lUM7HGydasWVNzFJSamsqWLVtabeKH8PDwmqPZgIAAOnXqhM1ma5XXdpU1a9Zw7rnnomkaPXv2pLS0lCNHXDI9bpNs3ryZmJgYIiMjW/21f6937951jr5Xr17Neec5538877zz6vwdgvPosm/fvgQHBxMcHEzfvn3ZsGFDq+Tr168fRqMRgJ49e3r07/BU+RqjMe93d+dTSvHzzz9zzjnnuPx1W4vXNrm4cmINd8vLyyMzM5Pu3bvXWbZz504efvhhwsPDufHGG0lISGjVbFOnTgXg/PPPr9MVy2az1RrE32KxYLPZCA8Pb9WMK1asqPdN5On9B1BYWFizT8LCwigsLKyzzu//XiMiIjxSWJcuXcqwYcPqXX66vwd3+vbbb1m+fDndunXjpptuqlNUG/N+d7ft27djNpuJjY2tdx1P7b/G8tqC3lZUVFQwffp0brnlFgIDA2stS0xM5I033sDf359169bx0ksv8dprr7VatmeffZaIiAgKCwt57rnniIuLo3fv3q32+o1ht9tZu3Yt119/fZ1lnt5/p6JpmtcODf3ZZ59hNBoZMWLEKZd76u9h7NixNec+5s+fzwcffMCkSZPc/rpNdboDC2gb7yevbXJpysQaQIsm1mguu93O9OnTGTFiBEOGDKmzPDAwEH9/f8A5YqXD4aCoqKjV8h3fX2azmUGDBrF79+46y0+eiONU+9jd1q9fT2JiImFhYXWWeXr/HWc2m2uaoo4cOXLK/wB///dqs9ladV9+//33rF27lsmTJ9f7gdPQ34O7hIWFYTAYMBgMjBkzhj179pwyW0Pvd3dyOBz8+uuvp/3vxlP7rym8tqB7+8QaSinefPNNOnXqxKWXXnrKdY4ePVrTpr979250XW+1D5yKigrKy8trbm/atInOnTvXWiclJYXly5ejlGLnzp0EBgZ6VXOLJ/ffyVJSUvjhhx8A+OGHHxg0aFCddfr378/GjRspKSmhpKSEjRs30r9//1bJt2HDBr744gv++te/4ufnd8p1GvP34C4nn5f59ddfT9ls1pj3uztt3ryZuLi4eufp9eT+awqvvlJ03bp1vP/++zUTa1x55ZW1Jtaoqqpi1qxZZGZm1kysER0d3SrZfvvtN/7+97/TuXPnmg+R6667ruaId+zYsXzzzTd89913GI1GfH19uemmm+jVq1er5Dt06BAvv/wy4Dz6GD58OFdeeSXfffddTT6lFHPmzGHjxo34+voyadIkkpKSWiUfON8YkyZNYtasWTXNVSfn88T+mzlzJtu2baO4uBiz2cz48eMZNGgQM2bMID8/v1a3xT179rB48WImTpwIONuvFyxYADi7LY4aNapV8i1YsAC73V7TLt2jRw/uuOMObDYbb731FlOmTKn376E18m3dupW9e/eiaRqRkZHccccdhIeH18oHp36/t0a+0aNHM3v2bHr06MHYsWNr1vXE/mspry7oQgghGs9rm1yEEEI0jRR0IYRoJ6SgCyFEOyEFXQgh2gkp6EII0U5IQRdCiHZCCroQQrQT/w8qSTYYaQYvQAAAAABJRU5ErkJggg==\n", 472 | "text/plain": [ 473 | "
" 474 | ] 475 | }, 476 | "metadata": {}, 477 | "output_type": "display_data" 478 | } 479 | ], 480 | "source": [ 481 | "metrics = pd.DataFrame(tl_model.history.history)\n", 482 | "metrics[[\"loss\",\"val_loss\"]].plot()" 483 | ] 484 | }, 485 | { 486 | "cell_type": "code", 487 | "execution_count": 88, 488 | "metadata": { 489 | "execution": { 490 | "iopub.execute_input": "2021-09-20T09:40:53.282394Z", 491 | "iopub.status.busy": "2021-09-20T09:40:53.282130Z", 492 | "iopub.status.idle": "2021-09-20T09:40:53.514401Z", 493 | "shell.execute_reply": "2021-09-20T09:40:53.513688Z", 494 | "shell.execute_reply.started": "2021-09-20T09:40:53.282368Z" 495 | } 496 | }, 497 | "outputs": [ 498 | { 499 | "data": { 500 | "text/plain": [ 501 | "" 502 | ] 503 | }, 504 | "execution_count": 88, 505 | "metadata": {}, 506 | "output_type": "execute_result" 507 | }, 508 | { 509 | "data": { 510 | "image/png": "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Y7FY2myTl5eHyWRiwIABDBw4kNLS0q7W3z0ywkWIXiFdlqGnq/8nHQZ6Tk4OpaWllJeX4/F4WLduHXl5ea22Ofvss9m2bRsANTU1lJaW+vvcA02VHp3DRUa4CCEiW4ddLkajkZtvvpkHH3wQXdeZPn06WVlZLFu2jJycHPLy8hg/fjybN2/mrrvuwmAwcP3115OUlNQX9besUhQPqaHdpymEEIHWqT703NxccnNzW9139dVX+69rmsaNN97IjTfe2LvVdYKMcBFCdJXH48Fk6pVDiCGl//+LSg6inTEx2FUIEVb0f/8TVbyvV19TyxqG4bs/6HC7m2++mZKSEtxuN7fccgvXX389H374IYsWLcLr9WKxWHjllVeoq6vj3nvvZcuWLWiaxl133cVll13GiBEj/CPx3nzzTQoKCnjssce48847iYmJYdu2beTl5XHllVfyq1/9CrfbTWxsLI888gjDhw/H6/XywAMPsGrVKgwGA9deey0jR47k6aef5umnnwZgzZo1PPvssyxZsqRX91FP9etAV64amcNFiDCzePFiUlNTaWho4LLLLuPiiy/mZz/7GcuXL2fIkCFUVVUB8Nhjj5GUlMQHH3wAQHV1dYevXVpaysqVKzEajbhcLlasWIHJZGLNmjX84Q9/4J///CcvvPACxcXFvPfee5hMJqqqqkhJSeGee+7BbrdjtVpZtmxZq16KUNGvA52WA6KaHBAVold1piUdKE8//TTvvPMO4DvH5YUXXmDSpEkMGeJruKWmpgLw8ccf8+STT/qfl5KS0uFrz5o1C6PRCPgGcNx5553s27cPTdNobm4G4JNPPuGmm27yd8kcfb9vf/vb/Oc//+Hqq69mw4YN/PnPf+6df3Av6teTc8kqRUKEl3Xr1vHxxx/zxhtvUFBQwLhx4xg7dmyXXuP442knnu0ZHx/vv/7www8zefJkVq1axTPPPNPhmaFXX301y5cv5/XXX2fWrFkh2QffrwOdkmKIjZMRLkKECZfLhdlsJi4ujqKiIjZu3Ijb7eazzz7j4EFfA+5ol8vUqVN55pln/M892uWSlpbG7t270XWdd99995TvlZGRAcArr7ziv//888/nueee859YdPT9jk6B8vjjj4dkdwv080BXJQdlhIsQYWTatGl4vV4uuOACfv/735Obm4vVauWPf/wjt956K/n5+dx+++0A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\n", 511 | "text/plain": [ 512 | "
" 513 | ] 514 | }, 515 | "metadata": {}, 516 | "output_type": "display_data" 517 | } 518 | ], 519 | "source": [ 520 | "metrics[[\"accuracy\",\"val_accuracy\"]].plot()" 521 | ] 522 | }, 523 | { 524 | "cell_type": "code", 525 | "execution_count": 90, 526 | "metadata": { 527 | "execution": { 528 | "iopub.execute_input": "2021-09-20T09:44:16.187572Z", 529 | "iopub.status.busy": "2021-09-20T09:44:16.186664Z", 530 | "iopub.status.idle": "2021-09-20T09:45:25.831164Z", 531 | "shell.execute_reply": "2021-09-20T09:45:25.830423Z", 532 | "shell.execute_reply.started": "2021-09-20T09:44:16.187530Z" 533 | } 534 | }, 535 | "outputs": [ 536 | { 537 | "name": "stdout", 538 | "output_type": "stream", 539 | "text": [ 540 | "48/48 [==============================] - 68s 1s/step\n" 541 | ] 542 | } 543 | ], 544 | "source": [ 545 | "predictions = tl_model.predict(test_image_gen, verbose=1)\n", 546 | "predictions = predictions.argmax(axis=1)" 547 | ] 548 | }, 549 | { 550 | "cell_type": "code", 551 | "execution_count": 91, 552 | "metadata": { 553 | "execution": { 554 | "iopub.execute_input": "2021-09-20T09:45:42.454735Z", 555 | "iopub.status.busy": "2021-09-20T09:45:42.454469Z", 556 | "iopub.status.idle": "2021-09-20T09:45:42.459930Z", 557 | "shell.execute_reply": "2021-09-20T09:45:42.457985Z", 558 | "shell.execute_reply.started": "2021-09-20T09:45:42.454706Z" 559 | } 560 | }, 561 | "outputs": [], 562 | "source": [ 563 | "test_labels = test_image_gen.classes" 564 | ] 565 | }, 566 | { 567 | "cell_type": "code", 568 | "execution_count": 1, 569 | "metadata": { 570 | "execution": { 571 | "iopub.execute_input": "2021-09-20T09:46:20.935434Z", 572 | "iopub.status.busy": "2021-09-20T09:46:20.935181Z", 573 | "iopub.status.idle": "2021-09-20T09:46:21.000189Z", 574 | "shell.execute_reply": "2021-09-20T09:46:20.999547Z", 575 | "shell.execute_reply.started": "2021-09-20T09:46:20.935406Z" 576 | } 577 | }, 578 | "outputs": [], 579 | "source": [ 580 | "import sklearn\n", 581 | "from sklearn.metrics import classification_report, confusion_matrix\n", 582 | "\n", 583 | "cm = confusion_matrix(test_labels, predictions)" 584 | ] 585 | }, 586 | { 587 | "cell_type": "code", 588 | "execution_count": 7, 589 | "metadata": {}, 590 | "outputs": [ 591 | { 592 | "name": "stdout", 593 | "output_type": "stream", 594 | "text": [ 595 | "Normalized confusion matrix\n", 596 | "[[0.67346939 0.09183673 0.1505102 0.00510204 0.06632653 0.0127551\n", 597 | " 0. ]\n", 598 | " [0.02919708 0.86861314 0.04136253 0. 0.01459854 0.03892944\n", 599 | " 0.00729927]\n", 600 | " [0.02277904 0.00683371 0.79498861 0.00455581 0.07061503 0.10022779\n", 601 | " 0. ]\n", 602 | " [0.05949657 0.02517162 0.03432494 0.77116705 0.01830664 0.09153318\n", 603 | " 0. ]\n", 604 | " [0.00898876 0.01573034 0.10786517 0. 0.63820225 0.21348315\n", 605 | " 0.01573034]\n", 606 | " [0. 0.00226757 0.01587302 0. 0.02040816 0.96145125\n", 607 | " 0. ]\n", 608 | " [0. 0. 0.0154185 0. 0. 0.01101322\n", 609 | " 0.97356828]]\n" 610 | ] 611 | }, 612 | { 613 | "data": { 614 | "image/png": "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\n", 615 | "text/plain": [ 616 | "
" 617 | ] 618 | }, 619 | "metadata": { 620 | "needs_background": "light" 621 | }, 622 | "output_type": "display_data" 623 | } 624 | ], 625 | "source": [ 626 | "import itertools\n", 627 | "\n", 628 | "def plot_confusion_matrix(cm, classes,\n", 629 | " normalize=True,\n", 630 | " title='Confusion matrix',\n", 631 | " cmap=plt.cm.Blues):\n", 632 | " if normalize:\n", 633 | " cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n", 634 | " print(\"Normalized confusion matrix\")\n", 635 | " else:\n", 636 | " print('Confusion matrix, without normalization')\n", 637 | "\n", 638 | " print(cm)\n", 639 | "\n", 640 | " plt.figure(figsize=(7,7))\n", 641 | " plt.imshow(cm, interpolation='nearest', cmap=cmap)\n", 642 | " plt.title(title)\n", 643 | " plt.colorbar()\n", 644 | " tick_marks = np.arange(len(classes))\n", 645 | " plt.xticks(tick_marks, classes, rotation=45)\n", 646 | " plt.yticks(tick_marks, classes)\n", 647 | "\n", 648 | " fmt = '.2f' if normalize else 'd'\n", 649 | " thresh = cm.max() / 2.\n", 650 | " for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n", 651 | " plt.text(j, i, format(cm[i, j], fmt),\n", 652 | " horizontalalignment=\"center\",\n", 653 | " color=\"white\" if cm[i, j] > thresh else \"black\")\n", 654 | " plt.ylabel('True label')\n", 655 | " plt.xlabel('Predicted label')\n", 656 | " plt.tight_layout()\n", 657 | "\n", 658 | " \n", 659 | "cm_plot_labels =['AKIEC','BCC','BKL','DF','MEL','NV','VASC']\n", 660 | "\n", 661 | "plot_confusion_matrix(cm, cm_plot_labels, title='Confusion Matrix', normalize=True)" 662 | ] 663 | }, 664 | { 665 | "cell_type": "code", 666 | "execution_count": 5, 667 | "metadata": {}, 668 | "outputs": [ 669 | { 670 | "data": { 671 | "text/html": [ 672 | "
\n", 673 | "\n", 686 | "\n", 687 | " \n", 688 | " \n", 689 | " \n", 690 | " \n", 691 | " \n", 692 | " \n", 693 | " \n", 694 | " \n", 695 | " \n", 696 | " \n", 697 | " \n", 698 | " \n", 699 | " \n", 700 | " \n", 701 | " \n", 702 | " \n", 703 | " \n", 704 | " \n", 705 | " \n", 706 | " \n", 707 | " \n", 708 | " \n", 709 | " \n", 710 | " \n", 711 | " \n", 712 | " \n", 713 | " \n", 714 | " \n", 715 | " \n", 716 | " \n", 717 | " \n", 718 | " \n", 719 | " \n", 720 | " \n", 721 | " \n", 722 | " \n", 723 | " \n", 724 | " \n", 725 | " \n", 726 | " \n", 727 | " \n", 728 | " \n", 729 | " \n", 730 | " \n", 731 | " \n", 732 | " \n", 733 | " \n", 734 | " \n", 735 | " \n", 736 | " \n", 737 | " \n", 738 | " \n", 739 | " \n", 740 | " \n", 741 | " \n", 742 | " \n", 743 | " \n", 744 | " \n", 745 | " \n", 746 | " \n", 747 | " \n", 748 | " \n", 749 | " \n", 750 | " \n", 751 | " \n", 752 | " \n", 753 | " \n", 754 | " \n", 755 | " \n", 756 | " \n", 757 | " \n", 758 | " \n", 759 | " \n", 760 | " \n", 761 | " \n", 762 | " \n", 763 | " \n", 764 | " \n", 765 | " \n", 766 | " \n", 767 | " \n", 768 | " \n", 769 | " \n", 770 | " \n", 771 | " \n", 772 | " \n", 773 | " \n", 774 | " \n", 775 | " \n", 776 | " \n", 777 | " \n", 778 | " \n", 779 | " \n", 780 | " \n", 781 | " \n", 782 | " \n", 783 | " \n", 784 | " \n", 785 | " \n", 786 | " \n", 787 | " \n", 788 | " \n", 789 | " \n", 790 | " \n", 791 | " \n", 792 | " \n", 793 | " \n", 794 | " \n", 795 | " \n", 796 | " \n", 797 | " \n", 798 | " \n", 799 | " \n", 800 | " \n", 801 | " \n", 802 | " \n", 803 | " \n", 804 | " \n", 805 | " \n", 806 | " \n", 807 | " \n", 808 | " \n", 809 | " \n", 810 | " \n", 811 | " \n", 812 | " \n", 813 | " \n", 814 | " \n", 815 | " \n", 816 | " \n", 817 | " \n", 818 | " \n", 819 | " \n", 820 | " \n", 821 | " \n", 822 | " \n", 823 | " \n", 824 | " \n", 825 | " \n", 826 | " \n", 827 | " \n", 828 | " \n", 829 | " \n", 830 | " \n", 831 | " \n", 832 | " \n", 833 | " \n", 834 | " \n", 835 | " \n", 836 | " \n", 837 | " \n", 838 | " \n", 839 | " \n", 840 | " \n", 841 | " \n", 842 | " \n", 843 | " \n", 844 | " \n", 845 | "
AKIECBCCBKLDFMELNVVASCmicro-average
accuracy0.9403780.9629020.9195100.9655520.9201720.9264660.9927130.946813
f10.7457630.8644070.7417640.8663240.7021010.7925230.9757170.813846
false_discovery_rate0.1645570.1397590.3047810.0117300.2197800.3259140.0221240.186154
false_negative_rate0.3265310.1313870.2050110.2288330.3617980.0385490.0264320.186154
false_positive_rate0.0197940.0222390.0593020.0015490.0310800.0795190.0038990.031026
negative_predictive_value0.9526450.9792630.9642430.9626590.9393600.9928870.9953250.968974
positive_predictive_value0.8354430.8602410.6952190.9882700.7802200.6740860.9778760.813846
precision0.8354430.8602410.6952190.9882700.7802200.6740860.9778760.813846
recall0.6734690.8686130.7949890.7711670.6382020.9614510.9735680.813846
sensitivity0.6734690.8686130.7949890.7711670.6382020.9614510.9735680.813846
specificity0.9802060.9777610.9406980.9984510.9689200.9204810.9961010.968974
true_negative_rate0.9802060.9777610.9406980.9984510.9689200.9204810.9961010.968974
true_positive_rate0.6734690.8686130.7949890.7711670.6382020.9614510.9735680.813846
\n", 846 | "
" 847 | ], 848 | "text/plain": [ 849 | " AKIEC BCC BKL DF MEL \\\n", 850 | "accuracy 0.940378 0.962902 0.919510 0.965552 0.920172 \n", 851 | "f1 0.745763 0.864407 0.741764 0.866324 0.702101 \n", 852 | "false_discovery_rate 0.164557 0.139759 0.304781 0.011730 0.219780 \n", 853 | "false_negative_rate 0.326531 0.131387 0.205011 0.228833 0.361798 \n", 854 | "false_positive_rate 0.019794 0.022239 0.059302 0.001549 0.031080 \n", 855 | "negative_predictive_value 0.952645 0.979263 0.964243 0.962659 0.939360 \n", 856 | "positive_predictive_value 0.835443 0.860241 0.695219 0.988270 0.780220 \n", 857 | "precision 0.835443 0.860241 0.695219 0.988270 0.780220 \n", 858 | "recall 0.673469 0.868613 0.794989 0.771167 0.638202 \n", 859 | "sensitivity 0.673469 0.868613 0.794989 0.771167 0.638202 \n", 860 | "specificity 0.980206 0.977761 0.940698 0.998451 0.968920 \n", 861 | "true_negative_rate 0.980206 0.977761 0.940698 0.998451 0.968920 \n", 862 | "true_positive_rate 0.673469 0.868613 0.794989 0.771167 0.638202 \n", 863 | "\n", 864 | " NV VASC micro-average \n", 865 | "accuracy 0.926466 0.992713 0.946813 \n", 866 | "f1 0.792523 0.975717 0.813846 \n", 867 | "false_discovery_rate 0.325914 0.022124 0.186154 \n", 868 | "false_negative_rate 0.038549 0.026432 0.186154 \n", 869 | "false_positive_rate 0.079519 0.003899 0.031026 \n", 870 | "negative_predictive_value 0.992887 0.995325 0.968974 \n", 871 | "positive_predictive_value 0.674086 0.977876 0.813846 \n", 872 | "precision 0.674086 0.977876 0.813846 \n", 873 | "recall 0.961451 0.973568 0.813846 \n", 874 | "sensitivity 0.961451 0.973568 0.813846 \n", 875 | "specificity 0.920481 0.996101 0.968974 \n", 876 | "true_negative_rate 0.920481 0.996101 0.968974 \n", 877 | "true_positive_rate 0.961451 0.973568 0.813846 " 878 | ] 879 | }, 880 | "execution_count": 5, 881 | "metadata": {}, 882 | "output_type": "execute_result" 883 | } 884 | ], 885 | "source": [ 886 | "import disarray\n", 887 | "\n", 888 | "# Instantiate the confusion matrix DataFrame with index and columns\n", 889 | "#cm = confusion_matrix(a,b)\n", 890 | "df = pd.DataFrame(cm, index= ['AKIEC','BCC','BKL','DF','MEL','NV','VASC'], columns=['AKIEC','BCC','BKL','DF','MEL','NV','VASC'])\n", 891 | "df.da.export_metrics()" 892 | ] 893 | }, 894 | { 895 | "cell_type": "code", 896 | "execution_count": null, 897 | "metadata": {}, 898 | "outputs": [], 899 | "source": [] 900 | } 901 | ], 902 | "metadata": { 903 | "kernelspec": { 904 | "display_name": "Python 3 (ipykernel)", 905 | "language": "python", 906 | "name": "python3" 907 | }, 908 | "language_info": { 909 | "codemirror_mode": { 910 | "name": "ipython", 911 | "version": 3 912 | }, 913 | "file_extension": ".py", 914 | "mimetype": "text/x-python", 915 | "name": "python", 916 | "nbconvert_exporter": "python", 917 | "pygments_lexer": "ipython3", 918 | "version": "3.9.7" 919 | } 920 | }, 921 | "nbformat": 4, 922 | "nbformat_minor": 4 923 | } 924 | -------------------------------------------------------------------------------- /docs/model_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Defcon27/Skin-Cancer-Classification-using-Transfer-Learning/0d216c18f9528cdf1e07562296f3e1b571970edc/docs/model_architecture.png -------------------------------------------------------------------------------- /docs/results.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Defcon27/Skin-Cancer-Classification-using-Transfer-Learning/0d216c18f9528cdf1e07562296f3e1b571970edc/docs/results.png --------------------------------------------------------------------------------