{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.10","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"!pip install livelossplot --quiet","metadata":{"execution":{"iopub.status.busy":"2023-02-17T14:50:40.291132Z","iopub.execute_input":"2023-02-17T14:50:40.291506Z","iopub.status.idle":"2023-02-17T14:50:48.7785Z","shell.execute_reply.started":"2023-02-17T14:50:40.291409Z","shell.execute_reply":"2023-02-17T14:50:48.777494Z"},"trusted":true},"execution_count":1,"outputs":[{"name":"stdout","text":"\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\n","output_type":"stream"}]},{"cell_type":"code","source":"# Importing the libraries\nimport os\nimport shutil\nimport glob\nfrom tqdm.notebook import tqdm\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport tensorflow as tf\nimport cv2\nfrom PIL import Image\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nimport random\nfrom random import seed\nfrom livelossplot import PlotLossesKeras\nimport math","metadata":{"execution":{"iopub.status.busy":"2023-02-17T14:50:48.782634Z","iopub.execute_input":"2023-02-17T14:50:48.78288Z","iopub.status.idle":"2023-02-17T14:50:50.697956Z","shell.execute_reply.started":"2023-02-17T14:50:48.782841Z","shell.execute_reply":"2023-02-17T14:50:50.697126Z"},"trusted":true},"execution_count":2,"outputs":[]},{"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow import keras","metadata":{"execution":{"iopub.status.busy":"2023-02-17T14:50:50.699384Z","iopub.execute_input":"2023-02-17T14:50:50.699683Z","iopub.status.idle":"2023-02-17T14:50:50.704648Z","shell.execute_reply.started":"2023-02-17T14:50:50.699627Z","shell.execute_reply":"2023-02-17T14:50:50.703773Z"},"trusted":true},"execution_count":3,"outputs":[]},{"cell_type":"code","source":"# Importing the Training Dataset\ndf_train = pd.read_csv(\"../input/jpeg-melanoma-384x384/train.csv\")\ndf_train.head()","metadata":{"execution":{"iopub.status.busy":"2023-02-17T14:50:50.706527Z","iopub.execute_input":"2023-02-17T14:50:50.706798Z","iopub.status.idle":"2023-02-17T14:50:50.78081Z","shell.execute_reply.started":"2023-02-17T14:50:50.706761Z","shell.execute_reply":"2023-02-17T14:50:50.779938Z"},"trusted":true},"execution_count":4,"outputs":[{"execution_count":4,"output_type":"execute_result","data":{"text/plain":"     image_name  patient_id     sex  age_approx anatom_site_general_challenge  \\\n0  ISIC_2637011  IP_7279968    male        45.0                     head/neck   \n1  ISIC_0015719  IP_3075186  female        45.0               upper extremity   \n2  ISIC_0052212  IP_2842074  female        50.0               lower extremity   \n3  ISIC_0068279  IP_6890425  female        45.0                     head/neck   \n4  ISIC_0074268  IP_8723313  female        55.0               upper extremity   \n\n  diagnosis benign_malignant  target  tfrecord  width  height  \n0   unknown           benign       0         0   6000    4000  \n1   unknown           benign       0         0   6000    4000  \n2     nevus           benign       0         6   1872    1053  \n3   unknown           benign       0         0   1872    1053  \n4   unknown           benign       0        11   6000    4000  ","text/html":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>image_name</th>\n      <th>patient_id</th>\n      <th>sex</th>\n      <th>age_approx</th>\n      <th>anatom_site_general_challenge</th>\n      <th>diagnosis</th>\n      <th>benign_malignant</th>\n      <th>target</th>\n      <th>tfrecord</th>\n      <th>width</th>\n      <th>height</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>ISIC_2637011</td>\n      <td>IP_7279968</td>\n      <td>male</td>\n      <td>45.0</td>\n      <td>head/neck</td>\n      <td>unknown</td>\n      <td>benign</td>\n      <td>0</td>\n      <td>0</td>\n      <td>6000</td>\n      <td>4000</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>ISIC_0015719</td>\n      <td>IP_3075186</td>\n      <td>female</td>\n      <td>45.0</td>\n      <td>upper extremity</td>\n      <td>unknown</td>\n      <td>benign</td>\n      <td>0</td>\n      <td>0</td>\n      <td>6000</td>\n      <td>4000</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>ISIC_0052212</td>\n      <td>IP_2842074</td>\n      <td>female</td>\n      <td>50.0</td>\n      <td>lower extremity</td>\n      <td>nevus</td>\n      <td>benign</td>\n      <td>0</td>\n      <td>6</td>\n      <td>1872</td>\n      <td>1053</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>ISIC_0068279</td>\n      <td>IP_6890425</td>\n      <td>female</td>\n      <td>45.0</td>\n      <td>head/neck</td>\n      <td>unknown</td>\n      <td>benign</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1872</td>\n      <td>1053</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>ISIC_0074268</td>\n      <td>IP_8723313</td>\n      <td>female</td>\n      <td>55.0</td>\n      <td>upper extremity</td>\n      <td>unknown</td>\n      <td>benign</td>\n      <td>0</td>\n      <td>11</td>\n      <td>6000</td>\n      <td>4000</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}]},{"cell_type":"code","source":"df_train.info()","metadata":{"execution":{"iopub.status.busy":"2023-02-17T14:50:50.782232Z","iopub.execute_input":"2023-02-17T14:50:50.782593Z","iopub.status.idle":"2023-02-17T14:50:50.806083Z","shell.execute_reply.started":"2023-02-17T14:50:50.782547Z","shell.execute_reply":"2023-02-17T14:50:50.805161Z"},"trusted":true},"execution_count":5,"outputs":[{"name":"stdout","text":"<class 'pandas.core.frame.DataFrame'>\nRangeIndex: 33126 entries, 0 to 33125\nData columns (total 11 columns):\n #   Column                         Non-Null Count  Dtype  \n---  ------                         --------------  -----  \n 0   image_name                     33126 non-null  object \n 1   patient_id                     33126 non-null  object \n 2   sex                            33061 non-null  object \n 3   age_approx                     33058 non-null  float64\n 4   anatom_site_general_challenge  32599 non-null  object \n 5   diagnosis                      33126 non-null  object \n 6   benign_malignant               33126 non-null  object \n 7   target                         33126 non-null  int64  \n 8   tfrecord                       33126 non-null  int64  \n 9   width                          33126 non-null  int64  \n 10  height                         33126 non-null  int64  \ndtypes: float64(1), int64(4), object(6)\nmemory usage: 2.8+ MB\n","output_type":"stream"}]},{"cell_type":"code","source":"# Importing the Test Dataset\ndf_test = pd.read_csv(\"../input/jpeg-melanoma-384x384/test.csv\")\ndf_test.head()","metadata":{"execution":{"iopub.status.busy":"2023-02-17T14:50:50.807404Z","iopub.execute_input":"2023-02-17T14:50:50.807749Z","iopub.status.idle":"2023-02-17T14:50:50.836419Z","shell.execute_reply.started":"2023-02-17T14:50:50.807712Z","shell.execute_reply":"2023-02-17T14:50:50.83546Z"},"trusted":true},"execution_count":6,"outputs":[{"execution_count":6,"output_type":"execute_result","data":{"text/plain":"     image_name  patient_id     sex  age_approx anatom_site_general_challenge  \\\n0  ISIC_0052060  IP_3579794    male        70.0                           NaN   \n1  ISIC_0052349  IP_7782715    male        40.0               lower extremity   \n2  ISIC_0058510  IP_7960270  female        55.0                         torso   \n3  ISIC_0073313  IP_6375035  female        50.0                         torso   \n4  ISIC_0073502  IP_0589375  female        45.0               lower extremity   \n\n   width  height  \n0   6000    4000  \n1   6000    4000  \n2   6000    4000  \n3   6000    4000  \n4   1920    1080  ","text/html":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>image_name</th>\n      <th>patient_id</th>\n      <th>sex</th>\n      <th>age_approx</th>\n      <th>anatom_site_general_challenge</th>\n      <th>width</th>\n      <th>height</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>ISIC_0052060</td>\n      <td>IP_3579794</td>\n      <td>male</td>\n      <td>70.0</td>\n      <td>NaN</td>\n      <td>6000</td>\n      <td>4000</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>ISIC_0052349</td>\n      <td>IP_7782715</td>\n      <td>male</td>\n      <td>40.0</td>\n      <td>lower extremity</td>\n      <td>6000</td>\n      <td>4000</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>ISIC_0058510</td>\n      <td>IP_7960270</td>\n      <td>female</td>\n      <td>55.0</td>\n      <td>torso</td>\n      <td>6000</td>\n      <td>4000</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>ISIC_0073313</td>\n      <td>IP_6375035</td>\n      <td>female</td>\n      <td>50.0</td>\n      <td>torso</td>\n      <td>6000</td>\n      <td>4000</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>ISIC_0073502</td>\n      <td>IP_0589375</td>\n      <td>female</td>\n      <td>45.0</td>\n      <td>lower extremity</td>\n      <td>1920</td>\n      <td>1080</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}]},{"cell_type":"code","source":"# Creating a config class to store all the configurations\nclass config:\n    \n    # Image and Tabular data paths\n    DIRECTORY_PATH = \"../input/jpeg-melanoma-384x384/\"\n    TRAINING_SAMPLES_FOLDER = DIRECTORY_PATH + \"train/\"\n    TESTING_SAMPLES_FOLDER = DIRECTORY_PATH + \"test/\"\n    TRAIN_FULL_DATA = DIRECTORY_PATH + \"train.csv\"\n    TEST_FULL_DATA = DIRECTORY_PATH + \"test.csv\"\n    \n    # New directory path for image data\n    WORK_DIRECTORY = \"dataset/\"\n    TRAIN_IMAGES_FOLDER = WORK_DIRECTORY + \"training_set/\"\n    TEST_IMAGES_FOLDER = WORK_DIRECTORY + \"test_set/\"\n    VALIDATION_IMAGES_FOLDER = WORK_DIRECTORY + \"validation_set/\"\n    \n    # Input parameters for data preprocessing\n    TARGET_NAME = \"target\"\n    TRAIN_SIZE = 0.80\n    VALIDATION_SIZE = 0.10\n    TEST_SIZE = 0.10\n    SEED = 42\n    \n    # Tensorflow settings for model training\n    IMAGE_HEIGHT = 299\n    IMAGE_WIDTH = 299\n    NO_CHANNELS = 3\n    BATCH_SIZE = 64\n    EPOCHS = 15\n    DROPOUT = 0.5\n    LEARNING_RATE = 0.01\n    PATIENCE = 5","metadata":{"execution":{"iopub.status.busy":"2023-02-17T14:50:50.837955Z","iopub.execute_input":"2023-02-17T14:50:50.838253Z","iopub.status.idle":"2023-02-17T14:50:50.846203Z","shell.execute_reply.started":"2023-02-17T14:50:50.838216Z","shell.execute_reply":"2023-02-17T14:50:50.845076Z"},"trusted":true},"execution_count":7,"outputs":[]},{"cell_type":"code","source":"# Checking the files along with the number of samples\nprint(os.listdir(config.DIRECTORY_PATH))\nprint(len(os.listdir(config.TRAINING_SAMPLES_FOLDER)), \"Training Samples\")\nprint(len(os.listdir(config.TESTING_SAMPLES_FOLDER)), \"Testing Samples\")","metadata":{"execution":{"iopub.status.busy":"2023-02-17T14:50:50.847642Z","iopub.execute_input":"2023-02-17T14:50:50.848465Z","iopub.status.idle":"2023-02-17T14:50:50.875229Z","shell.execute_reply.started":"2023-02-17T14:50:50.848425Z","shell.execute_reply":"2023-02-17T14:50:50.874413Z"},"trusted":true},"execution_count":8,"outputs":[{"name":"stdout","text":"['sample_submission.csv', 'train.csv', 'test.csv', 'test', 'train']\n33126 Training Samples\n10982 Testing Samples\n","output_type":"stream"}]},{"cell_type":"code","source":"# Creating folders for training and validation data\ndataset_home = \"./dataset/\"\nsubdirs = [\"training_set/\", \"test_set/\", \"validation_set/\"]\nfor subdir in subdirs:\n    labeldirs = [\"benign\", \"malignant\"]\n    for labeldir in labeldirs:\n        newdir = dataset_home + subdir + labeldir\n        os.makedirs(newdir, exist_ok=True)","metadata":{"execution":{"iopub.status.busy":"2023-02-17T14:50:50.876563Z","iopub.execute_input":"2023-02-17T14:50:50.877029Z","iopub.status.idle":"2023-02-17T14:50:50.882999Z","shell.execute_reply.started":"2023-02-17T14:50:50.87699Z","shell.execute_reply":"2023-02-17T14:50:50.882186Z"},"trusted":true},"execution_count":9,"outputs":[]},{"cell_type":"code","source":"print(os.listdir(\"./dataset\"))","metadata":{"execution":{"iopub.status.busy":"2023-02-17T14:50:50.887307Z","iopub.execute_input":"2023-02-17T14:50:50.887627Z","iopub.status.idle":"2023-02-17T14:50:50.893286Z","shell.execute_reply.started":"2023-02-17T14:50:50.887579Z","shell.execute_reply":"2023-02-17T14:50:50.892353Z"},"trusted":true},"execution_count":10,"outputs":[{"name":"stdout","text":"['validation_set', 'training_set', 'test_set']\n","output_type":"stream"}]},{"cell_type":"code","source":"# Splitting the dataset into train, test and validation set\n\ntest_examples = train_examples = validation_examples = 0\nseed(config.SEED)\n\nfor record in open(config.TRAIN_FULL_DATA).readlines()[1:]:\n    split_record = record.split(\",\")\n    image_name = split_record[0]\n    target = split_record[7]\n    \n    random_num = random.random()\n    \n    if random_num < config.TRAIN_SIZE:\n        destination = config.TRAIN_IMAGES_FOLDER\n        train_examples += 1\n        \n    elif random_num < 0.9:\n        destination = config.VALIDATION_IMAGES_FOLDER\n        validation_examples += 1\n        \n    else:\n        destination = config.TEST_IMAGES_FOLDER\n        test_examples += 1\n        \n    if target == \"0\":\n        shutil.copy(\n            config.TRAINING_SAMPLES_FOLDER + image_name + \".jpg\",\n            destination + \"benign/\" + image_name + \".jpg\"\n        )\n    \n    elif target == \"1\":\n        shutil.copy(\n            config.TRAINING_SAMPLES_FOLDER + image_name + \".jpg\",\n            destination + \"malignant/\" + image_name + \".jpg\"\n        )\n\nprint(f\"Number of training examples: {train_examples}\")\nprint(f\"Number of test examples: {test_examples}\")\nprint(f\"Number of validation examples: {validation_examples}\")","metadata":{"execution":{"iopub.status.busy":"2023-02-17T14:50:50.894927Z","iopub.execute_input":"2023-02-17T14:50:50.895509Z","iopub.status.idle":"2023-02-17T14:56:17.004544Z","shell.execute_reply.started":"2023-02-17T14:50:50.895438Z","shell.execute_reply":"2023-02-17T14:56:17.003575Z"},"trusted":true},"execution_count":11,"outputs":[{"name":"stdout","text":"Number of training examples: 26529\nNumber of test examples: 3286\nNumber of validation examples: 3311\n","output_type":"stream"}]},{"cell_type":"code","source":"# Preparing the data and performing Data Augmentation\ntrain_datagen = ImageDataGenerator(\n    #rescale=1./255,\n    shear_range=0.2,\n    zoom_range=(0.95, 0.95),\n    rotation_range=15,\n    horizontal_flip=True,\n    vertical_flip=True,\n    data_format=\"channels_last\",\n    dtype=tf.float32\n)\n\nvalidation_datagen = ImageDataGenerator(\n    #rescale=1./255,\n    dtype=tf.float32\n)\n\ntrain_generator = train_datagen.flow_from_directory(\n    directory=config.TRAIN_IMAGES_FOLDER,\n    target_size=(config.IMAGE_HEIGHT, config.IMAGE_WIDTH),\n    color_mode=\"rgb\",\n    batch_size=config.BATCH_SIZE,\n    class_mode=\"binary\",\n    shuffle=True\n)\n\nvalidation_generator = validation_datagen.flow_from_directory(\n    directory=config.VALIDATION_IMAGES_FOLDER,\n    target_size=(config.IMAGE_HEIGHT, config.IMAGE_WIDTH),\n    color_mode=\"rgb\",\n    batch_size=config.BATCH_SIZE,\n    class_mode=\"binary\",\n    shuffle=True\n)","metadata":{"execution":{"iopub.status.busy":"2023-02-17T15:03:36.346703Z","iopub.execute_input":"2023-02-17T15:03:36.347003Z","iopub.status.idle":"2023-02-17T15:03:37.100189Z","shell.execute_reply.started":"2023-02-17T15:03:36.34697Z","shell.execute_reply":"2023-02-17T15:03:37.098584Z"},"trusted":true},"execution_count":20,"outputs":[{"name":"stdout","text":"Found 26529 images belonging to 2 classes.\nFound 3311 images belonging to 2 classes.\n","output_type":"stream"}]},{"cell_type":"code","source":"# Metrics to use for compiling the model\nMETRICS = [keras.metrics.AUC(name=\"auc\")]","metadata":{"execution":{"iopub.status.busy":"2023-02-17T15:03:37.353848Z","iopub.execute_input":"2023-02-17T15:03:37.354119Z","iopub.status.idle":"2023-02-17T15:03:37.364147Z","shell.execute_reply.started":"2023-02-17T15:03:37.35409Z","shell.execute_reply":"2023-02-17T15:03:37.363269Z"},"trusted":true},"execution_count":21,"outputs":[]},{"cell_type":"code","source":"# Calculating the different step size for the model while training\nSTEP_SIZE_TRAIN = train_generator.n // train_generator.batch_size\nSTEP_SIZE_VALIDATION = validation_generator.n // validation_generator.batch_size","metadata":{"execution":{"iopub.status.busy":"2023-02-17T15:03:38.259734Z","iopub.execute_input":"2023-02-17T15:03:38.26033Z","iopub.status.idle":"2023-02-17T15:03:38.26429Z","shell.execute_reply.started":"2023-02-17T15:03:38.260291Z","shell.execute_reply":"2023-02-17T15:03:38.263507Z"},"trusted":true},"execution_count":22,"outputs":[]},{"cell_type":"code","source":"# Calculating the number of benign/malignant images\ntotal_images = train_examples + validation_examples\nbenign_images = len(os.listdir(config.TRAIN_IMAGES_FOLDER + \"benign\")) + len(os.listdir(config.VALIDATION_IMAGES_FOLDER + \"benign\"))\nmalignant_images = len(os.listdir(config.TRAIN_IMAGES_FOLDER + \"malignant\")) + len(os.listdir(config.VALIDATION_IMAGES_FOLDER + \"malignant\"))","metadata":{"execution":{"iopub.status.busy":"2023-02-17T15:03:39.159758Z","iopub.execute_input":"2023-02-17T15:03:39.160377Z","iopub.status.idle":"2023-02-17T15:03:39.18276Z","shell.execute_reply.started":"2023-02-17T15:03:39.16032Z","shell.execute_reply":"2023-02-17T15:03:39.182093Z"},"trusted":true},"execution_count":23,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"base_model = tf.keras.applications.efficientnet.EfficientNetB0(include_top= False, classes =2)\n\n# 2. Freeze the base model(so the underlying pre-trained patterns aren't updated during training)\nbase_model.trainable = False\n\n# 3. Create Inputs into our model\ninputs = tf.keras.layers.Input(shape=(config.IMAGE_HEIGHT, config.IMAGE_WIDTH, config.NO_CHANNELS),name='input_layer')\n\n# 4. If using ResNet50V2, add this to speed up convergence, remove for EfficientNet\n# x = tf.keras.layers.experimental.preprocessing.Rescaling(1./255)(inputs)\n\n# 5. Pass the inputs to the base_model\nx = base_model(inputs)\nprint(f\"shape after passing inputs throught base modelL{x.shape}\")\n\n# 6. Average pool the outputs of the base model(aggreate all the most important information, reduce number of computation)\nx = tf.keras.layers.GlobalAveragePooling2D(name = \"global_average_pooling\") (x)\nprint(f\"Shape after GlobalAveragingPooling2D: {x.shape}\")\n\n# 7. Create output activation layer\noutputs = tf.keras.layers.Dense(1, activation ='sigmoid',name = 'output_layer')(x)\n\n# 8. Combine the inputs and outputs into a model\nmodel_0 = tf.keras.Model(inputs, outputs)\n\n#9. Compile the model\nmodel_0.compile(optimizer='adam', \n              loss=keras.losses.BinaryCrossentropy(),\n              metrics=METRICS\n             )\n\n","metadata":{"execution":{"iopub.status.busy":"2023-02-17T15:03:59.488348Z","iopub.execute_input":"2023-02-17T15:03:59.488637Z","iopub.status.idle":"2023-02-17T15:04:01.732596Z","shell.execute_reply.started":"2023-02-17T15:03:59.488604Z","shell.execute_reply":"2023-02-17T15:04:01.730858Z"},"trusted":true},"execution_count":25,"outputs":[{"name":"stdout","text":"shape after passing inputs throught base modelL(None, 9, 9, 1280)\nShape after GlobalAveragingPooling2D: (None, 1280)\n","output_type":"stream"}]},{"cell_type":"code","source":"# Compiling the transfer learning model\nmodel_0.compile(optimizer=keras.optimizers.Adam(), \n              loss=keras.losses.BinaryCrossentropy(),\n              metrics=METRICS\n             )","metadata":{"execution":{"iopub.status.busy":"2023-02-17T15:04:06.60845Z","iopub.execute_input":"2023-02-17T15:04:06.608778Z","iopub.status.idle":"2023-02-17T15:04:06.623551Z","shell.execute_reply.started":"2023-02-17T15:04:06.608727Z","shell.execute_reply":"2023-02-17T15:04:06.622682Z"},"trusted":true},"execution_count":26,"outputs":[]},{"cell_type":"code","source":"history = model_0.fit(train_generator, epochs=config.EPOCHS,\n          validation_data=validation_generator,\n          validation_freq=1)","metadata":{"execution":{"iopub.status.busy":"2023-02-17T15:04:07.944232Z","iopub.execute_input":"2023-02-17T15:04:07.944513Z","iopub.status.idle":"2023-02-17T17:33:08.566706Z","shell.execute_reply.started":"2023-02-17T15:04:07.944479Z","shell.execute_reply":"2023-02-17T17:33:08.565848Z"},"trusted":true},"execution_count":27,"outputs":[{"name":"stdout","text":"Epoch 1/15\n415/415 [==============================] - 607s 1s/step - loss: 0.0922 - auc: 0.6744 - val_loss: 0.0849 - val_auc: 0.7622\nEpoch 2/15\n415/415 [==============================] - 596s 1s/step - loss: 0.0774 - auc: 0.7803 - val_loss: 0.0833 - val_auc: 0.7839\nEpoch 3/15\n415/415 [==============================] - 594s 1s/step - loss: 0.0761 - auc: 0.7920 - val_loss: 0.0816 - val_auc: 0.7895\nEpoch 4/15\n415/415 [==============================] - 593s 1s/step - loss: 0.0744 - auc: 0.8103 - val_loss: 0.0819 - val_auc: 0.8120\nEpoch 5/15\n415/415 [==============================] - 594s 1s/step - loss: 0.0735 - auc: 0.8219 - val_loss: 0.0819 - val_auc: 0.7808\nEpoch 6/15\n415/415 [==============================] - 595s 1s/step - loss: 0.0723 - auc: 0.8323 - val_loss: 0.0803 - val_auc: 0.7997\nEpoch 7/15\n415/415 [==============================] - 595s 1s/step - loss: 0.0717 - auc: 0.8306 - val_loss: 0.0799 - val_auc: 0.8091\nEpoch 8/15\n415/415 [==============================] - 593s 1s/step - loss: 0.0714 - auc: 0.8386 - val_loss: 0.0800 - val_auc: 0.8196\nEpoch 9/15\n415/415 [==============================] - 593s 1s/step - loss: 0.0705 - auc: 0.8467 - val_loss: 0.0842 - val_auc: 0.7521\nEpoch 10/15\n415/415 [==============================] - 592s 1s/step - loss: 0.0706 - auc: 0.8417 - val_loss: 0.0799 - val_auc: 0.8138\nEpoch 11/15\n415/415 [==============================] - 591s 1s/step - loss: 0.0694 - auc: 0.8545 - val_loss: 0.0821 - val_auc: 0.7977\nEpoch 12/15\n415/415 [==============================] - 592s 1s/step - loss: 0.0695 - auc: 0.8471 - val_loss: 0.0784 - val_auc: 0.8292\nEpoch 13/15\n415/415 [==============================] - 592s 1s/step - loss: 0.0690 - auc: 0.8530 - val_loss: 0.0804 - val_auc: 0.8062\nEpoch 14/15\n415/415 [==============================] - 590s 1s/step - loss: 0.0685 - auc: 0.8539 - val_loss: 0.0797 - val_auc: 0.8166\nEpoch 15/15\n415/415 [==============================] - 590s 1s/step - loss: 0.0686 - auc: 0.8569 - val_loss: 0.0800 - val_auc: 0.8064\n","output_type":"stream"}]},{"cell_type":"code","source":"# Evaluating the model on Validation Dataset\nmodel_0.evaluate(validation_generator, steps=STEP_SIZE_VALIDATION)","metadata":{"execution":{"iopub.status.busy":"2023-02-17T17:35:30.949451Z","iopub.execute_input":"2023-02-17T17:35:30.94976Z","iopub.status.idle":"2023-02-17T17:35:50.363903Z","shell.execute_reply.started":"2023-02-17T17:35:30.949725Z","shell.execute_reply":"2023-02-17T17:35:50.363172Z"},"trusted":true},"execution_count":29,"outputs":[{"name":"stdout","text":"51/51 [==============================] - 19s 368ms/step - loss: 0.0801 - auc: 0.8044\n","output_type":"stream"},{"execution_count":29,"output_type":"execute_result","data":{"text/plain":"[0.08010533452033997, 0.8043560981750488]"},"metadata":{}}]},{"cell_type":"code","source":"# Creating a test generator for test data\ntest_datagen = ImageDataGenerator(\n    rescale=1./255,\n    dtype=tf.float32\n)\n\ntest_generator = test_datagen.flow_from_directory(\n    directory=config.TEST_IMAGES_FOLDER,\n    target_size=(config.IMAGE_HEIGHT, config.IMAGE_WIDTH),\n    color_mode=\"rgb\",\n    batch_size=config.BATCH_SIZE,\n    class_mode=\"binary\",\n    shuffle=False\n)","metadata":{"execution":{"iopub.status.busy":"2023-02-17T17:35:58.310704Z","iopub.execute_input":"2023-02-17T17:35:58.311004Z","iopub.status.idle":"2023-02-17T17:35:58.424716Z","shell.execute_reply.started":"2023-02-17T17:35:58.310972Z","shell.execute_reply":"2023-02-17T17:35:58.423924Z"},"trusted":true},"execution_count":30,"outputs":[{"name":"stdout","text":"Found 3286 images belonging to 2 classes.\n","output_type":"stream"}]},{"cell_type":"code","source":"STEP_SIZE_TEST = test_generator.n // test_generator.batch_size","metadata":{"execution":{"iopub.status.busy":"2023-02-17T17:36:00.562659Z","iopub.execute_input":"2023-02-17T17:36:00.563072Z","iopub.status.idle":"2023-02-17T17:36:00.567462Z","shell.execute_reply.started":"2023-02-17T17:36:00.563038Z","shell.execute_reply":"2023-02-17T17:36:00.566488Z"},"trusted":true},"execution_count":31,"outputs":[]},{"cell_type":"code","source":"# Getting the actual classes of the test dataset\ny_test = np.array([])\nnum_batches = 0\nfor _, y in test_generator:\n    y_test = np.append(y_test, y)\n    num_batches += 1\n    if num_batches == math.ceil(test_examples / config.BATCH_SIZE):\n        break\ny_test","metadata":{"execution":{"iopub.status.busy":"2023-02-17T17:36:01.817912Z","iopub.execute_input":"2023-02-17T17:36:01.818178Z","iopub.status.idle":"2023-02-17T17:36:12.942713Z","shell.execute_reply.started":"2023-02-17T17:36:01.818149Z","shell.execute_reply":"2023-02-17T17:36:12.941932Z"},"trusted":true},"execution_count":32,"outputs":[{"execution_count":32,"output_type":"execute_result","data":{"text/plain":"array([0., 0., 0., ..., 1., 1., 1.])"},"metadata":{}}]},{"cell_type":"code","source":"# Predicting output on the test dataset\ny_pred = model_0.predict(test_generator)\ny_pred","metadata":{"execution":{"iopub.status.busy":"2023-02-17T17:36:21.160523Z","iopub.execute_input":"2023-02-17T17:36:21.160815Z","iopub.status.idle":"2023-02-17T17:36:40.495338Z","shell.execute_reply.started":"2023-02-17T17:36:21.160783Z","shell.execute_reply":"2023-02-17T17:36:40.494456Z"},"trusted":true},"execution_count":34,"outputs":[{"execution_count":34,"output_type":"execute_result","data":{"text/plain":"array([[0.24064882],\n       [0.24130985],\n       [0.24009107],\n       ...,\n       [0.24048364],\n       [0.24082696],\n       [0.24003834]], dtype=float32)"},"metadata":{}}]},{"cell_type":"code","source":"# Computing the TPR and FPR values from the roc curve\nfrom sklearn.metrics import roc_curve\ntpr, fpr, thresholds = roc_curve(y_test, y_pred)","metadata":{"execution":{"iopub.status.busy":"2023-02-17T17:41:42.066527Z","iopub.execute_input":"2023-02-17T17:41:42.066808Z","iopub.status.idle":"2023-02-17T17:41:42.073405Z","shell.execute_reply.started":"2023-02-17T17:41:42.066778Z","shell.execute_reply":"2023-02-17T17:41:42.07238Z"},"trusted":true},"execution_count":39,"outputs":[]},{"cell_type":"code","source":"# Plotting the ROC curve\ndef plot_roc_curve (fpr, tpr, label = None):\n    plt.plot(fpr, tpr, linewidth = 2, label = label)\n    plt.plot([0,1], [0,1], 'k--') # Dashed diagonal\n    plt.xlabel(\"False Positive Rate\")\n    plt.ylabel(\"True Positive Rate (Recall)\")\n    plt.grid()\n    \nplot_roc_curve(fpr, tpr)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-02-17T17:41:58.253653Z","iopub.execute_input":"2023-02-17T17:41:58.253956Z","iopub.status.idle":"2023-02-17T17:41:58.481318Z","shell.execute_reply.started":"2023-02-17T17:41:58.253922Z","shell.execute_reply":"2023-02-17T17:41:58.480537Z"},"trusted":true},"execution_count":40,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"code","source":"# Evaluating the model on test dataset\nmodel_0.evaluate(test_generator, steps=STEP_SIZE_TEST)","metadata":{"execution":{"iopub.status.busy":"2023-02-17T17:45:20.938152Z","iopub.execute_input":"2023-02-17T17:45:20.938452Z","iopub.status.idle":"2023-02-17T17:45:40.205491Z","shell.execute_reply.started":"2023-02-17T17:45:20.93842Z","shell.execute_reply":"2023-02-17T17:45:40.204779Z"},"trusted":true},"execution_count":42,"outputs":[{"name":"stdout","text":"51/51 [==============================] - 19s 364ms/step - loss: 0.2914 - auc: 0.4122\n","output_type":"stream"},{"execution_count":42,"output_type":"execute_result","data":{"text/plain":"[0.29137396812438965, 0.412177711725235]"},"metadata":{}}]},{"cell_type":"code","source":"# Saving the best model after training\nmodel_0.save(\"final_melanoma_model.h5\")","metadata":{"execution":{"iopub.status.busy":"2023-02-17T17:45:54.124702Z","iopub.execute_input":"2023-02-17T17:45:54.124985Z","iopub.status.idle":"2023-02-17T17:45:54.433579Z","shell.execute_reply.started":"2023-02-17T17:45:54.124954Z","shell.execute_reply":"2023-02-17T17:45:54.432878Z"},"trusted":true},"execution_count":44,"outputs":[{"name":"stderr","text":"/opt/conda/lib/python3.7/site-packages/keras/utils/generic_utils.py:497: CustomMaskWarning: Custom mask layers require a config and must override get_config. When loading, the custom mask layer must be passed to the custom_objects argument.\n  category=CustomMaskWarning)\n","output_type":"stream"}]},{"cell_type":"code","source":"auc = history.history['auc']\nval_auc = history.history['val_auc']\n\nloss = history.history['loss']\nval_loss = history.history['val_loss']\n\nepochs_range = range(config.EPOCHS)\n\nplt.figure(figsize=(8, 8))\nplt.subplot(1, 2, 1)\nplt.plot(epochs_range, auc, label='Training Accuracy')\nplt.plot(epochs_range, val_auc, label='Validation Accuracy')\nplt.legend(loc='lower right')\nplt.title('Training and Validation Accuracy')\n\nplt.subplot(1, 2, 2)\nplt.plot(epochs_range, loss, label='Training Loss')\nplt.plot(epochs_range, val_loss, label='Validation Loss')\nplt.legend(loc='upper right')\nplt.title('Training and Validation Loss')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-02-17T18:37:30.919429Z","iopub.execute_input":"2023-02-17T18:37:30.919719Z","iopub.status.idle":"2023-02-17T18:37:31.256775Z","shell.execute_reply.started":"2023-02-17T18:37:30.919685Z","shell.execute_reply":"2023-02-17T18:37:31.256084Z"},"trusted":true},"execution_count":50,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 576x576 with 2 Axes>","image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}