{"metadata":{"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":14774,"databundleVersionId":875431,"sourceType":"competition"},{"sourceId":75475,"sourceType":"datasetVersion","datasetId":42723}],"dockerImageVersionId":30733,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.10.13"},"papermill":{"default_parameters":{},"duration":32748.751845,"end_time":"2024-07-22T23:47:38.855742","environment_variables":{},"exception":null,"input_path":"__notebook__.ipynb","output_path":"__notebook__.ipynb","parameters":{},"start_time":"2024-07-22T14:41:50.103897","version":"2.5.0"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Import Library","metadata":{"papermill":{"duration":0.054923,"end_time":"2024-07-22T14:41:53.030614","exception":false,"start_time":"2024-07-22T14:41:52.975691","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import os\nimport numpy as np\nfrom PIL import Image\nimport pandas as pd\nimport seaborn as sns\nimport cv2\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom matplotlib import pyplot as plt\nimport seaborn as sns\n\nfrom keras.callbacks import Callback\nfrom keras.layers import Dense, Conv2D, Flatten, GlobalAveragePooling2D, Dropout\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\n# Keras Core\nfrom tensorflow.keras.layers import MaxPooling2D, Convolution2D, AveragePooling2D\nfrom keras.layers import Input, Dropout, Dense, Flatten, Activation\nfrom keras.layers import BatchNormalization\nfrom keras.layers import concatenate\nfrom keras import regularizers\nfrom keras import initializers\nfrom keras import optimizers\nfrom keras.models import Model\nfrom tensorflow.keras.callbacks import ModelCheckpoint\nfrom sklearn.metrics import confusion_matrix, classification_report\n# Backend\nfrom keras import backend as K\n# Utils\nfrom tensorflow.keras.utils import get_file\n","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:41:53.142134Z","iopub.status.busy":"2024-07-22T14:41:53.141756Z","iopub.status.idle":"2024-07-22T14:42:07.637394Z","shell.execute_reply":"2024-07-22T14:42:07.636440Z"},"papermill":{"duration":14.554565,"end_time":"2024-07-22T14:42:07.639840","exception":false,"start_time":"2024-07-22T14:41:53.085275","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Prepare Data","metadata":{"papermill":{"duration":0.053625,"end_time":"2024-07-22T14:42:07.748929","exception":false,"start_time":"2024-07-22T14:42:07.695304","status":"completed"},"tags":[]}},{"cell_type":"code","source":"df = pd.read_csv(\"../input/aptos2019-blindness-detection/train.csv\") #.sample(200)\n\n# define class mapping\nclass_mapping = {0: 'Normal', 1: 'Mild', 2: 'Moderate', 3: 'Severe', 4: 'Proliferative'}\n\ndf.head()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:42:07.915382Z","iopub.status.busy":"2024-07-22T14:42:07.914174Z","iopub.status.idle":"2024-07-22T14:42:07.948932Z","shell.execute_reply":"2024-07-22T14:42:07.948023Z"},"papermill":{"duration":0.148542,"end_time":"2024-07-22T14:42:07.951441","exception":false,"start_time":"2024-07-22T14:42:07.802899","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df['diagnosis'].hist()\ndf['diagnosis'].value_counts()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:42:08.071760Z","iopub.status.busy":"2024-07-22T14:42:08.070743Z","iopub.status.idle":"2024-07-22T14:42:08.408888Z","shell.execute_reply":"2024-07-22T14:42:08.407836Z"},"papermill":{"duration":0.398938,"end_time":"2024-07-22T14:42:08.411334","exception":false,"start_time":"2024-07-22T14:42:08.012396","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Variables","metadata":{"papermill":{"duration":0.05591,"end_time":"2024-07-22T14:42:08.528621","exception":false,"start_time":"2024-07-22T14:42:08.472711","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# cnn variable\ntarget_size = (299,299)\nnum_classes = 5\nepochs = 100\n\nlearning_rate = 0.001\nbatch_size = 32\n# batch_size = 16\n\nvalidation_split_1 = 0.25\nvalidation_split_2 = 0.2\n\n# CLAHE variable \nclip_limit_1 = 5.0\nclip_limit_2 = 10.0\nclip_limit_3 = 20.0\n\ntile_size_1 = (4,4)\ntile_size_2 = (8,8)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:42:08.641337Z","iopub.status.busy":"2024-07-22T14:42:08.640943Z","iopub.status.idle":"2024-07-22T14:42:08.646595Z","shell.execute_reply":"2024-07-22T14:42:08.645697Z"},"papermill":{"duration":0.064836,"end_time":"2024-07-22T14:42:08.648560","exception":false,"start_time":"2024-07-22T14:42:08.583724","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Preprocessing CLAHE","metadata":{"papermill":{"duration":0.055153,"end_time":"2024-07-22T14:42:08.758749","exception":false,"start_time":"2024-07-22T14:42:08.703596","status":"completed"},"tags":[]}},{"cell_type":"code","source":"def resize_with_padding(image, target_size):\n    old_size = image.shape[:2]  # (height, width)\n    ratio = float(target_size) / max(old_size)\n    new_size = tuple([int(x * ratio) for x in old_size])\n\n    # Resize the image with the same aspect ratio\n    image = cv2.resize(image, (new_size[1], new_size[0]))\n\n    # Create a new image and place the resized image at the center\n    delta_w = target_size - new_size[1]\n    delta_h = target_size - new_size[0]\n    top, bottom = delta_h // 2, delta_h - (delta_h // 2)\n    left, right = delta_w // 2, delta_w - (delta_w // 2)\n    color = [0, 0, 0]\n    new_image = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color)\n    return new_image","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 1**\n* clip_limit = 5.0\n* tile_size = 4x4 ","metadata":{"papermill":{"duration":0.058024,"end_time":"2024-07-22T14:42:08.873800","exception":false,"start_time":"2024-07-22T14:42:08.815776","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# new directory for preprocessing image\n! mkdir '/kaggle/working/clahe_1/'","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:42:09.001857Z","iopub.status.busy":"2024-07-22T14:42:09.001109Z","iopub.status.idle":"2024-07-22T14:42:10.000700Z","shell.execute_reply":"2024-07-22T14:42:09.999490Z"},"papermill":{"duration":1.064746,"end_time":"2024-07-22T14:42:10.003084","exception":false,"start_time":"2024-07-22T14:42:08.938338","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def clahe_1(image, clip_limit=clip_limit_1, tile_grid_size=tile_size_1):\n    # Convert image to grayscale\n    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)\n\n    # Create CLAHE object\n    clahe = cv2.createCLAHE(clipLimit=clip_limit, tileGridSize=tile_grid_size)\n\n    # Apply CLAHE to the grayscale image\n    clahe_image = clahe.apply(gray_image)\n\n    return clahe_image","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:42:10.115822Z","iopub.status.busy":"2024-07-22T14:42:10.115426Z","iopub.status.idle":"2024-07-22T14:42:10.121194Z","shell.execute_reply":"2024-07-22T14:42:10.120361Z"},"papermill":{"duration":0.064324,"end_time":"2024-07-22T14:42:10.123208","exception":false,"start_time":"2024-07-22T14:42:10.058884","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"my_id = 0\nfor index, row in df.iterrows():\n    my_id = my_id + 1\n    if (my_id%100)==0: print('train ... '+str(my_id))\n    my_pic_name = row.id_code\n    im_path = \"../input/aptos2019-blindness-detection/train_images/\"+my_pic_name+\".png\"    \n    img = cv2.imread(im_path)\n    image = resize_with_padding(img, 299)\n    image = clahe_1(image)\n    cv2.imwrite(\"/kaggle/working/clahe_1/\" +my_pic_name+\".png\", image)\n","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:42:10.235382Z","iopub.status.busy":"2024-07-22T14:42:10.234997Z","iopub.status.idle":"2024-07-22T14:49:02.786429Z","shell.execute_reply":"2024-07-22T14:49:02.785570Z"},"papermill":{"duration":412.610409,"end_time":"2024-07-22T14:49:02.788678","exception":false,"start_time":"2024-07-22T14:42:10.178269","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import shutil\n\n# # Membuat file zip dari folder output\n# shutil.make_archive('clahe_1', 'zip', '/kaggle/working/clahe_1')","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:49:02.907055Z","iopub.status.busy":"2024-07-22T14:49:02.906694Z","iopub.status.idle":"2024-07-22T14:49:02.911046Z","shell.execute_reply":"2024-07-22T14:49:02.910050Z"},"papermill":{"duration":0.065762,"end_time":"2024-07-22T14:49:02.913011","exception":false,"start_time":"2024-07-22T14:49:02.847249","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from IPython.display import FileLink\n\n# # Membuat tautan unduh ke file zip\n# FileLink('clahe_1.zip')","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:49:03.032372Z","iopub.status.busy":"2024-07-22T14:49:03.031975Z","iopub.status.idle":"2024-07-22T14:49:03.035960Z","shell.execute_reply":"2024-07-22T14:49:03.035115Z"},"papermill":{"duration":0.066309,"end_time":"2024-07-22T14:49:03.037925","exception":false,"start_time":"2024-07-22T14:49:02.971616","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 2**\n* clip_limit = 5.0\n* tile_size = 8x8 ","metadata":{"papermill":{"duration":0.05759,"end_time":"2024-07-22T14:49:03.154309","exception":false,"start_time":"2024-07-22T14:49:03.096719","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# new directory for preprocessing image\n! mkdir '/kaggle/working/clahe_2/'","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:49:03.273608Z","iopub.status.busy":"2024-07-22T14:49:03.273247Z","iopub.status.idle":"2024-07-22T14:49:04.269655Z","shell.execute_reply":"2024-07-22T14:49:04.268287Z"},"papermill":{"duration":1.059388,"end_time":"2024-07-22T14:49:04.272527","exception":false,"start_time":"2024-07-22T14:49:03.213139","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def clahe_2(image, clip_limit=clip_limit_1, tile_grid_size=tile_size_2):\n    # Convert image to grayscale\n    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)\n\n    # Create CLAHE object\n    clahe = cv2.createCLAHE(clipLimit=clip_limit, tileGridSize=tile_grid_size)\n\n    # Apply CLAHE to the grayscale image\n    clahe_image = clahe.apply(gray_image)\n\n    return clahe_image","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:49:04.392034Z","iopub.status.busy":"2024-07-22T14:49:04.391073Z","iopub.status.idle":"2024-07-22T14:49:04.397263Z","shell.execute_reply":"2024-07-22T14:49:04.396380Z"},"papermill":{"duration":0.068565,"end_time":"2024-07-22T14:49:04.399197","exception":false,"start_time":"2024-07-22T14:49:04.330632","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"my_id = 0\nfor index, row in df.iterrows():\n    my_id = my_id + 1\n    if (my_id%100)==0: print('train ... '+str(my_id))\n    my_pic_name = row.id_code\n    im_path = \"../input/aptos2019-blindness-detection/train_images/\"+my_pic_name+\".png\"    \n    img = cv2.imread(im_path)\n    image = resize_with_padding(img, 299)\n    image = clahe_2(image)\n    cv2.imwrite(\"/kaggle/working/clahe_2/\" +my_pic_name+\".png\", image)\n","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:49:04.517910Z","iopub.status.busy":"2024-07-22T14:49:04.517565Z","iopub.status.idle":"2024-07-22T14:55:19.439347Z","shell.execute_reply":"2024-07-22T14:55:19.438503Z"},"papermill":{"duration":374.983885,"end_time":"2024-07-22T14:55:19.441649","exception":false,"start_time":"2024-07-22T14:49:04.457764","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import shutil\n\n# # Membuat file zip dari folder output\n# shutil.make_archive('clahe_2', 'zip', '/kaggle/working/clahe_2')","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:19.568646Z","iopub.status.busy":"2024-07-22T14:55:19.567665Z","iopub.status.idle":"2024-07-22T14:55:19.572019Z","shell.execute_reply":"2024-07-22T14:55:19.571143Z"},"papermill":{"duration":0.069825,"end_time":"2024-07-22T14:55:19.574239","exception":false,"start_time":"2024-07-22T14:55:19.504414","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from IPython.display import FileLink\n\n# # Membuat tautan unduh ke file zip\n# FileLink('clahe_2.zip')","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:19.699627Z","iopub.status.busy":"2024-07-22T14:55:19.698969Z","iopub.status.idle":"2024-07-22T14:55:19.703173Z","shell.execute_reply":"2024-07-22T14:55:19.702177Z"},"papermill":{"duration":0.069413,"end_time":"2024-07-22T14:55:19.705483","exception":false,"start_time":"2024-07-22T14:55:19.636070","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 3**\n* clip_limit = 10.0\n* tile_size = 4x4 ","metadata":{"papermill":{"duration":0.061883,"end_time":"2024-07-22T14:55:19.829182","exception":false,"start_time":"2024-07-22T14:55:19.767299","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # new directory for preprocessing image\n# ! mkdir '/kaggle/working/clahe_3/'","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:19.954169Z","iopub.status.busy":"2024-07-22T14:55:19.953571Z","iopub.status.idle":"2024-07-22T14:55:19.957591Z","shell.execute_reply":"2024-07-22T14:55:19.956714Z"},"papermill":{"duration":0.06758,"end_time":"2024-07-22T14:55:19.959421","exception":false,"start_time":"2024-07-22T14:55:19.891841","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# def clahe_3(image, clip_limit=clip_limit_2, tile_grid_size=tile_size_1):\n#     # Convert image to grayscale\n#     gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)\n\n#     # Create CLAHE object\n#     clahe = cv2.createCLAHE(clipLimit=clip_limit, tileGridSize=tile_grid_size)\n\n#     # Apply CLAHE to the grayscale image\n#     clahe_image = clahe.apply(gray_image)\n\n#     return clahe_image","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:20.086717Z","iopub.status.busy":"2024-07-22T14:55:20.085863Z","iopub.status.idle":"2024-07-22T14:55:20.090801Z","shell.execute_reply":"2024-07-22T14:55:20.089861Z"},"papermill":{"duration":0.06948,"end_time":"2024-07-22T14:55:20.092726","exception":false,"start_time":"2024-07-22T14:55:20.023246","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# my_id = 0\n# for index, row in df.iterrows():\n#     my_id = my_id + 1\n#     if (my_id%100)==0: print('train ... '+str(my_id))\n#     my_pic_name = row.id_code\n#     im_path = \"../input/aptos2019-blindness-detection/train_images/\"+my_pic_name+\".png\"    \n#     img = cv2.imread(im_path)\n#     image = resize_with_padding(img, 299)\n#     image = clahe_3(image)\n#     cv2.imwrite(\"/kaggle/working/clahe_3/\" +my_pic_name+\".png\", image)\n","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:20.217638Z","iopub.status.busy":"2024-07-22T14:55:20.216793Z","iopub.status.idle":"2024-07-22T14:55:20.221317Z","shell.execute_reply":"2024-07-22T14:55:20.220443Z"},"papermill":{"duration":0.068954,"end_time":"2024-07-22T14:55:20.223117","exception":false,"start_time":"2024-07-22T14:55:20.154163","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import shutil\n\n# # Membuat file zip dari folder output\n# shutil.make_archive('clahe_3', 'zip', '/kaggle/working/clahe_3')","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:20.348117Z","iopub.status.busy":"2024-07-22T14:55:20.347286Z","iopub.status.idle":"2024-07-22T14:55:20.351483Z","shell.execute_reply":"2024-07-22T14:55:20.350552Z"},"papermill":{"duration":0.069159,"end_time":"2024-07-22T14:55:20.353534","exception":false,"start_time":"2024-07-22T14:55:20.284375","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from IPython.display import FileLink\n\n# # Membuat tautan unduh ke file zip\n# FileLink('clahe_3.zip')","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:20.526959Z","iopub.status.busy":"2024-07-22T14:55:20.526072Z","iopub.status.idle":"2024-07-22T14:55:20.530353Z","shell.execute_reply":"2024-07-22T14:55:20.529445Z"},"papermill":{"duration":0.11812,"end_time":"2024-07-22T14:55:20.532461","exception":false,"start_time":"2024-07-22T14:55:20.414341","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 4**\n* clip_limit = 10.0\n* tile_size = 8x8 ","metadata":{"papermill":{"duration":0.06211,"end_time":"2024-07-22T14:55:20.656402","exception":false,"start_time":"2024-07-22T14:55:20.594292","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # new directory for preprocessing image\n# ! mkdir '/kaggle/working/clahe_4/'","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:20.781797Z","iopub.status.busy":"2024-07-22T14:55:20.781409Z","iopub.status.idle":"2024-07-22T14:55:20.785591Z","shell.execute_reply":"2024-07-22T14:55:20.784691Z"},"papermill":{"duration":0.069211,"end_time":"2024-07-22T14:55:20.787495","exception":false,"start_time":"2024-07-22T14:55:20.718284","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# def clahe_4(image, clip_limit=clip_limit_2, tile_grid_size=tile_size_2):\n#     # Convert image to grayscale\n#     gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)\n\n#     # Create CLAHE object\n#     clahe = cv2.createCLAHE(clipLimit=clip_limit, tileGridSize=tile_grid_size)\n\n#     # Apply CLAHE to the grayscale image\n#     clahe_image = clahe.apply(gray_image)\n\n#     return clahe_image","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:20.912821Z","iopub.status.busy":"2024-07-22T14:55:20.911946Z","iopub.status.idle":"2024-07-22T14:55:20.916564Z","shell.execute_reply":"2024-07-22T14:55:20.915666Z"},"papermill":{"duration":0.070145,"end_time":"2024-07-22T14:55:20.918547","exception":false,"start_time":"2024-07-22T14:55:20.848402","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# my_id = 0\n# for index, row in df.iterrows():\n#     my_id = my_id + 1\n#     if (my_id%100)==0: print('train ... '+str(my_id))\n#     my_pic_name = row.id_code\n#     im_path = \"../input/aptos2019-blindness-detection/train_images/\"+my_pic_name+\".png\"    \n#     img = cv2.imread(im_path)\n#     image = resize_with_padding(img, 299)\n#     image = clahe_4(image)\n#     cv2.imwrite(\"/kaggle/working/clahe_4/\" +my_pic_name+\".png\", image)\n","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:21.043796Z","iopub.status.busy":"2024-07-22T14:55:21.042949Z","iopub.status.idle":"2024-07-22T14:55:21.047403Z","shell.execute_reply":"2024-07-22T14:55:21.046506Z"},"papermill":{"duration":0.069364,"end_time":"2024-07-22T14:55:21.049273","exception":false,"start_time":"2024-07-22T14:55:20.979909","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import shutil\n\n# # Membuat file zip dari folder output\n# shutil.make_archive('clahe_4', 'zip', '/kaggle/working/clahe_4')","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:21.175463Z","iopub.status.busy":"2024-07-22T14:55:21.174594Z","iopub.status.idle":"2024-07-22T14:55:21.178810Z","shell.execute_reply":"2024-07-22T14:55:21.177947Z"},"papermill":{"duration":0.069593,"end_time":"2024-07-22T14:55:21.180626","exception":false,"start_time":"2024-07-22T14:55:21.111033","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from IPython.display import FileLink\n\n# # Membuat tautan unduh ke file zip\n# FileLink('clahe_4.zip')","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:21.307028Z","iopub.status.busy":"2024-07-22T14:55:21.306349Z","iopub.status.idle":"2024-07-22T14:55:21.310477Z","shell.execute_reply":"2024-07-22T14:55:21.309579Z"},"papermill":{"duration":0.069677,"end_time":"2024-07-22T14:55:21.312668","exception":false,"start_time":"2024-07-22T14:55:21.242991","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 5**\n* clip_limit = 20.0\n* tile_size = 4x4 ","metadata":{"papermill":{"duration":0.061848,"end_time":"2024-07-22T14:55:21.435731","exception":false,"start_time":"2024-07-22T14:55:21.373883","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # new directory for preprocessing image\n# ! mkdir '/kaggle/working/clahe_5/'","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:21.560669Z","iopub.status.busy":"2024-07-22T14:55:21.560302Z","iopub.status.idle":"2024-07-22T14:55:21.564147Z","shell.execute_reply":"2024-07-22T14:55:21.563310Z"},"papermill":{"duration":0.068604,"end_time":"2024-07-22T14:55:21.566180","exception":false,"start_time":"2024-07-22T14:55:21.497576","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# def clahe_5(image, clip_limit=clip_limit_3, tile_grid_size=tile_size_1):\n#     # Convert image to grayscale\n#     gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)\n\n#     # Create CLAHE object\n#     clahe = cv2.createCLAHE(clipLimit=clip_limit, tileGridSize=tile_grid_size)\n\n#     # Apply CLAHE to the grayscale image\n#     clahe_image = clahe.apply(gray_image)\n\n#     return clahe_image","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:21.692658Z","iopub.status.busy":"2024-07-22T14:55:21.691851Z","iopub.status.idle":"2024-07-22T14:55:21.696198Z","shell.execute_reply":"2024-07-22T14:55:21.695371Z"},"papermill":{"duration":0.069967,"end_time":"2024-07-22T14:55:21.698122","exception":false,"start_time":"2024-07-22T14:55:21.628155","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# my_id = 0\n# for index, row in df.iterrows():\n#     my_id = my_id + 1\n#     if (my_id%100)==0: print('train ... '+str(my_id))\n#     my_pic_name = row.id_code\n#     im_path = \"../input/aptos2019-blindness-detection/train_images/\"+my_pic_name+\".png\"    \n#     img = cv2.imread(im_path)\n#     image = resize_with_padding(img, 299)\n#     image = clahe_5(image)\n#     cv2.imwrite(\"/kaggle/working/clahe_5/\" +my_pic_name+\".png\", image)\n","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:21.824655Z","iopub.status.busy":"2024-07-22T14:55:21.824026Z","iopub.status.idle":"2024-07-22T14:55:21.828332Z","shell.execute_reply":"2024-07-22T14:55:21.827464Z"},"papermill":{"duration":0.069281,"end_time":"2024-07-22T14:55:21.830139","exception":false,"start_time":"2024-07-22T14:55:21.760858","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import shutil\n\n# # Membuat file zip dari folder output\n# shutil.make_archive('clahe_5', 'zip', '/kaggle/working/clahe_5')","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:21.958475Z","iopub.status.busy":"2024-07-22T14:55:21.958097Z","iopub.status.idle":"2024-07-22T14:55:21.962121Z","shell.execute_reply":"2024-07-22T14:55:21.961252Z"},"papermill":{"duration":0.070216,"end_time":"2024-07-22T14:55:21.964137","exception":false,"start_time":"2024-07-22T14:55:21.893921","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from IPython.display import FileLink\n\n# # Membuat tautan unduh ke file zip\n# FileLink('clahe_5.zip')","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:22.089756Z","iopub.status.busy":"2024-07-22T14:55:22.089021Z","iopub.status.idle":"2024-07-22T14:55:22.093197Z","shell.execute_reply":"2024-07-22T14:55:22.092288Z"},"papermill":{"duration":0.069158,"end_time":"2024-07-22T14:55:22.095013","exception":false,"start_time":"2024-07-22T14:55:22.025855","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 6**\n* clip_limit = 20.0\n* tile_size = 8x8 ","metadata":{"papermill":{"duration":0.062885,"end_time":"2024-07-22T14:55:22.219772","exception":false,"start_time":"2024-07-22T14:55:22.156887","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # new directory for preprocessing image\n# ! mkdir '/kaggle/working/clahe_6/'","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:22.346383Z","iopub.status.busy":"2024-07-22T14:55:22.345718Z","iopub.status.idle":"2024-07-22T14:55:22.349787Z","shell.execute_reply":"2024-07-22T14:55:22.348879Z"},"papermill":{"duration":0.069488,"end_time":"2024-07-22T14:55:22.351671","exception":false,"start_time":"2024-07-22T14:55:22.282183","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# def clahe_6(image, clip_limit=clip_limit_3, tile_grid_size=tile_size_2):\n#     # Convert image to grayscale\n#     gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)\n\n#     # Create CLAHE object\n#     clahe = cv2.createCLAHE(clipLimit=clip_limit, tileGridSize=tile_grid_size)\n\n#     # Apply CLAHE to the grayscale image\n#     clahe_image = clahe.apply(gray_image)\n\n#     return clahe_image","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:22.478753Z","iopub.status.busy":"2024-07-22T14:55:22.477810Z","iopub.status.idle":"2024-07-22T14:55:22.482383Z","shell.execute_reply":"2024-07-22T14:55:22.481499Z"},"papermill":{"duration":0.070092,"end_time":"2024-07-22T14:55:22.484304","exception":false,"start_time":"2024-07-22T14:55:22.414212","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# my_id = 0\n# for index, row in df.iterrows():\n#     my_id = my_id + 1\n#     if (my_id%100)==0: print('train ... '+str(my_id))\n#     my_pic_name = row.id_code\n#     im_path = \"../input/aptos2019-blindness-detection/train_images/\"+my_pic_name+\".png\"    \n#     img = cv2.imread(im_path)\n#     image = resize_with_padding(img, 299)\n#     image = clahe_6(image)\n#     cv2.imwrite(\"/kaggle/working/clahe_6/\" +my_pic_name+\".png\", image)\n","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:22.611274Z","iopub.status.busy":"2024-07-22T14:55:22.610520Z","iopub.status.idle":"2024-07-22T14:55:22.614718Z","shell.execute_reply":"2024-07-22T14:55:22.613736Z"},"papermill":{"duration":0.070078,"end_time":"2024-07-22T14:55:22.616723","exception":false,"start_time":"2024-07-22T14:55:22.546645","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import shutil\n\n# # Membuat file zip dari folder output\n# shutil.make_archive('clahe_6', 'zip', '/kaggle/working/clahe_6')","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:22.744002Z","iopub.status.busy":"2024-07-22T14:55:22.743117Z","iopub.status.idle":"2024-07-22T14:55:22.747334Z","shell.execute_reply":"2024-07-22T14:55:22.746451Z"},"papermill":{"duration":0.070288,"end_time":"2024-07-22T14:55:22.749251","exception":false,"start_time":"2024-07-22T14:55:22.678963","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from IPython.display import FileLink\n\n# # Membuat tautan unduh ke file zip\n# FileLink('clahe_6.zip')","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:22.875661Z","iopub.status.busy":"2024-07-22T14:55:22.875024Z","iopub.status.idle":"2024-07-22T14:55:22.879057Z","shell.execute_reply":"2024-07-22T14:55:22.878206Z"},"papermill":{"duration":0.069687,"end_time":"2024-07-22T14:55:22.881012","exception":false,"start_time":"2024-07-22T14:55:22.811325","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Preprocessing Resize (no clahe)","metadata":{"papermill":{"duration":0.062606,"end_time":"2024-07-22T14:55:23.006976","exception":false,"start_time":"2024-07-22T14:55:22.944370","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # new directory for preprocessing image\n# ! mkdir '/kaggle/working/no_clahe/'","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:23.133781Z","iopub.status.busy":"2024-07-22T14:55:23.133081Z","iopub.status.idle":"2024-07-22T14:55:23.137357Z","shell.execute_reply":"2024-07-22T14:55:23.136334Z"},"papermill":{"duration":0.070097,"end_time":"2024-07-22T14:55:23.139153","exception":false,"start_time":"2024-07-22T14:55:23.069056","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# my_id = 0\n# for index, row in df.iterrows():\n#     my_id = my_id + 1\n#     if (my_id%100)==0: print('train ... '+str(my_id))\n#     my_pic_name = row.id_code\n#     im_path = \"../input/aptos2019-blindness-detection/train_images/\"+my_pic_name+\".png\"    \n#     img = cv2.imread(im_path)\n#     image = cv2.resize(img, (299, 299))\n#     cv2.imwrite(\"/kaggle/working/no_clahe/\" +my_pic_name+\".png\", image)\n","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:23.269039Z","iopub.status.busy":"2024-07-22T14:55:23.268153Z","iopub.status.idle":"2024-07-22T14:55:23.272744Z","shell.execute_reply":"2024-07-22T14:55:23.271803Z"},"papermill":{"duration":0.072329,"end_time":"2024-07-22T14:55:23.274631","exception":false,"start_time":"2024-07-22T14:55:23.202302","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import shutil\n\n# # Membuat file zip dari folder output\n# shutil.make_archive('no_clahe', 'zip', '/kaggle/working/no_clahe')","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:23.403472Z","iopub.status.busy":"2024-07-22T14:55:23.402639Z","iopub.status.idle":"2024-07-22T14:55:23.406703Z","shell.execute_reply":"2024-07-22T14:55:23.405735Z"},"papermill":{"duration":0.069789,"end_time":"2024-07-22T14:55:23.408592","exception":false,"start_time":"2024-07-22T14:55:23.338803","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from IPython.display import FileLink\n\n# # Membuat tautan unduh ke file zip\n# FileLink('no_clahe.zip')","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:23.535848Z","iopub.status.busy":"2024-07-22T14:55:23.535504Z","iopub.status.idle":"2024-07-22T14:55:23.539592Z","shell.execute_reply":"2024-07-22T14:55:23.538706Z"},"papermill":{"duration":0.07017,"end_time":"2024-07-22T14:55:23.541536","exception":false,"start_time":"2024-07-22T14:55:23.471366","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Show Before After Implementing Preprocessing CLAHE","metadata":{"papermill":{"duration":0.062315,"end_time":"2024-07-22T14:55:23.667087","exception":false,"start_time":"2024-07-22T14:55:23.604772","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # pick example image in each class \n# example_images = df.groupby('diagnosis').first().reset_index()\n# print(example_images)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:23.793201Z","iopub.status.busy":"2024-07-22T14:55:23.792852Z","iopub.status.idle":"2024-07-22T14:55:23.796551Z","shell.execute_reply":"2024-07-22T14:55:23.795734Z"},"papermill":{"duration":0.069848,"end_time":"2024-07-22T14:55:23.798541","exception":false,"start_time":"2024-07-22T14:55:23.728693","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # pick random 5 pictures from each class\n# image_path = '/kaggle/input/aptos2019-blindness-detection/train_images'\n# clahe_path_1 = '/kaggle/working/clahe_1'\n# clahe_path_2 = '/kaggle/working/clahe_2'\n# clahe_path_3 = '/kaggle/working/clahe_3'\n# clahe_path_4 = '/kaggle/working/clahe_4'\n\n# for i, row in example_images.iterrows():\n#     label = row['diagnosis']\n#     image_name = row['id_code'] + '.png'\n\n#     class_name = class_mapping[label]\n#     print(class_name)\n    \n#     img = cv2.imread(os.path.join(image_path,image_name)) \n#     img_clahe_1 = cv2.imread(os.path.join(clahe_path_1,image_name))\n#     img_clahe_2 = cv2.imread(os.path.join(clahe_path_2,image_name))\n#     img_clahe_3 = cv2.imread(os.path.join(clahe_path_3,image_name))\n#     img_clahe_4 = cv2.imread(os.path.join(clahe_path_4,image_name))\n\n#     fig, axes = plt.subplots(1, 5, figsize=(10, 5))  # 1 baris, 5 kolom, ukuran lebar 15 inci, tinggi 5 inci\n\n#     axes[0].imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))\n#     axes[0].set_title('Original Image')\n#     axes[0].axis('off')  # Menghilangkan sumbu x dan y\n\n#     axes[1].imshow(img_clahe_1)\n#     axes[1].set_title('CLAHE 5.0 4x4')\n#     axes[1].axis('off')\n\n#     axes[2].imshow(img_clahe_2)\n#     axes[2].set_title('CLAHE 5.0 8x8')\n#     axes[2].axis('off')\n\n#     axes[3].imshow(img_clahe_3)\n#     axes[3].set_title('CLAHE 10.0 4x4')\n#     axes[3].axis('off')\n\n#     axes[4].imshow(img_clahe_4)\n#     axes[4].set_title('CLAHE 10.0 8x8')\n#     axes[4].axis('off')\n\n#     plt.tight_layout()  # Memastikan layout subplot yang rapi\n#     plt.show()\n\n#     plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:23.928255Z","iopub.status.busy":"2024-07-22T14:55:23.927858Z","iopub.status.idle":"2024-07-22T14:55:23.933390Z","shell.execute_reply":"2024-07-22T14:55:23.932498Z"},"papermill":{"duration":0.073484,"end_time":"2024-07-22T14:55:23.935328","exception":false,"start_time":"2024-07-22T14:55:23.861844","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # pick random 5 pictures from each class\n# image_path = '/kaggle/input/aptos2019-blindness-detection/train_images'\n# clahe_path_1 = '/kaggle/working/clahe_1'\n# clahe_path_2 = '/kaggle/working/clahe_2'\n# clahe_path_3 = '/kaggle/working/clahe_3'\n# clahe_path_4 = '/kaggle/working/clahe_4'\n\n# for i, row in example_images.iterrows():\n#     label = row['diagnosis']\n#     image_name = row['id_code'] + '.png'\n\n#     class_name = class_mapping[label]\n#     print(class_name)\n    \n#     img = cv2.imread(os.path.join(image_path,image_name)) \n#     img_clahe_1 = cv2.imread(os.path.join(clahe_path_1,image_name))\n#     img_clahe_2 = cv2.imread(os.path.join(clahe_path_2,image_name))\n#     img_clahe_3 = cv2.imread(os.path.join(clahe_path_3,image_name))\n#     img_clahe_4 = cv2.imread(os.path.join(clahe_path_4,image_name))\n\n#     fig = plt.figure()\n#     fig.add_subplot(1,5,1)\n#     plt.title('Original Image', fontsize=5)\n#     plt.imshow(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))\n\n#     fig.add_subplot(1,5,2)\n#     plt.title('CLAHE 5.0 4x4', fontsize=7)\n#     plt.imshow(img_clahe_1)\n    \n#     fig.add_subplot(1,5,3)\n#     plt.title('CLAHE 5.0 8x8', fontsize=7)\n#     plt.imshow(img_clahe_2)\n    \n#     fig.add_subplot(1,5,4)\n#     plt.title('CLAHE 10.0 4x4', fontsize=7)\n#     plt.imshow(img_clahe_3)\n    \n#     fig.add_subplot(1,5,5)\n#     plt.title('CLAHE 10.0 8x8', fontsize=7)\n#     plt.imshow(img_clahe_4)\n\n#     plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:24.062965Z","iopub.status.busy":"2024-07-22T14:55:24.062563Z","iopub.status.idle":"2024-07-22T14:55:24.068099Z","shell.execute_reply":"2024-07-22T14:55:24.067272Z"},"papermill":{"duration":0.072155,"end_time":"2024-07-22T14:55:24.070043","exception":false,"start_time":"2024-07-22T14:55:23.997888","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# fig, axes = plt.subplots(len(example_images), 5, figsize=(20, 5 * len(example_images)))\n\n# for i, row in example_images.iterrows():\n#     label = row['diagnosis']\n#     image_name = row['id_code']\n    \n#     class_name = class_mapping[label]\n    \n#     img_path = os.path.join(image_path, f\"{image_name}.png\")\n#     clahe_img_path_1 = os.path.join(clahe_path_1, f\"{image_name}.png\")\n#     clahe_img_path_2 = os.path.join(clahe_path_2, f\"{image_name}.png\")\n#     clahe_img_path_3 = os.path.join(clahe_path_3, f\"{image_name}.png\")\n#     clahe_img_path_4 = os.path.join(clahe_path_4, f\"{image_name}.png\")\n\n#     img = cv2.imread(img_path)\n#     img_clahe_1 = cv2.imread(clahe_img_path_1)\n#     img_clahe_2 = cv2.imread(clahe_img_path_2)\n#     img_clahe_3 = cv2.imread(clahe_img_path_3)\n#     img_clahe_4 = cv2.imread(clahe_img_path_4)\n    \n#     # Subplot untuk histogram gambar asli\n#     axes[i, 0].hist(img.flatten(), bins=256, range=(0, 256), color='b')\n#     axes[i, 0].set_title(f'Histogram Original Image (Diagnosis: {class_name})')\n#     axes[i, 0].set_xlabel('Pixel Intensity') \n#     axes[i, 0].set_ylabel('Frequency')\n    \n#     # Subplot untuk histogram CLAHE 5.0 4x4\n#     axes[i, 1].hist(img_clahe_1.flatten(), bins=256, range=(0, 256), color='b', alpha=0.7)\n#     axes[i, 1].set_title(f'Histogram CLAHE 5.0 4x4')\n#     axes[i, 1].set_xlabel('Pixel Intensity') \n#     axes[i, 1].set_ylabel('Frequency')\n    \n#     # Subplot untuk histogram CLAHE 5.0 8x8\n#     axes[i, 2].hist(img_clahe_2.flatten(), bins=256, range=(0, 256), color='b', alpha=0.7)\n#     axes[i, 2].set_title(f'Histogram CLAHE 5.0 8x8')\n#     axes[i, 2].set_xlabel('Pixel Intensity') \n#     axes[i, 2].set_ylabel('Frequency')\n    \n#     # Subplot untuk histogram CLAHE 10.0 4x4\n#     axes[i, 3].hist(img_clahe_3.flatten(), bins=256, range=(0, 256), color='b', alpha=0.7)\n#     axes[i, 3].set_title(f'Histogram CLAHE 10.0 4x4')\n#     axes[i, 3].set_xlabel('Pixel Intensity') \n#     axes[i, 3].set_ylabel('Frequency')\n    \n#     # Subplot untuk histogram CLAHE 10.0 8x8\n#     axes[i, 4].hist(img_clahe_4.flatten(), bins=256, range=(0, 256), color='b', alpha=0.7)\n#     axes[i, 4].set_title(f'Histogram CLAHE 10.0 8x8')\n#     axes[i, 4].set_xlabel('Pixel Intensity') \n#     axes[i, 4].set_ylabel('Frequency')\n\n# plt.tight_layout()\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:24.198067Z","iopub.status.busy":"2024-07-22T14:55:24.197740Z","iopub.status.idle":"2024-07-22T14:55:24.203858Z","shell.execute_reply":"2024-07-22T14:55:24.202919Z"},"papermill":{"duration":0.07292,"end_time":"2024-07-22T14:55:24.205867","exception":false,"start_time":"2024-07-22T14:55:24.132947","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# fig, axes = plt.subplots(len(example_images), 3, figsize=(20, 5 * len(example_images)))\n\n# for i, row in example_images.iterrows():\n#     label = row['diagnosis']\n#     image_name = row['id_code']\n    \n#     class_name = class_mapping[label]\n    \n#     img_path = os.path.join(image_path, f\"{image_name}.png\")\n#     clahe_img_path_1 = os.path.join(clahe_path_1, f\"{image_name}.png\")\n#     clahe_img_path_2 = os.path.join(clahe_path_2, f\"{image_name}.png\")\n#     clahe_img_path_3 = os.path.join(clahe_path_3, f\"{image_name}.png\")\n#     clahe_img_path_4 = os.path.join(clahe_path_4, f\"{image_name}.png\")\n\n#     img = cv2.imread(img_path)\n#     img_clahe_1 = cv2.imread(clahe_img_path_1)\n#     img_clahe_2 = cv2.imread(clahe_img_path_2)\n#     img_clahe_3 = cv2.imread(clahe_img_path_3)\n#     img_clahe_4 = cv2.imread(clahe_img_path_4)\n    \n#     # Subplot untuk histogram gambar asli\n#     axes[i, 0].hist(img.flatten(), bins=256, range=(0, 256), color='b')\n#     axes[i, 0].set_title(f'Histogram Original Image (Diagnosis: {class_name})')\n#     axes[i, 0].set_xlabel('Pixel Intensity') \n#     axes[i, 0].set_ylabel('Frequency')\n    \n#     # Subplot untuk histogram CLAHE 5.0 4x4\n#     axes[i, 1].hist(img_clahe_1.flatten(), bins=256, range=(0, 256), color='b', alpha=0.7)\n#     axes[i, 1].set_title(f'Histogram CLAHE 5.0 4x4')\n#     axes[i, 1].set_xlabel('Pixel Intensity') \n#     axes[i, 1].set_ylabel('Frequency')\n    \n#     # Subplot untuk histogram CLAHE 5.0 8x8\n#     axes[i, 2].hist(img_clahe_2.flatten(), bins=256, range=(0, 256), color='b', alpha=0.7)\n#     axes[i, 2].set_title(f'Histogram CLAHE 5.0 8x8')\n#     axes[i, 2].set_xlabel('Pixel Intensity') \n#     axes[i, 2].set_ylabel('Frequency')\n    \n# #     # Subplot untuk histogram CLAHE 10.0 4x4\n# #     axes[i, 3].hist(img_clahe_3.flatten(), bins=256, range=(0, 256), color='b', alpha=0.7)\n# #     axes[i, 3].set_title(f'Histogram CLAHE 10.0 4x4')\n# #     axes[i, 3].set_xlabel('Pixel Intensity') \n# #     axes[i, 3].set_ylabel('Frequency')\n    \n# #     # Subplot untuk histogram CLAHE 10.0 8x8\n# #     axes[i, 4].hist(img_clahe_4.flatten(), bins=256, range=(0, 256), color='b', alpha=0.7)\n# #     axes[i, 4].set_title(f'Histogram CLAHE 10.0 8x8')\n# #     axes[i, 4].set_xlabel('Pixel Intensity') \n# #     axes[i, 4].set_ylabel('Frequency')\n\n# plt.tight_layout()\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:24.334125Z","iopub.status.busy":"2024-07-22T14:55:24.333245Z","iopub.status.idle":"2024-07-22T14:55:24.339443Z","shell.execute_reply":"2024-07-22T14:55:24.338545Z"},"papermill":{"duration":0.072593,"end_time":"2024-07-22T14:55:24.341355","exception":false,"start_time":"2024-07-22T14:55:24.268762","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# fig, axes = plt.subplots(len(example_images), 3, figsize=(20, 5 * len(example_images)))\n\n# for i, row in example_images.iterrows():\n#     label = row['diagnosis']\n#     image_name = row['id_code']\n    \n#     class_name = class_mapping[label]\n    \n#     img_path = os.path.join(image_path, f\"{image_name}.png\")\n#     clahe_img_path_1 = os.path.join(clahe_path_1, f\"{image_name}.png\")\n#     clahe_img_path_2 = os.path.join(clahe_path_2, f\"{image_name}.png\")\n#     clahe_img_path_3 = os.path.join(clahe_path_3, f\"{image_name}.png\")\n#     clahe_img_path_4 = os.path.join(clahe_path_4, f\"{image_name}.png\")\n\n#     img = cv2.imread(img_path)\n#     img_clahe_1 = cv2.imread(clahe_img_path_1)\n#     img_clahe_2 = cv2.imread(clahe_img_path_2)\n#     img_clahe_3 = cv2.imread(clahe_img_path_3)\n#     img_clahe_4 = cv2.imread(clahe_img_path_4)\n    \n#     # Subplot untuk histogram gambar asli\n#     axes[i, 0].hist(img.flatten(), bins=256, range=(0, 256), color='b')\n#     axes[i, 0].set_title(f'Histogram Original Image (Diagnosis: {class_name})')\n#     axes[i, 0].set_xlabel('Pixel Intensity') \n#     axes[i, 0].set_ylabel('Frequency')\n    \n# #     # Subplot untuk histogram CLAHE 5.0 4x4\n# #     axes[i, 1].hist(img_clahe_1.flatten(), bins=256, range=(0, 256), color='b', alpha=0.7)\n# #     axes[i, 1].set_title(f'Histogram CLAHE 5.0 4x4')\n# #     axes[i, 1].set_xlabel('Pixel Intensity') \n# #     axes[i, 1].set_ylabel('Frequency')\n    \n# #     # Subplot untuk histogram CLAHE 5.0 8x8\n# #     axes[i, 2].hist(img_clahe_2.flatten(), bins=256, range=(0, 256), color='b', alpha=0.7)\n# #     axes[i, 2].set_title(f'Histogram CLAHE 5.0 8x8')\n# #     axes[i, 2].set_xlabel('Pixel Intensity') \n# #     axes[i, 2].set_ylabel('Frequency')\n    \n#     # Subplot untuk histogram CLAHE 10.0 4x4\n#     axes[i, 1].hist(img_clahe_3.flatten(), bins=256, range=(0, 256), color='b', alpha=0.7)\n#     axes[i, 1].set_title(f'Histogram CLAHE 10.0 4x4')\n#     axes[i, 1].set_xlabel('Pixel Intensity') \n#     axes[i, 1].set_ylabel('Frequency')\n    \n#     # Subplot untuk histogram CLAHE 10.0 8x8\n#     axes[i, 2].hist(img_clahe_4.flatten(), bins=256, range=(0, 256), color='b', alpha=0.7)\n#     axes[i, 2].set_title(f'Histogram CLAHE 10.0 8x8')\n#     axes[i, 2].set_xlabel('Pixel Intensity') \n#     axes[i, 2].set_ylabel('Frequency')\n\n# plt.tight_layout()\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:24.470304Z","iopub.status.busy":"2024-07-22T14:55:24.469917Z","iopub.status.idle":"2024-07-22T14:55:24.475981Z","shell.execute_reply":"2024-07-22T14:55:24.475091Z"},"papermill":{"duration":0.07288,"end_time":"2024-07-22T14:55:24.478027","exception":false,"start_time":"2024-07-22T14:55:24.405147","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Augmentation Data","metadata":{"papermill":{"duration":0.063818,"end_time":"2024-07-22T14:55:24.605428","exception":false,"start_time":"2024-07-22T14:55:24.541610","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"**Split Data 75:25**","metadata":{"papermill":{"duration":0.062098,"end_time":"2024-07-22T14:55:24.729899","exception":false,"start_time":"2024-07-22T14:55:24.667801","status":"completed"},"tags":[]}},{"cell_type":"code","source":"aug_1 = ImageDataGenerator(rescale = 1./255,                          \n                         horizontal_flip = True, \n                         vertical_flip = True, \n                         rotation_range = 120, \n                         zoom_range = 0.1, \n                         width_shift_range = 0.2, \n                         shear_range = 0.15, \n                         fill_mode = 'nearest',\n                         validation_split = validation_split_1)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:24.858368Z","iopub.status.busy":"2024-07-22T14:55:24.857983Z","iopub.status.idle":"2024-07-22T14:55:24.863085Z","shell.execute_reply":"2024-07-22T14:55:24.862257Z"},"papermill":{"duration":0.071654,"end_time":"2024-07-22T14:55:24.865044","exception":false,"start_time":"2024-07-22T14:55:24.793390","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Split Data 80:20**","metadata":{"papermill":{"duration":0.108777,"end_time":"2024-07-22T14:55:25.038733","exception":false,"start_time":"2024-07-22T14:55:24.929956","status":"completed"},"tags":[]}},{"cell_type":"code","source":"aug_2 = ImageDataGenerator(rescale = 1./255,                          \n                         horizontal_flip = True, \n                         vertical_flip = True, \n                         rotation_range = 120, \n                         zoom_range = 0.1, \n                         width_shift_range = 0.2, \n                         shear_range = 0.15, \n                         fill_mode = 'nearest',\n                         validation_split = validation_split_2)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:25.166779Z","iopub.status.busy":"2024-07-22T14:55:25.165858Z","iopub.status.idle":"2024-07-22T14:55:25.171359Z","shell.execute_reply":"2024-07-22T14:55:25.170487Z"},"papermill":{"duration":0.072484,"end_time":"2024-07-22T14:55:25.173429","exception":false,"start_time":"2024-07-22T14:55:25.100945","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.id_code=df.id_code.apply(lambda x: x+\".png\")\ndf['diagnosis'] = df['diagnosis'].astype('str')","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:25.303597Z","iopub.status.busy":"2024-07-22T14:55:25.302721Z","iopub.status.idle":"2024-07-22T14:55:25.312006Z","shell.execute_reply":"2024-07-22T14:55:25.311073Z"},"papermill":{"duration":0.076806,"end_time":"2024-07-22T14:55:25.313979","exception":false,"start_time":"2024-07-22T14:55:25.237173","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.head()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:25.442944Z","iopub.status.busy":"2024-07-22T14:55:25.442545Z","iopub.status.idle":"2024-07-22T14:55:25.452821Z","shell.execute_reply":"2024-07-22T14:55:25.451973Z"},"papermill":{"duration":0.077105,"end_time":"2024-07-22T14:55:25.454774","exception":false,"start_time":"2024-07-22T14:55:25.377669","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 1**\n* clip_limit = 5.0\n* tile_size = 4x4 \n* split data = 75:25","metadata":{"papermill":{"duration":0.063026,"end_time":"2024-07-22T14:55:25.581720","exception":false,"start_time":"2024-07-22T14:55:25.518694","status":"completed"},"tags":[]}},{"cell_type":"code","source":"train_generator_1=aug_1.flow_from_dataframe(dataframe = df, \n                                        directory = \"/kaggle/working/clahe_1/\",\n                                        x_col = \"id_code\", \n                                        y_col = \"diagnosis\",\n                                        batch_size = batch_size, \n                                        class_mode = \"categorical\", \n                                        target_size = target_size,\n                                        subset = 'training',\n#                                         seed=SEED,\n                                        shuffle=False)\n\nvalid_generator_1=aug_1.flow_from_dataframe(dataframe = df, \n                                        directory = \"/kaggle/working/clahe_1/\",\n                                        x_col = \"id_code\",\n                                        y_col = \"diagnosis\",\n                                        batch_size = batch_size, \n                                        class_mode = \"categorical\", \n                                        target_size = target_size,\n                                        subset = 'validation', \n#                                         seed=SEED,\n                                        shuffle = False)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:25.709706Z","iopub.status.busy":"2024-07-22T14:55:25.709342Z","iopub.status.idle":"2024-07-22T14:55:25.808539Z","shell.execute_reply":"2024-07-22T14:55:25.807747Z"},"papermill":{"duration":0.166305,"end_time":"2024-07-22T14:55:25.810777","exception":false,"start_time":"2024-07-22T14:55:25.644472","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# one batch from train generator\nimages, labels = next(train_generator_1)\n\n# show augmentation in a batch (16 sample)\nfig, axes = plt.subplots(1, 16, figsize=(16, 16))\nfor i in range(16):\n    axes[i].imshow(images[i])\n    axes[i].axis('off')\n    axes[i].set_title(f'Class: {np.argmax(labels[i])}')\nplt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:25.941824Z","iopub.status.busy":"2024-07-22T14:55:25.941470Z","iopub.status.idle":"2024-07-22T14:55:27.300665Z","shell.execute_reply":"2024-07-22T14:55:27.299711Z"},"papermill":{"duration":1.428351,"end_time":"2024-07-22T14:55:27.303456","exception":false,"start_time":"2024-07-22T14:55:25.875105","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 2**\n* clip_limit = 5.0\n* tile_size = 8x8 \n* split data = 75:25","metadata":{"papermill":{"duration":0.065855,"end_time":"2024-07-22T14:55:27.436401","exception":false,"start_time":"2024-07-22T14:55:27.370546","status":"completed"},"tags":[]}},{"cell_type":"code","source":"train_generator_2=aug_1.flow_from_dataframe(dataframe = df, \n                                        directory = \"/kaggle/working/clahe_2/\",\n                                        x_col = \"id_code\", \n                                        y_col = \"diagnosis\",\n                                        batch_size = batch_size, \n                                        class_mode = \"categorical\", \n                                        target_size = target_size,\n                                        subset = 'training',\n#                                         seed=SEED,\n                                        shuffle=False)\n\nvalid_generator_2=aug_1.flow_from_dataframe(dataframe = df, \n                                        directory = \"/kaggle/working/clahe_2/\",\n                                        x_col = \"id_code\",\n                                        y_col = \"diagnosis\",\n                                        batch_size = batch_size, \n                                        class_mode = \"categorical\", \n                                        target_size = target_size,\n                                        subset = 'validation', \n#                                         seed=SEED,\n                                        shuffle = False)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:27.568940Z","iopub.status.busy":"2024-07-22T14:55:27.568554Z","iopub.status.idle":"2024-07-22T14:55:27.661713Z","shell.execute_reply":"2024-07-22T14:55:27.660894Z"},"papermill":{"duration":0.162362,"end_time":"2024-07-22T14:55:27.664000","exception":false,"start_time":"2024-07-22T14:55:27.501638","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# one batch from train generator\nimages, labels = next(train_generator_2)\n\n# show augmentation in a batch (16 sample)\nfig, axes = plt.subplots(1, 16, figsize=(16, 16))\nfor i in range(16):\n    axes[i].imshow(images[i])\n    axes[i].axis('off')\n    axes[i].set_title(f'Class: {np.argmax(labels[i])}')\nplt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:27.803095Z","iopub.status.busy":"2024-07-22T14:55:27.802179Z","iopub.status.idle":"2024-07-22T14:55:29.503027Z","shell.execute_reply":"2024-07-22T14:55:29.502068Z"},"papermill":{"duration":1.772857,"end_time":"2024-07-22T14:55:29.505096","exception":false,"start_time":"2024-07-22T14:55:27.732239","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 3**\n* clip_limit = 10.0\n* tile_size = 4x4 \n* split data = 75:25","metadata":{"papermill":{"duration":0.070917,"end_time":"2024-07-22T14:55:29.647186","exception":false,"start_time":"2024-07-22T14:55:29.576269","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# train_generator_3=aug_1.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/clahe_3/\",\n#                                         x_col = \"id_code\", \n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'training',\n# #                                         seed=SEED,\n#                                         shuffle=False)\n\n# valid_generator_3=aug_1.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/clahe_3/\",\n#                                         x_col = \"id_code\",\n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'validation', \n# #                                         seed=SEED,\n#                                         shuffle = False)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:29.792739Z","iopub.status.busy":"2024-07-22T14:55:29.792162Z","iopub.status.idle":"2024-07-22T14:55:29.797790Z","shell.execute_reply":"2024-07-22T14:55:29.796807Z"},"papermill":{"duration":0.084884,"end_time":"2024-07-22T14:55:29.799782","exception":false,"start_time":"2024-07-22T14:55:29.714898","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # one batch from train generator\n# images, labels = next(train_generator_3)\n\n# # show augmentation in a batch (16 sample)\n# fig, axes = plt.subplots(1, 16, figsize=(16, 16))\n# for i in range(16):\n#     axes[i].imshow(images[i])\n#     axes[i].axis('off')\n#     axes[i].set_title(f'Class: {np.argmax(labels[i])}')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:29.936038Z","iopub.status.busy":"2024-07-22T14:55:29.935347Z","iopub.status.idle":"2024-07-22T14:55:29.939626Z","shell.execute_reply":"2024-07-22T14:55:29.938694Z"},"papermill":{"duration":0.075503,"end_time":"2024-07-22T14:55:29.941642","exception":false,"start_time":"2024-07-22T14:55:29.866139","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 4**\n* clip_limit = 10.0\n* tile_size = 8x8 \n* split data = 75:25","metadata":{"papermill":{"duration":0.066634,"end_time":"2024-07-22T14:55:30.074545","exception":false,"start_time":"2024-07-22T14:55:30.007911","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# train_generator_4=aug_1.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/clahe_4/\",\n#                                         x_col = \"id_code\", \n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'training',\n# #                                         seed=SEED,\n#                                         shuffle=False)\n\n# valid_generator_4=aug_1.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/clahe_4/\",\n#                                         x_col = \"id_code\",\n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'validation', \n# #                                         seed=SEED,\n#                                         shuffle = False)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:30.210427Z","iopub.status.busy":"2024-07-22T14:55:30.210052Z","iopub.status.idle":"2024-07-22T14:55:30.215173Z","shell.execute_reply":"2024-07-22T14:55:30.214278Z"},"papermill":{"duration":0.075806,"end_time":"2024-07-22T14:55:30.217052","exception":false,"start_time":"2024-07-22T14:55:30.141246","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # one batch from train generator\n# images, labels = next(train_generator_4)\n\n# # show augmentation in a batch (16 sample)\n# fig, axes = plt.subplots(1, 16, figsize=(16, 16))\n# for i in range(16):\n#     axes[i].imshow(images[i])\n#     axes[i].axis('off')\n#     axes[i].set_title(f'Class: {np.argmax(labels[i])}')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:30.354040Z","iopub.status.busy":"2024-07-22T14:55:30.353680Z","iopub.status.idle":"2024-07-22T14:55:30.357785Z","shell.execute_reply":"2024-07-22T14:55:30.356983Z"},"papermill":{"duration":0.074702,"end_time":"2024-07-22T14:55:30.359685","exception":false,"start_time":"2024-07-22T14:55:30.284983","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 5**\n* clip_limit = 5.0\n* tile_size = 4x4 \n* split data = 80:20","metadata":{"papermill":{"duration":0.066714,"end_time":"2024-07-22T14:55:30.492999","exception":false,"start_time":"2024-07-22T14:55:30.426285","status":"completed"},"tags":[]}},{"cell_type":"code","source":"train_generator_5=aug_2.flow_from_dataframe(dataframe = df, \n                                        directory = \"/kaggle/working/clahe_1/\",\n                                        x_col = \"id_code\", \n                                        y_col = \"diagnosis\",\n                                        batch_size = batch_size, \n                                        class_mode = \"categorical\", \n                                        target_size = target_size,\n                                        subset = 'training',\n#                                         seed=SEED,\n                                        shuffle=False)\n\nvalid_generator_5=aug_2.flow_from_dataframe(dataframe = df, \n                                        directory = \"/kaggle/working/clahe_1/\",\n                                        x_col = \"id_code\",\n                                        y_col = \"diagnosis\",\n                                        batch_size = batch_size, \n                                        class_mode = \"categorical\", \n                                        target_size = target_size,\n                                        subset = 'validation', \n#                                         seed=SEED,\n                                        shuffle = False)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:30.627926Z","iopub.status.busy":"2024-07-22T14:55:30.627089Z","iopub.status.idle":"2024-07-22T14:55:30.719566Z","shell.execute_reply":"2024-07-22T14:55:30.718526Z"},"papermill":{"duration":0.162531,"end_time":"2024-07-22T14:55:30.721903","exception":false,"start_time":"2024-07-22T14:55:30.559372","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# one batch from train generator\nimages, labels = next(train_generator_5)\n\n# # show augmentation in a batch (16 sample)\n# fig, axes = plt.subplots(1, 16, figsize=(16, 16))\n# for i in range(16):\n#     axes[i].imshow(images[i])\n#     axes[i].axis('off')\n#     axes[i].set_title(f'Class: {np.argmax(labels[i])}')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:30.860413Z","iopub.status.busy":"2024-07-22T14:55:30.859736Z","iopub.status.idle":"2024-07-22T14:55:31.153816Z","shell.execute_reply":"2024-07-22T14:55:31.152802Z"},"papermill":{"duration":0.365706,"end_time":"2024-07-22T14:55:31.156263","exception":false,"start_time":"2024-07-22T14:55:30.790557","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 6**\n* clip_limit = 5.0\n* tile_size = 8x8\n* split data = 80:20","metadata":{"papermill":{"duration":0.066605,"end_time":"2024-07-22T14:55:31.289524","exception":false,"start_time":"2024-07-22T14:55:31.222919","status":"completed"},"tags":[]}},{"cell_type":"code","source":"train_generator_6=aug_2.flow_from_dataframe(dataframe = df, \n                                        directory = \"/kaggle/working/clahe_2/\",\n                                        x_col = \"id_code\", \n                                        y_col = \"diagnosis\",\n                                        batch_size = batch_size, \n                                        class_mode = \"categorical\", \n                                        target_size = target_size,\n                                        subset = 'training',\n#                                         seed=SEED,\n                                        shuffle=False)\n\nvalid_generator_6=aug_2.flow_from_dataframe(dataframe = df, \n                                        directory = \"/kaggle/working/clahe_2/\",\n                                        x_col = \"id_code\",\n                                        y_col = \"diagnosis\",\n                                        batch_size = batch_size, \n                                        class_mode = \"categorical\", \n                                        target_size = target_size,\n                                        subset = 'validation', \n#                                         seed=SEED,\n                                        shuffle = False)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:31.426559Z","iopub.status.busy":"2024-07-22T14:55:31.425707Z","iopub.status.idle":"2024-07-22T14:55:31.516419Z","shell.execute_reply":"2024-07-22T14:55:31.515692Z"},"papermill":{"duration":0.162015,"end_time":"2024-07-22T14:55:31.518414","exception":false,"start_time":"2024-07-22T14:55:31.356399","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# one batch from train generator\nimages, labels = next(train_generator_6)\n\n# show augmentation in a batch (16 sample)\nfig, axes = plt.subplots(1, 16, figsize=(16, 16))\nfor i in range(16):\n    axes[i].imshow(images[i])\n    axes[i].axis('off')\n    axes[i].set_title(f'Class: {np.argmax(labels[i])}')\nplt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:31.655191Z","iopub.status.busy":"2024-07-22T14:55:31.654380Z","iopub.status.idle":"2024-07-22T14:55:32.889909Z","shell.execute_reply":"2024-07-22T14:55:32.889076Z"},"papermill":{"duration":1.30689,"end_time":"2024-07-22T14:55:32.892645","exception":false,"start_time":"2024-07-22T14:55:31.585755","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 7**\n* clip_limit = 10.0\n* tile_size = 4x4 \n* split data = 80:20","metadata":{"papermill":{"duration":0.069046,"end_time":"2024-07-22T14:55:33.031371","exception":false,"start_time":"2024-07-22T14:55:32.962325","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# train_generator_7=aug_2.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/clahe_3/\",\n#                                         x_col = \"id_code\", \n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'training',\n# #                                         seed=SEED,\n#                                         shuffle=False)\n\n# valid_generator_7=aug_2.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/clahe_3/\",\n#                                         x_col = \"id_code\",\n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'validation', \n# #                                         seed=SEED,\n#                                         shuffle = False)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:33.169799Z","iopub.status.busy":"2024-07-22T14:55:33.168932Z","iopub.status.idle":"2024-07-22T14:55:33.174182Z","shell.execute_reply":"2024-07-22T14:55:33.173290Z"},"papermill":{"duration":0.076899,"end_time":"2024-07-22T14:55:33.176067","exception":false,"start_time":"2024-07-22T14:55:33.099168","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # one batch from train generator\n# images, labels = next(train_generator_7)\n\n# # show augmentation in a batch (16 sample)\n# fig, axes = plt.subplots(1, 16, figsize=(16, 16))\n# for i in range(16):\n#     axes[i].imshow(images[i])\n#     axes[i].axis('off')\n#     axes[i].set_title(f'Class: {np.argmax(labels[i])}')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:33.316579Z","iopub.status.busy":"2024-07-22T14:55:33.315740Z","iopub.status.idle":"2024-07-22T14:55:33.320096Z","shell.execute_reply":"2024-07-22T14:55:33.319278Z"},"papermill":{"duration":0.077102,"end_time":"2024-07-22T14:55:33.322007","exception":false,"start_time":"2024-07-22T14:55:33.244905","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 8**\n* clip_limit = 10.0\n* tile_size = 8x8 \n* split data = 80:20","metadata":{"papermill":{"duration":0.068519,"end_time":"2024-07-22T14:55:33.459090","exception":false,"start_time":"2024-07-22T14:55:33.390571","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# train_generator_8=aug_2.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/clahe_4/\",\n#                                         x_col = \"id_code\", \n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'training',\n# #                                         seed=SEED,\n#                                         shuffle=False)\n\n# valid_generator_8=aug_2.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/clahe_4/\",\n#                                         x_col = \"id_code\",\n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'validation', \n# #                                         seed=SEED,\n#                                         shuffle = False)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:33.597542Z","iopub.status.busy":"2024-07-22T14:55:33.596866Z","iopub.status.idle":"2024-07-22T14:55:33.601783Z","shell.execute_reply":"2024-07-22T14:55:33.600922Z"},"papermill":{"duration":0.075984,"end_time":"2024-07-22T14:55:33.603605","exception":false,"start_time":"2024-07-22T14:55:33.527621","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # one batch from train generator\n# images, labels = next(train_generator_8)\n\n# # show augmentation in a batch (16 sample)\n# fig, axes = plt.subplots(1, 16, figsize=(16, 16))\n# for i in range(16):\n#     axes[i].imshow(images[i])\n#     axes[i].axis('off')\n#     axes[i].set_title(f'Class: {np.argmax(labels[i])}')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:33.742508Z","iopub.status.busy":"2024-07-22T14:55:33.741671Z","iopub.status.idle":"2024-07-22T14:55:33.746446Z","shell.execute_reply":"2024-07-22T14:55:33.745562Z"},"papermill":{"duration":0.076644,"end_time":"2024-07-22T14:55:33.748440","exception":false,"start_time":"2024-07-22T14:55:33.671796","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 9**\n* no CLAHE\n* split data = 75:25","metadata":{"papermill":{"duration":0.070048,"end_time":"2024-07-22T14:55:33.887421","exception":false,"start_time":"2024-07-22T14:55:33.817373","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# train_generator_9=aug_1.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/no_clahe/\",\n#                                         x_col = \"id_code\", \n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'training',\n# #                                         seed=SEED,\n#                                         shuffle=False)\n\n# valid_generator_9=aug_1.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/no_clahe/\",\n#                                         x_col = \"id_code\",\n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'validation', \n# #                                         seed=SEED,\n#                                         shuffle = False)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:34.027641Z","iopub.status.busy":"2024-07-22T14:55:34.027297Z","iopub.status.idle":"2024-07-22T14:55:34.032448Z","shell.execute_reply":"2024-07-22T14:55:34.031629Z"},"papermill":{"duration":0.077081,"end_time":"2024-07-22T14:55:34.034450","exception":false,"start_time":"2024-07-22T14:55:33.957369","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # one batch from train generator\n# images, labels = next(train_generator_9)\n\n# # show augmentation in a batch (16 sample)\n# fig, axes = plt.subplots(1, 16, figsize=(16, 16))\n# for i in range(16):\n#     axes[i].imshow(images[i])\n#     axes[i].axis('off')\n#     axes[i].set_title(f'Class: {np.argmax(labels[i])}')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:34.174858Z","iopub.status.busy":"2024-07-22T14:55:34.174145Z","iopub.status.idle":"2024-07-22T14:55:34.178333Z","shell.execute_reply":"2024-07-22T14:55:34.177480Z"},"papermill":{"duration":0.077447,"end_time":"2024-07-22T14:55:34.180263","exception":false,"start_time":"2024-07-22T14:55:34.102816","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 10**\n* no CLAHE\n* split data = 80:20","metadata":{"papermill":{"duration":0.070112,"end_time":"2024-07-22T14:55:34.319321","exception":false,"start_time":"2024-07-22T14:55:34.249209","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# train_generator_10=aug_2.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/no_clahe/\",\n#                                         x_col = \"id_code\", \n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'training',\n# #                                         seed=SEED,\n#                                         shuffle=False)\n\n# valid_generator_10=aug_2.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/no_clahe/\",\n#                                         x_col = \"id_code\",\n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'validation', \n# #                                         seed=SEED,\n#                                         shuffle = False)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:34.459859Z","iopub.status.busy":"2024-07-22T14:55:34.459503Z","iopub.status.idle":"2024-07-22T14:55:34.464418Z","shell.execute_reply":"2024-07-22T14:55:34.463512Z"},"papermill":{"duration":0.077757,"end_time":"2024-07-22T14:55:34.466283","exception":false,"start_time":"2024-07-22T14:55:34.388526","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # one batch from train generator\n# images, labels = next(train_generator_10)\n\n# # show augmentation in a batch (16 sample)\n# fig, axes = plt.subplots(1, 16, figsize=(16, 16))\n# for i in range(16):\n#     axes[i].imshow(images[i])\n#     axes[i].axis('off')\n#     axes[i].set_title(f'Class: {np.argmax(labels[i])}')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:34.607108Z","iopub.status.busy":"2024-07-22T14:55:34.606342Z","iopub.status.idle":"2024-07-22T14:55:34.611015Z","shell.execute_reply":"2024-07-22T14:55:34.610103Z"},"papermill":{"duration":0.078139,"end_time":"2024-07-22T14:55:34.613125","exception":false,"start_time":"2024-07-22T14:55:34.534986","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 11**\n* clip_limit = 20.0\n* tile_size = 4x4 \n* split data = 75:25","metadata":{"papermill":{"duration":0.069476,"end_time":"2024-07-22T14:55:34.755219","exception":false,"start_time":"2024-07-22T14:55:34.685743","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# train_generator_11=aug_1.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/clahe_5/\",\n#                                         x_col = \"id_code\", \n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'training',\n# #                                         seed=SEED,\n#                                         shuffle=False)\n\n# valid_generator_11=aug_1.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/clahe_5/\",\n#                                         x_col = \"id_code\",\n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'validation', \n# #                                         seed=SEED,\n#                                         shuffle = False)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:34.898534Z","iopub.status.busy":"2024-07-22T14:55:34.898138Z","iopub.status.idle":"2024-07-22T14:55:34.903033Z","shell.execute_reply":"2024-07-22T14:55:34.902190Z"},"papermill":{"duration":0.079025,"end_time":"2024-07-22T14:55:34.904943","exception":false,"start_time":"2024-07-22T14:55:34.825918","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # one batch from train generator\n# images, labels = next(train_generator_11)\n\n# # show augmentation in a batch (16 sample)\n# fig, axes = plt.subplots(1, 16, figsize=(16, 16))\n# for i in range(16):\n#     axes[i].imshow(images[i])\n#     axes[i].axis('off')\n#     axes[i].set_title(f'Class: {np.argmax(labels[i])}')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:35.047237Z","iopub.status.busy":"2024-07-22T14:55:35.046334Z","iopub.status.idle":"2024-07-22T14:55:35.050789Z","shell.execute_reply":"2024-07-22T14:55:35.049884Z"},"papermill":{"duration":0.078084,"end_time":"2024-07-22T14:55:35.052966","exception":false,"start_time":"2024-07-22T14:55:34.974882","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 12**\n* clip_limit = 20.0\n* tile_size = 8x8 \n* split data = 75:25","metadata":{"papermill":{"duration":0.069526,"end_time":"2024-07-22T14:55:35.195099","exception":false,"start_time":"2024-07-22T14:55:35.125573","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# train_generator_12=aug_1.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/clahe_6/\",\n#                                         x_col = \"id_code\", \n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'training',\n# #                                         seed=SEED,\n#                                         shuffle=False)\n\n# valid_generator_12=aug_1.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/clahe_6/\",\n#                                         x_col = \"id_code\",\n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'validation', \n# #                                         seed=SEED,\n#                                         shuffle = False)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:35.336279Z","iopub.status.busy":"2024-07-22T14:55:35.335622Z","iopub.status.idle":"2024-07-22T14:55:35.340584Z","shell.execute_reply":"2024-07-22T14:55:35.339675Z"},"papermill":{"duration":0.078149,"end_time":"2024-07-22T14:55:35.342504","exception":false,"start_time":"2024-07-22T14:55:35.264355","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # one batch from train generator\n# images, labels = next(train_generator_12)\n\n# # show augmentation in a batch (16 sample)\n# fig, axes = plt.subplots(1, 16, figsize=(16, 16))\n# for i in range(16):\n#     axes[i].imshow(images[i])\n#     axes[i].axis('off')\n#     axes[i].set_title(f'Class: {np.argmax(labels[i])}')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:35.483627Z","iopub.status.busy":"2024-07-22T14:55:35.482734Z","iopub.status.idle":"2024-07-22T14:55:35.487405Z","shell.execute_reply":"2024-07-22T14:55:35.486504Z"},"papermill":{"duration":0.07729,"end_time":"2024-07-22T14:55:35.489436","exception":false,"start_time":"2024-07-22T14:55:35.412146","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 13**\n* clip_limit = 20.0\n* tile_size = 4x4 \n* split data = 80:20","metadata":{"papermill":{"duration":0.069794,"end_time":"2024-07-22T14:55:35.628743","exception":false,"start_time":"2024-07-22T14:55:35.558949","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# train_generator_13=aug_2.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/clahe_5/\",\n#                                         x_col = \"id_code\", \n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'training',\n# #                                         seed=SEED,\n#                                         shuffle=False)\n\n# valid_generator_13=aug_2.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/clahe_5/\",\n#                                         x_col = \"id_code\",\n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'validation', \n# #                                         seed=SEED,\n#                                         shuffle = False)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:35.770012Z","iopub.status.busy":"2024-07-22T14:55:35.769661Z","iopub.status.idle":"2024-07-22T14:55:35.774588Z","shell.execute_reply":"2024-07-22T14:55:35.773677Z"},"papermill":{"duration":0.077821,"end_time":"2024-07-22T14:55:35.776503","exception":false,"start_time":"2024-07-22T14:55:35.698682","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # one batch from train generator\n# images, labels = next(train_generator_13)\n\n# # show augmentation in a batch (16 sample)\n# fig, axes = plt.subplots(1, 16, figsize=(16, 16))\n# for i in range(16):\n#     axes[i].imshow(images[i])\n#     axes[i].axis('off')\n#     axes[i].set_title(f'Class: {np.argmax(labels[i])}')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:35.920015Z","iopub.status.busy":"2024-07-22T14:55:35.919657Z","iopub.status.idle":"2024-07-22T14:55:35.923998Z","shell.execute_reply":"2024-07-22T14:55:35.923117Z"},"papermill":{"duration":0.078669,"end_time":"2024-07-22T14:55:35.925987","exception":false,"start_time":"2024-07-22T14:55:35.847318","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Model 14**\n* clip_limit = 20.0\n* tile_size = 8x8\n* split data = 80:20","metadata":{"papermill":{"duration":0.069676,"end_time":"2024-07-22T14:55:36.066442","exception":false,"start_time":"2024-07-22T14:55:35.996766","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# train_generator_14=aug_2.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/clahe_6/\",\n#                                         x_col = \"id_code\", \n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'training',\n# #                                         seed=SEED,\n#                                         shuffle=False)\n\n# valid_generator_14=aug_2.flow_from_dataframe(dataframe = df, \n#                                         directory = \"/kaggle/working/clahe_6/\",\n#                                         x_col = \"id_code\",\n#                                         y_col = \"diagnosis\",\n#                                         batch_size = batch_size, \n#                                         class_mode = \"categorical\", \n#                                         target_size = target_size,\n#                                         subset = 'validation', \n# #                                         seed=SEED,\n#                                         shuffle = False)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:36.207065Z","iopub.status.busy":"2024-07-22T14:55:36.206707Z","iopub.status.idle":"2024-07-22T14:55:36.211515Z","shell.execute_reply":"2024-07-22T14:55:36.210635Z"},"papermill":{"duration":0.077676,"end_time":"2024-07-22T14:55:36.213573","exception":false,"start_time":"2024-07-22T14:55:36.135897","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # one batch from train generator\n# images, labels = next(train_generator_14)\n\n# # show augmentation in a batch (16 sample)\n# fig, axes = plt.subplots(1, 16, figsize=(16, 16))\n# for i in range(16):\n#     axes[i].imshow(images[i])\n#     axes[i].axis('off')\n#     axes[i].set_title(f'Class: {np.argmax(labels[i])}')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:36.356371Z","iopub.status.busy":"2024-07-22T14:55:36.355966Z","iopub.status.idle":"2024-07-22T14:55:36.360371Z","shell.execute_reply":"2024-07-22T14:55:36.359445Z"},"papermill":{"duration":0.078979,"end_time":"2024-07-22T14:55:36.362299","exception":false,"start_time":"2024-07-22T14:55:36.283320","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Inception V4","metadata":{"papermill":{"duration":0.069124,"end_time":"2024-07-22T14:55:36.500828","exception":false,"start_time":"2024-07-22T14:55:36.431704","status":"completed"},"tags":[]}},{"cell_type":"code","source":"WEIGHTS_PATH = 'https://github.com/kentsommer/keras-inceptionV4/releases/download/2.1/inception-v4_weights_tf_dim_ordering_tf_kernels.h5'\nWEIGHTS_PATH_NO_TOP = 'https://github.com/kentsommer/keras-inceptionV4/releases/download/2.1/inception-v4_weights_tf_dim_ordering_tf_kernels_notop.h5'\n\n\ndef preprocess_input(x):\n    x = np.divide(x, 255.0)\n    x = np.subtract(x, 0.5)\n    x = np.multiply(x, 2.0)\n    return x\n\n\ndef conv2d_bn(x, nb_filter, num_row, num_col,\n              padding='same', strides=(1, 1), use_bias=False):\n    \"\"\"\n    Utility function to apply conv + BN. \n    (Slightly modified from https://github.com/fchollet/keras/blob/master/keras/applications/inception_v3.py)\n    \"\"\"\n    if K.image_data_format() == 'channels_first':\n        channel_axis = 1\n    else:\n        channel_axis = -1\n    x = Convolution2D(nb_filter, (num_row, num_col),\n                      strides=strides,\n                      padding=padding,\n                      use_bias=use_bias,\n                      kernel_regularizer=regularizers.l2(0.00004),\n                      kernel_initializer=initializers.VarianceScaling(scale=2.0, mode='fan_in', distribution='normal', seed=None))(x)\n    x = BatchNormalization(axis=channel_axis, momentum=0.9997, scale=False)(x)\n    x = Activation('relu')(x)\n    return x\n\n\ndef block_inception_a(input):\n    if K.image_data_format() == 'channels_first':\n        channel_axis = 1\n    else:\n        channel_axis = -1\n\n    branch_0 = conv2d_bn(input, 96, 1, 1)\n\n    branch_1 = conv2d_bn(input, 64, 1, 1)\n    branch_1 = conv2d_bn(branch_1, 96, 3, 3)\n\n    branch_2 = conv2d_bn(input, 64, 1, 1)\n    branch_2 = conv2d_bn(branch_2, 96, 3, 3)\n    branch_2 = conv2d_bn(branch_2, 96, 3, 3)\n\n    branch_3 = AveragePooling2D((3,3), strides=(1,1), padding='same')(input)\n    branch_3 = conv2d_bn(branch_3, 96, 1, 1)\n\n    x = concatenate([branch_0, branch_1, branch_2, branch_3], axis=channel_axis)\n    return x\n\n\ndef block_reduction_a(input):\n    if K.image_data_format() == 'channels_first':\n        channel_axis = 1\n    else:\n        channel_axis = -1\n\n    branch_0 = conv2d_bn(input, 384, 3, 3, strides=(2,2), padding='valid')\n\n    branch_1 = conv2d_bn(input, 192, 1, 1)\n    branch_1 = conv2d_bn(branch_1, 224, 3, 3)\n    branch_1 = conv2d_bn(branch_1, 256, 3, 3, strides=(2,2), padding='valid')\n\n    branch_2 = MaxPooling2D((3,3), strides=(2,2), padding='valid')(input)\n\n    x = concatenate([branch_0, branch_1, branch_2], axis=channel_axis)\n    return x\n\n\ndef block_inception_b(input):\n    if K.image_data_format() == 'channels_first':\n        channel_axis = 1\n    else:\n        channel_axis = -1\n\n    branch_0 = conv2d_bn(input, 384, 1, 1)\n\n    branch_1 = conv2d_bn(input, 192, 1, 1)\n    branch_1 = conv2d_bn(branch_1, 224, 1, 7)\n    branch_1 = conv2d_bn(branch_1, 256, 7, 1)\n\n    branch_2 = conv2d_bn(input, 192, 1, 1)\n    branch_2 = conv2d_bn(branch_2, 192, 7, 1)\n    branch_2 = conv2d_bn(branch_2, 224, 1, 7)\n    branch_2 = conv2d_bn(branch_2, 224, 7, 1)\n    branch_2 = conv2d_bn(branch_2, 256, 1, 7)\n\n    branch_3 = AveragePooling2D((3,3), strides=(1,1), padding='same')(input)\n    branch_3 = conv2d_bn(branch_3, 128, 1, 1)\n\n    x = concatenate([branch_0, branch_1, branch_2, branch_3], axis=channel_axis)\n    return x\n\n\ndef block_reduction_b(input):\n    if K.image_data_format() == 'channels_first':\n        channel_axis = 1\n    else:\n        channel_axis = -1\n\n    branch_0 = conv2d_bn(input, 192, 1, 1)\n    branch_0 = conv2d_bn(branch_0, 192, 3, 3, strides=(2, 2), padding='valid')\n\n    branch_1 = conv2d_bn(input, 256, 1, 1)\n    branch_1 = conv2d_bn(branch_1, 256, 1, 7)\n    branch_1 = conv2d_bn(branch_1, 320, 7, 1)\n    branch_1 = conv2d_bn(branch_1, 320, 3, 3, strides=(2,2), padding='valid')\n\n    branch_2 = MaxPooling2D((3, 3), strides=(2, 2), padding='valid')(input)\n\n    x = concatenate([branch_0, branch_1, branch_2], axis=channel_axis)\n    return x\n\n\ndef block_inception_c(input):\n    if K.image_data_format() == 'channels_first':\n        channel_axis = 1\n    else:\n        channel_axis = -1\n\n    branch_0 = conv2d_bn(input, 256, 1, 1)\n\n    branch_1 = conv2d_bn(input, 384, 1, 1)\n    branch_10 = conv2d_bn(branch_1, 256, 1, 3)\n    branch_11 = conv2d_bn(branch_1, 256, 3, 1)\n    branch_1 = concatenate([branch_10, branch_11], axis=channel_axis)\n\n\n    branch_2 = conv2d_bn(input, 384, 1, 1)\n    branch_2 = conv2d_bn(branch_2, 448, 3, 1)\n    branch_2 = conv2d_bn(branch_2, 512, 1, 3)\n    branch_20 = conv2d_bn(branch_2, 256, 1, 3)\n    branch_21 = conv2d_bn(branch_2, 256, 3, 1)\n    branch_2 = concatenate([branch_20, branch_21], axis=channel_axis)\n\n    branch_3 = AveragePooling2D((3, 3), strides=(1, 1), padding='same')(input)\n    branch_3 = conv2d_bn(branch_3, 256, 1, 1)\n\n    x = concatenate([branch_0, branch_1, branch_2, branch_3], axis=channel_axis)\n    return x\n\n\ndef inception_v4_base(input):\n    if K.image_data_format() == 'channels_first':\n        channel_axis = 1\n    else:\n        channel_axis = -1\n\n    # Input Shape is 299 x 299 x 3 (th) or 3 x 299 x 299 (th)\n    net = conv2d_bn(input, 32, 3, 3, strides=(2,2), padding='valid')\n    net = conv2d_bn(net, 32, 3, 3, padding='valid')\n    net = conv2d_bn(net, 64, 3, 3)\n\n    branch_0 = MaxPooling2D((3,3), strides=(2,2), padding='valid')(net)\n\n    branch_1 = conv2d_bn(net, 96, 3, 3, strides=(2,2), padding='valid')\n\n    net = concatenate([branch_0, branch_1], axis=channel_axis)\n\n    branch_0 = conv2d_bn(net, 64, 1, 1)\n    branch_0 = conv2d_bn(branch_0, 96, 3, 3, padding='valid')\n\n    branch_1 = conv2d_bn(net, 64, 1, 1)\n    branch_1 = conv2d_bn(branch_1, 64, 1, 7)\n    branch_1 = conv2d_bn(branch_1, 64, 7, 1)\n    branch_1 = conv2d_bn(branch_1, 96, 3, 3, padding='valid')\n\n    net = concatenate([branch_0, branch_1], axis=channel_axis)\n\n    branch_0 = conv2d_bn(net, 192, 3, 3, strides=(2,2), padding='valid')\n    branch_1 = MaxPooling2D((3,3), strides=(2,2), padding='valid')(net)\n\n    net = concatenate([branch_0, branch_1], axis=channel_axis)\n\n    # 35 x 35 x 384\n    # 4 x Inception-A blocks\n    for idx in range(4):\n    \tnet = block_inception_a(net)\n\n    # 35 x 35 x 384\n    # Reduction-A block\n    net = block_reduction_a(net)\n\n    # 17 x 17 x 1024\n    # 7 x Inception-B blocks\n    for idx in range(7):\n    \tnet = block_inception_b(net)\n\n    # 17 x 17 x 1024\n    # Reduction-B block\n    net = block_reduction_b(net)\n\n    # 8 x 8 x 1536\n    # 3 x Inception-C blocks\n    for idx in range(3):\n    \tnet = block_inception_c(net)\n\n    return net\n\n\ndef inception_v4(num_classes, dropout_keep_prob, weights, include_top):\n    '''\n    Creates the inception v4 network\n\n    Args:\n    \tnum_classes: number of classes\n    \tdropout_keep_prob: float, the fraction to keep before final layer.\n    \n    Returns: \n    \tlogits: the logits outputs of the model.\n    '''\n\n    # Input Shape is 299 x 299 x 3 (tf) or 3 x 299 x 299 (th)\n    if K.image_data_format() == 'channels_first':\n        inputs = Input((3, 299, 299))\n    else:\n        inputs = Input((299, 299, 3))\n\n    # Make inception base\n    x = inception_v4_base(inputs)\n\n\n    # Final pooling and prediction\n    if include_top:\n        # 1 x 1 x 1536\n        x = AveragePooling2D((8,8), padding='valid')(x)\n        x = Dropout(dropout_keep_prob)(x)\n        x = Flatten()(x)\n        # 1536\n        x = Dense(units=num_classes, activation='softmax')(x)\n\n    model = Model(inputs, x, name='inception_v4')\n\n    # load weights\n    if weights == 'imagenet':\n        if K.image_data_format() == 'channels_first':\n            if K.backend() == 'tensorflow':\n                warnings.warn('You are using the TensorFlow backend, yet you '\n                              'are using the Theano '\n                              'image data format convention '\n                              '(`image_data_format=\"channels_first\"`). '\n                              'For best performance, set '\n                              '`image_data_format=\"channels_last\"` in '\n                              'your Keras config '\n                              'at ~/.keras/keras.json.')\n        if include_top:\n            weights_path = get_file(\n                'inception-v4_weights_tf_dim_ordering_tf_kernels.h5',\n                WEIGHTS_PATH,\n                cache_subdir='models',\n                md5_hash='9fe79d77f793fe874470d84ca6ba4a3b')\n        else:\n            weights_path = get_file(\n                'inception-v4_weights_tf_dim_ordering_tf_kernels_notop.h5',\n                WEIGHTS_PATH_NO_TOP,\n                cache_subdir='models',\n                md5_hash='9296b46b5971573064d12e4669110969')\n        model.load_weights(weights_path, by_name=True)\n    return model\n\n\ndef create_model(num_classes=1001, dropout_prob=0.2, weights=None, include_top=False):\n    return inception_v4(num_classes, dropout_prob, weights, include_top)\n# ----------------------------------------------------------\nincept_model = create_model(num_classes=1001, dropout_prob=0.2, weights=None, include_top=False)\nincept_model.load_weights('../input/inceptionv4-weight-file-notop/inception-v4_weights_tf_dim_ordering_tf_kernels_notop.h5')\n\n\nfor l in incept_model.layers: \n    if l is not None: l.trainable = True \n        \nx = incept_model.output\nx = GlobalAveragePooling2D(data_format='channels_last')(x)\nx = BatchNormalization()(x)\nx = Dense(512, activation='relu')(x)\npredictions = Dense(5, activation='softmax')(x)\n\nmodel = Model(inputs=incept_model.input, outputs=predictions)        \n# model.summary()","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2024-07-22T14:55:36.642661Z","iopub.status.busy":"2024-07-22T14:55:36.642295Z","iopub.status.idle":"2024-07-22T14:55:42.080723Z","shell.execute_reply":"2024-07-22T14:55:42.079941Z"},"papermill":{"duration":5.512338,"end_time":"2024-07-22T14:55:42.083028","exception":false,"start_time":"2024-07-22T14:55:36.570690","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # plot model architecture\n# from keras.utils import plot_model\n# plot_model(model, to_file='model_plot.png', show_shapes=True, show_layer_names=True)","metadata":{"_kg_hide-output":true,"execution":{"iopub.execute_input":"2024-07-22T14:55:42.224771Z","iopub.status.busy":"2024-07-22T14:55:42.223803Z","iopub.status.idle":"2024-07-22T14:55:42.228101Z","shell.execute_reply":"2024-07-22T14:55:42.227359Z"},"papermill":{"duration":0.077114,"end_time":"2024-07-22T14:55:42.229999","exception":false,"start_time":"2024-07-22T14:55:42.152885","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"papermill":{"duration":0.116064,"end_time":"2024-07-22T14:55:42.415837","exception":false,"start_time":"2024-07-22T14:55:42.299773","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model 1\n\n* clip_limit = 5.0\n* tile_size = 4x4 \n* split data = 75:25","metadata":{"papermill":{"duration":0.068557,"end_time":"2024-07-22T14:55:42.554534","exception":false,"start_time":"2024-07-22T14:55:42.485977","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# define callback to save best model\ncheckpoint_1 = ModelCheckpoint(\"best_model_1.keras\", save_best_only=True)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:42.695248Z","iopub.status.busy":"2024-07-22T14:55:42.694312Z","iopub.status.idle":"2024-07-22T14:55:42.698843Z","shell.execute_reply":"2024-07-22T14:55:42.697896Z"},"papermill":{"duration":0.07728,"end_time":"2024-07-22T14:55:42.700746","exception":false,"start_time":"2024-07-22T14:55:42.623466","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# compile model 1\nmodel_1 = Model(inputs=incept_model.input, outputs=predictions)\nmodel_1.compile(optimizer = keras.optimizers.SGD(learning_rate=learning_rate),\n                loss = 'categorical_crossentropy',\n                metrics = ['accuracy'])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:42.842392Z","iopub.status.busy":"2024-07-22T14:55:42.842004Z","iopub.status.idle":"2024-07-22T14:55:42.930207Z","shell.execute_reply":"2024-07-22T14:55:42.929410Z"},"papermill":{"duration":0.161863,"end_time":"2024-07-22T14:55:42.932413","exception":false,"start_time":"2024-07-22T14:55:42.770550","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history_1 = model_1.fit(train_generator_1, \n                      validation_data=valid_generator_1,\n                      epochs=epochs,\n                      callbacks=[checkpoint_1])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T14:55:43.075348Z","iopub.status.busy":"2024-07-22T14:55:43.074960Z","iopub.status.idle":"2024-07-22T16:59:59.865781Z","shell.execute_reply":"2024-07-22T16:59:59.864779Z"},"papermill":{"duration":7458.431682,"end_time":"2024-07-22T17:00:01.435618","exception":false,"start_time":"2024-07-22T14:55:43.003936","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# evaluate validation data\nvalidation_loss, validation_accuracy = model_1.evaluate(valid_generator_1)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T17:00:04.507401Z","iopub.status.busy":"2024-07-22T17:00:04.506999Z","iopub.status.idle":"2024-07-22T17:00:22.687212Z","shell.execute_reply":"2024-07-22T17:00:22.686396Z"},"papermill":{"duration":19.763406,"end_time":"2024-07-22T17:00:22.689239","exception":false,"start_time":"2024-07-22T17:00:02.925833","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# show best accuracy and loss result\nmax_val_acc = max(history_1.history['val_accuracy'])\nmax_train_acc = max(history_1.history['accuracy'])\nmin_val_loss = min(history_1.history['val_loss'])\nmin_train_loss = min(history_1.history['loss'])\n\nprint('Akurasi Training Tertinggi:', max_train_acc)\nprint('Akurasi Validasi Tertinggi:', max_val_acc)\nprint('Loss Training Terendah:', min_train_loss)\nprint('Loss Validasi Terendah:', min_val_loss)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T17:00:25.772821Z","iopub.status.busy":"2024-07-22T17:00:25.772000Z","iopub.status.idle":"2024-07-22T17:00:25.778487Z","shell.execute_reply":"2024-07-22T17:00:25.777646Z"},"papermill":{"duration":1.600937,"end_time":"2024-07-22T17:00:25.780609","exception":false,"start_time":"2024-07-22T17:00:24.179672","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Visualize Accuracy and Loss","metadata":{"papermill":{"duration":1.569857,"end_time":"2024-07-22T17:00:28.859273","exception":false,"start_time":"2024-07-22T17:00:27.289416","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# visualize accuracy and loss\nacc = history_1.history['accuracy']\nval_acc = history_1.history['val_accuracy']\nloss = history_1.history['loss']\nval_loss = history_1.history['val_loss']\n\nplt.figure(figsize=(20, 5))\n\n# train and validation acc\nplt.subplot(1, 2, 1)\nplt.title(\"Akurasi Model 1, CLAHE 5.0 4x4, Split 75:25\")\nplt.plot(acc,label=\"Accuracy\")\nplt.plot(val_acc, label=\"Validation Accuracy\")\nplt.plot( np.argmax(val_acc), np.max(val_acc), marker=\"x\", color=\"r\", label=\"Best model\")\nplt.xlabel(\"Epochs\")\nplt.ylabel(\"Accuracy\")\nplt.legend()\n# plt.figure()\n\n# train and validation loss\nplt.subplot(1, 2, 2)\nplt.title(\"Loss Model 1, CLAHE 5.0 4x4, Split 75:25\")\nplt.plot(loss, label=\"Loss\")\nplt.plot(val_loss, label=\"Validation loss\")\nplt.plot( np.argmin(val_loss), np.min(val_loss), marker=\"x\", color=\"r\", label=\"Best model\")\nplt.xlabel(\"Epochs\")\nplt.ylabel(\"Loss\")\nplt.legend();\nplt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T17:00:31.942100Z","iopub.status.busy":"2024-07-22T17:00:31.940917Z","iopub.status.idle":"2024-07-22T17:00:32.465164Z","shell.execute_reply":"2024-07-22T17:00:32.464205Z"},"papermill":{"duration":2.013319,"end_time":"2024-07-22T17:00:32.467110","exception":false,"start_time":"2024-07-22T17:00:30.453791","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Predict Data Validation ","metadata":{"papermill":{"duration":1.581756,"end_time":"2024-07-22T17:00:35.628080","exception":false,"start_time":"2024-07-22T17:00:34.046324","status":"completed"},"tags":[]}},{"cell_type":"code","source":"from keras.models import Model\n\n# collect all validation label\ny_val_1 = valid_generator_1.classes\n\n# predict data validation\ny_pred_1 = np.argmax(model_1.predict(valid_generator_1, steps=len(valid_generator_1)), axis=1)\n\n# dataframe from prediction\ndf_model_1 = pd.DataFrame({'Actual': y_val_1, 'Prediction': y_pred_1})\nprint(df_model_1)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T17:00:38.701419Z","iopub.status.busy":"2024-07-22T17:00:38.701010Z","iopub.status.idle":"2024-07-22T17:01:11.127422Z","shell.execute_reply":"2024-07-22T17:01:11.126399Z"},"papermill":{"duration":35.510453,"end_time":"2024-07-22T17:01:12.641601","exception":false,"start_time":"2024-07-22T17:00:37.131148","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Confussion Matrix","metadata":{"papermill":{"duration":1.583222,"end_time":"2024-07-22T17:01:15.721800","exception":false,"start_time":"2024-07-22T17:01:14.138578","status":"completed"},"tags":[]}},{"cell_type":"code","source":"cm_1 = confusion_matrix(y_val_1, y_pred_1)\n\n# heatmap from confussion_matrix\nax = plt.subplot()\nsns.heatmap(cm_1, annot=True, fmt='d', ax=ax, cbar=False, cmap='Blues')\n\nax.set_xlabel('Predicted labels')\nax.set_ylabel('True labels')\nax.set_title('Confusion Matrix')\nplt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T17:01:18.893888Z","iopub.status.busy":"2024-07-22T17:01:18.893527Z","iopub.status.idle":"2024-07-22T17:01:19.151412Z","shell.execute_reply":"2024-07-22T17:01:19.150415Z"},"papermill":{"duration":1.859178,"end_time":"2024-07-22T17:01:19.153620","exception":false,"start_time":"2024-07-22T17:01:17.294442","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Classification Report","metadata":{"papermill":{"duration":1.582058,"end_time":"2024-07-22T17:01:22.226316","exception":false,"start_time":"2024-07-22T17:01:20.644258","status":"completed"},"tags":[]}},{"cell_type":"code","source":"class_names = ['No DR', 'Mild', 'Moderate', 'Severe', 'Proliferative DR']\nreport_1 = classification_report(y_val_1, y_pred_1, target_names=class_names)\n\nprint(\"Classification Report:\")\nprint(report_1)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T17:01:25.306430Z","iopub.status.busy":"2024-07-22T17:01:25.305582Z","iopub.status.idle":"2024-07-22T17:01:25.322237Z","shell.execute_reply":"2024-07-22T17:01:25.321138Z"},"papermill":{"duration":1.605588,"end_time":"2024-07-22T17:01:25.324115","exception":false,"start_time":"2024-07-22T17:01:23.718527","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model 2\n\n* clip_limit = 5.0\n* tile_size = 8x8 \n* split data = 75:25","metadata":{"papermill":{"duration":1.601848,"end_time":"2024-07-22T17:01:28.429772","exception":false,"start_time":"2024-07-22T17:01:26.827924","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# define callback to save best model\ncheckpoint_2 = ModelCheckpoint(\"best_model_2.keras\", save_best_only=True)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T17:01:31.551926Z","iopub.status.busy":"2024-07-22T17:01:31.550825Z","iopub.status.idle":"2024-07-22T17:01:31.555589Z","shell.execute_reply":"2024-07-22T17:01:31.554601Z"},"papermill":{"duration":1.58541,"end_time":"2024-07-22T17:01:31.557611","exception":false,"start_time":"2024-07-22T17:01:29.972201","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# compile model 2\nmodel_2 = Model(inputs=incept_model.input, outputs=predictions)\nmodel_2.compile(optimizer = keras.optimizers.SGD(learning_rate=learning_rate),\n                loss = 'categorical_crossentropy',\n                metrics = ['accuracy'])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T17:01:34.634180Z","iopub.status.busy":"2024-07-22T17:01:34.633801Z","iopub.status.idle":"2024-07-22T17:01:34.718213Z","shell.execute_reply":"2024-07-22T17:01:34.717397Z"},"papermill":{"duration":1.672701,"end_time":"2024-07-22T17:01:34.720563","exception":false,"start_time":"2024-07-22T17:01:33.047862","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history_2 = model_2.fit(train_generator_2, \n                                  validation_data=valid_generator_2,\n                                  epochs=epochs,\n                                  callbacks=[checkpoint_2])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T17:01:37.847074Z","iopub.status.busy":"2024-07-22T17:01:37.846719Z","iopub.status.idle":"2024-07-22T19:04:20.297290Z","shell.execute_reply":"2024-07-22T19:04:20.296281Z"},"papermill":{"duration":7367.220492,"end_time":"2024-07-22T19:04:23.442767","exception":false,"start_time":"2024-07-22T17:01:36.222275","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# evaluate validation data\nvalidation_loss, validation_accuracy = model_2.evaluate(valid_generator_2)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:04:29.431125Z","iopub.status.busy":"2024-07-22T19:04:29.430757Z","iopub.status.idle":"2024-07-22T19:04:47.035884Z","shell.execute_reply":"2024-07-22T19:04:47.034922Z"},"papermill":{"duration":20.521759,"end_time":"2024-07-22T19:04:47.038158","exception":false,"start_time":"2024-07-22T19:04:26.516399","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# show best accuracy and loss result\nmax_val_acc = max(history_2.history['val_accuracy'])\nmax_train_acc = max(history_2.history['accuracy'])\nmin_val_loss = min(history_2.history['val_loss'])\nmin_train_loss = min(history_2.history['loss'])\n\nprint('Akurasi Training Tertinggi:', max_train_acc)\nprint('Akurasi Validasi Tertinggi:', max_val_acc)\nprint('Loss Training Terendah:', min_train_loss)\nprint('Loss Validasi Terendah:', min_val_loss)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:04:53.103397Z","iopub.status.busy":"2024-07-22T19:04:53.102706Z","iopub.status.idle":"2024-07-22T19:04:53.109379Z","shell.execute_reply":"2024-07-22T19:04:53.108474Z"},"papermill":{"duration":3.020921,"end_time":"2024-07-22T19:04:53.111412","exception":false,"start_time":"2024-07-22T19:04:50.090491","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Visualize Accuracy and Loss","metadata":{"papermill":{"duration":3.066521,"end_time":"2024-07-22T19:04:59.247979","exception":false,"start_time":"2024-07-22T19:04:56.181458","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# visualize accuracy and loss\nacc = history_2.history['accuracy']\nval_acc = history_2.history['val_accuracy']\nloss = history_2.history['loss']\nval_loss = history_2.history['val_loss']\n\nplt.figure(figsize=(20, 5))\n\n# train and validation acc\nplt.subplot(1, 2, 1)\nplt.title(\"Akurasi Model 2, CLAHE 5.0 8x8, Split 75:25\")\nplt.plot(acc,label=\"Accuracy\")\nplt.plot(val_acc, label=\"Validation Accuracy\")\nplt.plot( np.argmax(val_acc), np.max(val_acc), marker=\"x\", color=\"r\", label=\"Best model\")\nplt.xlabel(\"Epochs\")\nplt.ylabel(\"Accuracy\")\nplt.legend()\n# plt.figure()\n\n# train and validation loss\nplt.subplot(1, 2, 2)\nplt.title(\"Loss Model 2, CLAHE 5.0 8x8, Split 75:25\")\nplt.plot(loss, label=\"Loss\")\nplt.plot(val_loss, label=\"Validation loss\")\nplt.plot( np.argmin(val_loss), np.min(val_loss), marker=\"x\", color=\"r\", label=\"Best model\")\nplt.xlabel(\"Epochs\")\nplt.ylabel(\"Loss\")\nplt.legend();\nplt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:05:05.312914Z","iopub.status.busy":"2024-07-22T19:05:05.311932Z","iopub.status.idle":"2024-07-22T19:05:05.780624Z","shell.execute_reply":"2024-07-22T19:05:05.779697Z"},"papermill":{"duration":3.522402,"end_time":"2024-07-22T19:05:05.783323","exception":false,"start_time":"2024-07-22T19:05:02.260921","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Predict Data Validation ","metadata":{"papermill":{"duration":3.027639,"end_time":"2024-07-22T19:05:11.752300","exception":false,"start_time":"2024-07-22T19:05:08.724661","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# collect all validation label\ny_val_2 = valid_generator_2.classes\n\n# predict data validation\ny_pred_2 = np.argmax(model_2.predict(valid_generator_2, steps=len(valid_generator_2)), axis=1)\n\n# dataframe from prediction\ndf_model_2 = pd.DataFrame({'Actual': y_val_2, 'Prediction': y_pred_2})\nprint(df_model_2)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:05:17.822789Z","iopub.status.busy":"2024-07-22T19:05:17.822404Z","iopub.status.idle":"2024-07-22T19:05:48.787114Z","shell.execute_reply":"2024-07-22T19:05:48.786269Z"},"papermill":{"duration":37.018727,"end_time":"2024-07-22T19:05:51.788782","exception":false,"start_time":"2024-07-22T19:05:14.770055","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Confussion Matrix","metadata":{"papermill":{"duration":3.100857,"end_time":"2024-07-22T19:05:57.777976","exception":false,"start_time":"2024-07-22T19:05:54.677119","status":"completed"},"tags":[]}},{"cell_type":"code","source":"cm_2 = confusion_matrix(y_val_2, y_pred_2)\n\n# heatmap from confussion_matrix\nax = plt.subplot()\nsns.heatmap(cm_2, annot=True, fmt='d', ax=ax, cbar=False, cmap='Blues')\n\nax.set_xlabel('Predicted labels')\nax.set_ylabel('True labels')\nax.set_title('Confusion Matrix')\nplt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:06:03.819996Z","iopub.status.busy":"2024-07-22T19:06:03.819116Z","iopub.status.idle":"2024-07-22T19:06:04.069222Z","shell.execute_reply":"2024-07-22T19:06:04.068303Z"},"papermill":{"duration":3.283259,"end_time":"2024-07-22T19:06:04.071592","exception":false,"start_time":"2024-07-22T19:06:00.788333","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Classification Report","metadata":{"papermill":{"duration":3.0185,"end_time":"2024-07-22T19:06:10.161623","exception":false,"start_time":"2024-07-22T19:06:07.143123","status":"completed"},"tags":[]}},{"cell_type":"code","source":"class_names = ['No DR', 'Mild', 'Moderate', 'Severe', 'Proliferative DR']\nreport_2 = classification_report(y_val_2, y_pred_2, target_names=class_names)\n\nprint(\"Classification Report:\")\nprint(report_2)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:06:16.220310Z","iopub.status.busy":"2024-07-22T19:06:16.219256Z","iopub.status.idle":"2024-07-22T19:06:16.233640Z","shell.execute_reply":"2024-07-22T19:06:16.232658Z"},"papermill":{"duration":3.046172,"end_time":"2024-07-22T19:06:16.235542","exception":false,"start_time":"2024-07-22T19:06:13.189370","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model 3\n\n* clip_limit = 10.0\n* tile_size = 4x4 \n* split data = 75:25","metadata":{"papermill":{"duration":3.004376,"end_time":"2024-07-22T19:06:22.164941","exception":false,"start_time":"2024-07-22T19:06:19.160565","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # define callback to save best model\n# checkpoint_3 = ModelCheckpoint(\"best_model_3.keras\", save_best_only=True)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:06:28.296320Z","iopub.status.busy":"2024-07-22T19:06:28.295545Z","iopub.status.idle":"2024-07-22T19:06:28.299939Z","shell.execute_reply":"2024-07-22T19:06:28.299000Z"},"papermill":{"duration":3.125835,"end_time":"2024-07-22T19:06:28.301988","exception":false,"start_time":"2024-07-22T19:06:25.176153","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # compile model 3\n# model_3 = Model(inputs=incept_model.input, outputs=predictions)\n# model_3.compile(optimizer = keras.optimizers.SGD(learning_rate=learning_rate),\n#                 loss = 'categorical_crossentropy',\n#                 metrics = ['accuracy'])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:06:34.356052Z","iopub.status.busy":"2024-07-22T19:06:34.355669Z","iopub.status.idle":"2024-07-22T19:06:34.360362Z","shell.execute_reply":"2024-07-22T19:06:34.359498Z"},"papermill":{"duration":3.031308,"end_time":"2024-07-22T19:06:34.362311","exception":false,"start_time":"2024-07-22T19:06:31.331003","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# history_3 = model_3.fit(train_generator_3, \n#                                   validation_data=valid_generator_3,\n#                                   epochs=epochs,\n#                                   callbacks=[checkpoint_3])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:06:40.331744Z","iopub.status.busy":"2024-07-22T19:06:40.331028Z","iopub.status.idle":"2024-07-22T19:06:40.335200Z","shell.execute_reply":"2024-07-22T19:06:40.334359Z"},"papermill":{"duration":2.91011,"end_time":"2024-07-22T19:06:40.337208","exception":false,"start_time":"2024-07-22T19:06:37.427098","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # evaluate validation data\n# validation_loss, validation_accuracy = model_3.evaluate(valid_generator_3)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:06:46.374327Z","iopub.status.busy":"2024-07-22T19:06:46.373931Z","iopub.status.idle":"2024-07-22T19:06:46.378527Z","shell.execute_reply":"2024-07-22T19:06:46.377668Z"},"papermill":{"duration":3.015354,"end_time":"2024-07-22T19:06:46.380489","exception":false,"start_time":"2024-07-22T19:06:43.365135","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # show best accuracy and loss result\n# max_val_acc = max(history_3.history['val_accuracy'])\n# max_train_acc = max(history_3.history['accuracy'])\n# min_val_loss = min(history_3.history['val_loss'])\n# min_train_loss = min(history_3.history['loss'])\n\n# print('Akurasi Training Tertinggi:', max_train_acc)\n# print('Akurasi Validasi Tertinggi:', max_val_acc)\n# print('Loss Training Terendah:', min_train_loss)\n# print('Loss Validasi Terendah:', min_val_loss)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:06:52.420359Z","iopub.status.busy":"2024-07-22T19:06:52.419643Z","iopub.status.idle":"2024-07-22T19:06:52.424056Z","shell.execute_reply":"2024-07-22T19:06:52.423171Z"},"papermill":{"duration":3.016172,"end_time":"2024-07-22T19:06:52.425910","exception":false,"start_time":"2024-07-22T19:06:49.409738","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Visualize Accuracy and Loss","metadata":{"papermill":{"duration":3.043145,"end_time":"2024-07-22T19:06:58.482153","exception":false,"start_time":"2024-07-22T19:06:55.439008","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # visualize accuracy and loss\n# acc = history_3.history['accuracy']\n# val_acc = history_3.history['val_accuracy']\n# loss = history_3.history['loss']\n# val_loss = history_3.history['val_loss']\n\n# plt.figure(figsize=(20, 5))\n\n# # train and validation acc\n# plt.subplot(1, 2, 1)\n# plt.title(\"Akurasi Model 3, CLAHE 10.0 4x4, Split 75:25\")\n# plt.plot(acc,label=\"Accuracy\")\n# plt.plot(val_acc, label=\"Validation Accuracy\")\n# plt.plot( np.argmax(val_acc), np.max(val_acc), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Accuracy\")\n# plt.legend()\n# # plt.figure()\n\n# # train and validation loss\n# plt.subplot(1, 2, 2)\n# plt.title(\"Loss Model 3, CLAHE 10.0 4x4, Split 75:25\")\n# plt.plot(loss, label=\"Loss\")\n# plt.plot(val_loss, label=\"Validation loss\")\n# plt.plot( np.argmin(val_loss), np.min(val_loss), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Loss\")\n# plt.legend();\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:07:04.563993Z","iopub.status.busy":"2024-07-22T19:07:04.563630Z","iopub.status.idle":"2024-07-22T19:07:04.568515Z","shell.execute_reply":"2024-07-22T19:07:04.567605Z"},"papermill":{"duration":3.021607,"end_time":"2024-07-22T19:07:04.570440","exception":false,"start_time":"2024-07-22T19:07:01.548833","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Predict Data Validation ","metadata":{"papermill":{"duration":3.018401,"end_time":"2024-07-22T19:07:10.529104","exception":false,"start_time":"2024-07-22T19:07:07.510703","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # collect all validation label\n# y_val_3 = valid_generator_3.classes\n\n# # predict data validation\n# y_pred_3 = np.argmax(model_3.predict(valid_generator_3, steps=len(valid_generator_3)), axis=1)\n\n# # dataframe from prediction\n# df_model_3 = pd.DataFrame({'Actual': y_val_3, 'Prediction': y_pred_3})\n# print(df_model_3)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:07:16.562040Z","iopub.status.busy":"2024-07-22T19:07:16.561331Z","iopub.status.idle":"2024-07-22T19:07:16.565485Z","shell.execute_reply":"2024-07-22T19:07:16.564585Z"},"papermill":{"duration":3.029669,"end_time":"2024-07-22T19:07:16.567436","exception":false,"start_time":"2024-07-22T19:07:13.537767","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Confussion Matrix","metadata":{"papermill":{"duration":3.031244,"end_time":"2024-07-22T19:07:22.633345","exception":false,"start_time":"2024-07-22T19:07:19.602101","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# cm_3 = confusion_matrix(y_val_3, y_pred_3)\n\n# # heatmap from confussion_matrix\n# ax = plt.subplot()\n# sns.heatmap(cm_3, annot=True, fmt='d', ax=ax, cbar=False, cmap='Blues')\n\n# ax.set_xlabel('Predicted labels')\n# ax.set_ylabel('True labels')\n# ax.set_title('Confusion Matrix')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:07:28.709384Z","iopub.status.busy":"2024-07-22T19:07:28.708628Z","iopub.status.idle":"2024-07-22T19:07:28.712839Z","shell.execute_reply":"2024-07-22T19:07:28.711962Z"},"papermill":{"duration":3.063037,"end_time":"2024-07-22T19:07:28.714807","exception":false,"start_time":"2024-07-22T19:07:25.651770","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Classification Report","metadata":{"papermill":{"duration":3.010057,"end_time":"2024-07-22T19:07:34.840274","exception":false,"start_time":"2024-07-22T19:07:31.830217","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# class_names = ['No DR', 'Mild', 'Moderate', 'Severe', 'Proliferative DR']\n# report_3 = classification_report(y_val_3, y_pred_3, target_names=class_names)\n\n# print(\"Classification Report:\")\n# print(report_3)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:07:40.791544Z","iopub.status.busy":"2024-07-22T19:07:40.790841Z","iopub.status.idle":"2024-07-22T19:07:40.794802Z","shell.execute_reply":"2024-07-22T19:07:40.793935Z"},"papermill":{"duration":2.912456,"end_time":"2024-07-22T19:07:40.796804","exception":false,"start_time":"2024-07-22T19:07:37.884348","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model 4\n\n* clip_limit = 10.0\n* tile_size = 8x8 \n* split data = 75:25","metadata":{"papermill":{"duration":3.031055,"end_time":"2024-07-22T19:07:46.857995","exception":false,"start_time":"2024-07-22T19:07:43.826940","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # define callback to save best model\n# checkpoint_4 = ModelCheckpoint(\"best_model_4.keras\", save_best_only=True)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:07:52.964068Z","iopub.status.busy":"2024-07-22T19:07:52.963704Z","iopub.status.idle":"2024-07-22T19:07:52.968361Z","shell.execute_reply":"2024-07-22T19:07:52.967504Z"},"papermill":{"duration":3.046302,"end_time":"2024-07-22T19:07:52.970326","exception":false,"start_time":"2024-07-22T19:07:49.924024","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # compile model 4\n# model_4 = Model(inputs=incept_model.input, outputs=predictions)\n# model_4.compile(optimizer = keras.optimizers.SGD(learning_rate=learning_rate),\n#                 loss = 'categorical_crossentropy',\n#                 metrics = ['accuracy'])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:07:59.047878Z","iopub.status.busy":"2024-07-22T19:07:59.047530Z","iopub.status.idle":"2024-07-22T19:07:59.051701Z","shell.execute_reply":"2024-07-22T19:07:59.050817Z"},"papermill":{"duration":3.062028,"end_time":"2024-07-22T19:07:59.053594","exception":false,"start_time":"2024-07-22T19:07:55.991566","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# history_4 = model_4.fit(train_generator_4, \n#                                   validation_data=valid_generator_4,\n#                                   epochs=epochs,\n#                                   callbacks=[checkpoint_4])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:08:05.014009Z","iopub.status.busy":"2024-07-22T19:08:05.013081Z","iopub.status.idle":"2024-07-22T19:08:05.017372Z","shell.execute_reply":"2024-07-22T19:08:05.016462Z"},"papermill":{"duration":3.049946,"end_time":"2024-07-22T19:08:05.019213","exception":false,"start_time":"2024-07-22T19:08:01.969267","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # evaluate validation data\n# validation_loss, validation_accuracy = model_4.evaluate(valid_generator_4)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:08:11.098178Z","iopub.status.busy":"2024-07-22T19:08:11.097799Z","iopub.status.idle":"2024-07-22T19:08:11.101765Z","shell.execute_reply":"2024-07-22T19:08:11.100884Z"},"papermill":{"duration":3.046227,"end_time":"2024-07-22T19:08:11.103671","exception":false,"start_time":"2024-07-22T19:08:08.057444","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # show best accuracy and loss result\n# max_val_acc = max(history_4.history['val_accuracy'])\n# max_train_acc = max(history_4.history['accuracy'])\n# min_val_loss = min(history_4.history['val_loss'])\n# min_train_loss = min(history_4.history['loss'])\n\n# print('Akurasi Training Tertinggi:', max_train_acc)\n# print('Akurasi Validasi Tertinggi:', max_val_acc)\n# print('Loss Training Terendah:', min_train_loss)\n# print('Loss Validasi Terendah:', min_val_loss)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:08:17.178851Z","iopub.status.busy":"2024-07-22T19:08:17.178482Z","iopub.status.idle":"2024-07-22T19:08:17.182847Z","shell.execute_reply":"2024-07-22T19:08:17.181983Z"},"papermill":{"duration":3.038231,"end_time":"2024-07-22T19:08:17.184785","exception":false,"start_time":"2024-07-22T19:08:14.146554","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Visualize Accuracy and Loss","metadata":{"papermill":{"duration":3.016275,"end_time":"2024-07-22T19:08:23.258051","exception":false,"start_time":"2024-07-22T19:08:20.241776","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # visualize accuracy and loss\n# acc = history_4.history['accuracy']\n# val_acc = history_4.history['val_accuracy']\n# loss = history_4.history['loss']\n# val_loss = history_4.history['val_loss']\n\n# plt.figure(figsize=(20, 5))\n\n# # train and validation acc\n# plt.subplot(1, 2, 1)\n# plt.title(\"Akurasi Model 4, CLAHE 10.0 8x8, Split 75:25\")\n# plt.plot(acc,label=\"Accuracy\")\n# plt.plot(val_acc, label=\"Validation Accuracy\")\n# plt.plot( np.argmax(val_acc), np.max(val_acc), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Accuracy\")\n# plt.legend()\n# # plt.figure()\n\n# # train and validation loss\n# plt.subplot(1, 2, 2)\n# plt.title(\"Loss Model 4, CLAHE 10.0 8x8, Split 75:25\")\n# plt.plot(loss, label=\"Loss\")\n# plt.plot(val_loss, label=\"Validation loss\")\n# plt.plot( np.argmin(val_loss), np.min(val_loss), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Loss\")\n# plt.legend();\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:08:29.272760Z","iopub.status.busy":"2024-07-22T19:08:29.272382Z","iopub.status.idle":"2024-07-22T19:08:29.277830Z","shell.execute_reply":"2024-07-22T19:08:29.276752Z"},"papermill":{"duration":2.970929,"end_time":"2024-07-22T19:08:29.279839","exception":false,"start_time":"2024-07-22T19:08:26.308910","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Predict Data Validation ","metadata":{"papermill":{"duration":3.102133,"end_time":"2024-07-22T19:08:35.417930","exception":false,"start_time":"2024-07-22T19:08:32.315797","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # collect all validation label\n# y_val_4 = valid_generator_4.classes\n\n# # predict data validation\n# y_pred_4 = np.argmax(model_4.predict(valid_generator_4, steps=len(valid_generator_4)), axis=1)\n\n# # dataframe from prediction\n# df_model_4 = pd.DataFrame({'Actual': y_val_4, 'Prediction': y_pred_4})\n# print(df_model_4)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:08:41.507550Z","iopub.status.busy":"2024-07-22T19:08:41.507145Z","iopub.status.idle":"2024-07-22T19:08:41.511378Z","shell.execute_reply":"2024-07-22T19:08:41.510528Z"},"papermill":{"duration":3.041859,"end_time":"2024-07-22T19:08:41.513324","exception":false,"start_time":"2024-07-22T19:08:38.471465","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Confussion Matrix","metadata":{"papermill":{"duration":3.089311,"end_time":"2024-07-22T19:08:47.642559","exception":false,"start_time":"2024-07-22T19:08:44.553248","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# cm_4 = confusion_matrix(y_val_4, y_pred_4)\n\n# # heatmap from confussion_matrix\n# ax = plt.subplot()\n# sns.heatmap(cm_4, annot=True, fmt='d', ax=ax, cbar=False, cmap='Blues')\n\n# ax.set_xlabel('Predicted labels')\n# ax.set_ylabel('True labels')\n# ax.set_title('Confusion Matrix')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:08:53.742361Z","iopub.status.busy":"2024-07-22T19:08:53.741963Z","iopub.status.idle":"2024-07-22T19:08:53.746143Z","shell.execute_reply":"2024-07-22T19:08:53.745304Z"},"papermill":{"duration":3.0622,"end_time":"2024-07-22T19:08:53.748649","exception":false,"start_time":"2024-07-22T19:08:50.686449","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Classification Report","metadata":{"papermill":{"duration":3.070006,"end_time":"2024-07-22T19:08:59.833824","exception":false,"start_time":"2024-07-22T19:08:56.763818","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# class_names = ['No DR', 'Mild', 'Moderate', 'Severe', 'Proliferative DR']\n# report_4 = classification_report(y_val_4, y_pred_4, target_names=class_names)\n\n# print(\"Classification Report:\")\n# print(report_4)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:09:05.846065Z","iopub.status.busy":"2024-07-22T19:09:05.845709Z","iopub.status.idle":"2024-07-22T19:09:05.849948Z","shell.execute_reply":"2024-07-22T19:09:05.849043Z"},"papermill":{"duration":3.107456,"end_time":"2024-07-22T19:09:05.851829","exception":false,"start_time":"2024-07-22T19:09:02.744373","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model 5\n\n* clip_limit = 5.0\n* tile_size = 4x4 \n* split data = 80:20","metadata":{"papermill":{"duration":3.033157,"end_time":"2024-07-22T19:09:11.924594","exception":false,"start_time":"2024-07-22T19:09:08.891437","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# define callback to save best model\ncheckpoint_5 = ModelCheckpoint(\"best_model_5.keras\", save_best_only=True)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:09:18.036328Z","iopub.status.busy":"2024-07-22T19:09:18.035407Z","iopub.status.idle":"2024-07-22T19:09:18.039894Z","shell.execute_reply":"2024-07-22T19:09:18.039059Z"},"papermill":{"duration":3.076279,"end_time":"2024-07-22T19:09:18.041841","exception":false,"start_time":"2024-07-22T19:09:14.965562","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# compile model 5\nmodel_5 = Model(inputs=incept_model.input, outputs=predictions)\nmodel_5.compile(optimizer = keras.optimizers.SGD(learning_rate=learning_rate),\n                loss = 'categorical_crossentropy',\n                metrics = ['accuracy'])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:09:24.026833Z","iopub.status.busy":"2024-07-22T19:09:24.026467Z","iopub.status.idle":"2024-07-22T19:09:24.112309Z","shell.execute_reply":"2024-07-22T19:09:24.111289Z"},"papermill":{"duration":3.029285,"end_time":"2024-07-22T19:09:24.114676","exception":false,"start_time":"2024-07-22T19:09:21.085391","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history_5 = model_5.fit(train_generator_5, \n                                  validation_data=valid_generator_5,\n                                  epochs=epochs,\n                                  callbacks=[checkpoint_5])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T19:09:30.261723Z","iopub.status.busy":"2024-07-22T19:09:30.261357Z","iopub.status.idle":"2024-07-22T21:13:52.835193Z","shell.execute_reply":"2024-07-22T21:13:52.834300Z"},"papermill":{"duration":7470.324326,"end_time":"2024-07-22T21:13:57.517776","exception":false,"start_time":"2024-07-22T19:09:27.193450","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# evaluate validation data\nvalidation_loss, validation_accuracy = model_5.evaluate(valid_generator_5)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T21:14:06.915442Z","iopub.status.busy":"2024-07-22T21:14:06.915084Z","iopub.status.idle":"2024-07-22T21:14:21.321511Z","shell.execute_reply":"2024-07-22T21:14:21.320699Z"},"papermill":{"duration":19.334006,"end_time":"2024-07-22T21:14:21.323516","exception":false,"start_time":"2024-07-22T21:14:01.989510","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# show best accuracy and loss result\nmax_val_acc = max(history_5.history['val_accuracy'])\nmax_train_acc = max(history_5.history['accuracy'])\nmin_val_loss = min(history_5.history['val_loss'])\nmin_train_loss = min(history_5.history['loss'])\n\nprint('Akurasi Training Tertinggi:', max_train_acc)\nprint('Akurasi Validasi Tertinggi:', max_val_acc)\nprint('Loss Training Terendah:', min_train_loss)\nprint('Loss Validasi Terendah:', min_val_loss)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T21:14:30.439756Z","iopub.status.busy":"2024-07-22T21:14:30.439332Z","iopub.status.idle":"2024-07-22T21:14:30.445859Z","shell.execute_reply":"2024-07-22T21:14:30.444985Z"},"papermill":{"duration":4.487785,"end_time":"2024-07-22T21:14:30.448093","exception":false,"start_time":"2024-07-22T21:14:25.960308","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Visualize Accuracy and Loss","metadata":{"papermill":{"duration":4.478366,"end_time":"2024-07-22T21:14:39.817977","exception":false,"start_time":"2024-07-22T21:14:35.339611","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# visualize accuracy and loss\nacc = history_5.history['accuracy']\nval_acc = history_5.history['val_accuracy']\nloss = history_5.history['loss']\nval_loss = history_5.history['val_loss']\n\nplt.figure(figsize=(20, 5))\n\n# train and validation acc\nplt.subplot(1, 2, 1)\nplt.title(\"Akurasi Model 5, CLAHE 5.0 4x4, Split 80:20\")\nplt.plot(acc,label=\"Accuracy\")\nplt.plot(val_acc, label=\"Validation Accuracy\")\nplt.plot( np.argmax(val_acc), np.max(val_acc), marker=\"x\", color=\"r\", label=\"Best model\")\nplt.xlabel(\"Epochs\")\nplt.ylabel(\"Accuracy\")\nplt.legend()\n# plt.figure()\n\n# train and validation loss\nplt.subplot(1, 2, 2)\nplt.title(\"Loss Model 5, CLAHE 5.0 4x4, Split 80:20\")\nplt.plot(loss, label=\"Loss\")\nplt.plot(val_loss, label=\"Validation loss\")\nplt.plot( np.argmin(val_loss), np.min(val_loss), marker=\"x\", color=\"r\", label=\"Best model\")\nplt.xlabel(\"Epochs\")\nplt.ylabel(\"Loss\")\nplt.legend();\nplt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T21:14:49.157072Z","iopub.status.busy":"2024-07-22T21:14:49.156656Z","iopub.status.idle":"2024-07-22T21:14:49.707647Z","shell.execute_reply":"2024-07-22T21:14:49.706611Z"},"papermill":{"duration":5.059773,"end_time":"2024-07-22T21:14:49.710392","exception":false,"start_time":"2024-07-22T21:14:44.650619","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Predict Data Validation ","metadata":{"papermill":{"duration":4.650591,"end_time":"2024-07-22T21:14:59.150697","exception":false,"start_time":"2024-07-22T21:14:54.500106","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# collect all validation label\ny_val_5 = valid_generator_5.classes\n\n# predict data validation\ny_pred_5 = np.argmax(model_5.predict(valid_generator_5, steps=len(valid_generator_5)), axis=1)\n\n# dataframe from prediction\ndf_model_5 = pd.DataFrame({'Actual': y_val_5, 'Prediction': y_pred_5})\nprint(df_model_5)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T21:15:08.492586Z","iopub.status.busy":"2024-07-22T21:15:08.492194Z","iopub.status.idle":"2024-07-22T21:15:36.437871Z","shell.execute_reply":"2024-07-22T21:15:36.435887Z"},"papermill":{"duration":32.837144,"end_time":"2024-07-22T21:15:36.440126","exception":false,"start_time":"2024-07-22T21:15:03.602982","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Confussion Matrix","metadata":{"papermill":{"duration":4.503108,"end_time":"2024-07-22T21:15:45.705992","exception":false,"start_time":"2024-07-22T21:15:41.202884","status":"completed"},"tags":[]}},{"cell_type":"code","source":"cm_5 = confusion_matrix(y_val_5, y_pred_5)\n\n# heatmap from confussion_matrix\nax = plt.subplot()\nsns.heatmap(cm_5, annot=True, fmt='d', ax=ax, cbar=False, cmap='Blues')\n\nax.set_xlabel('Predicted labels')\nax.set_ylabel('True labels')\nax.set_title('Confusion Matrix')\nplt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T21:15:55.145177Z","iopub.status.busy":"2024-07-22T21:15:55.144287Z","iopub.status.idle":"2024-07-22T21:15:55.391072Z","shell.execute_reply":"2024-07-22T21:15:55.390101Z"},"papermill":{"duration":4.889637,"end_time":"2024-07-22T21:15:55.393025","exception":false,"start_time":"2024-07-22T21:15:50.503388","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Classification Report","metadata":{"papermill":{"duration":4.787407,"end_time":"2024-07-22T21:16:04.670754","exception":false,"start_time":"2024-07-22T21:15:59.883347","status":"completed"},"tags":[]}},{"cell_type":"code","source":"class_names = ['No DR', 'Mild', 'Moderate', 'Severe', 'Proliferative DR']\nreport_5 = classification_report(y_val_5, y_pred_5, target_names=class_names)\n\nprint(\"Classification Report:\")\nprint(report_5)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T21:16:13.912184Z","iopub.status.busy":"2024-07-22T21:16:13.911323Z","iopub.status.idle":"2024-07-22T21:16:13.924996Z","shell.execute_reply":"2024-07-22T21:16:13.923979Z"},"papermill":{"duration":4.529363,"end_time":"2024-07-22T21:16:13.927035","exception":false,"start_time":"2024-07-22T21:16:09.397672","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model 6\n\n* clip_limit = 5.0\n* tile_size = 8x8\n* split data = 80:20","metadata":{"papermill":{"duration":4.629854,"end_time":"2024-07-22T21:16:23.407542","exception":false,"start_time":"2024-07-22T21:16:18.777688","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# define callback to save best model\ncheckpoint_6 = ModelCheckpoint(\"best_model_6.keras\", save_best_only=True)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T21:16:32.674769Z","iopub.status.busy":"2024-07-22T21:16:32.674401Z","iopub.status.idle":"2024-07-22T21:16:32.678767Z","shell.execute_reply":"2024-07-22T21:16:32.677991Z"},"papermill":{"duration":4.80003,"end_time":"2024-07-22T21:16:32.680588","exception":false,"start_time":"2024-07-22T21:16:27.880558","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# compile model 6\nmodel_6 = Model(inputs=incept_model.input, outputs=predictions)\nmodel_6.compile(optimizer = keras.optimizers.SGD(learning_rate=learning_rate),\n                loss = 'categorical_crossentropy',\n                metrics = ['accuracy'])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T21:16:41.878474Z","iopub.status.busy":"2024-07-22T21:16:41.878100Z","iopub.status.idle":"2024-07-22T21:16:41.959335Z","shell.execute_reply":"2024-07-22T21:16:41.958573Z"},"papermill":{"duration":4.595323,"end_time":"2024-07-22T21:16:41.961149","exception":false,"start_time":"2024-07-22T21:16:37.365826","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history_6 = model_6.fit(train_generator_6, \n                                  validation_data=valid_generator_6,\n                                  epochs=epochs,\n                                  callbacks=[checkpoint_6])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T21:16:51.383427Z","iopub.status.busy":"2024-07-22T21:16:51.382593Z","iopub.status.idle":"2024-07-22T23:21:18.620722Z","shell.execute_reply":"2024-07-22T23:21:18.619723Z"},"papermill":{"duration":7478.016037,"end_time":"2024-07-22T23:21:24.781446","exception":false,"start_time":"2024-07-22T21:16:46.765409","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# evaluate validation data\nvalidation_loss, validation_accuracy = model_6.evaluate(valid_generator_6)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:21:37.163007Z","iopub.status.busy":"2024-07-22T23:21:37.162166Z","iopub.status.idle":"2024-07-22T23:21:51.407297Z","shell.execute_reply":"2024-07-22T23:21:51.406378Z"},"papermill":{"duration":20.436664,"end_time":"2024-07-22T23:21:51.409466","exception":false,"start_time":"2024-07-22T23:21:30.972802","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# show best accuracy and loss result\nmax_val_acc = max(history_6.history['val_accuracy'])\nmax_train_acc = max(history_6.history['accuracy'])\nmin_val_loss = min(history_6.history['val_loss'])\nmin_train_loss = min(history_6.history['loss'])\n\nprint('Akurasi Training Tertinggi:', max_train_acc)\nprint('Akurasi Validasi Tertinggi:', max_val_acc)\nprint('Loss Training Terendah:', min_train_loss)\nprint('Loss Validasi Terendah:', min_val_loss)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:22:03.768398Z","iopub.status.busy":"2024-07-22T23:22:03.767560Z","iopub.status.idle":"2024-07-22T23:22:03.774047Z","shell.execute_reply":"2024-07-22T23:22:03.773255Z"},"papermill":{"duration":6.176502,"end_time":"2024-07-22T23:22:03.776184","exception":false,"start_time":"2024-07-22T23:21:57.599682","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Visualize Accuracy and Loss","metadata":{"papermill":{"duration":6.26592,"end_time":"2024-07-22T23:22:16.258662","exception":false,"start_time":"2024-07-22T23:22:09.992742","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# visualize accuracy and loss\nacc = history_6.history['accuracy']\nval_acc = history_6.history['val_accuracy']\nloss = history_6.history['loss']\nval_loss = history_6.history['val_loss']\n\nplt.figure(figsize=(20, 5))\n\n# train and validation acc\nplt.subplot(1, 2, 1)\nplt.title(\"Akurasi Model 6, CLAHE 5.0 8x8, Split 80:20\")\nplt.plot(acc,label=\"Accuracy\")\nplt.plot(val_acc, label=\"Validation Accuracy\")\nplt.plot( np.argmax(val_acc), np.max(val_acc), marker=\"x\", color=\"r\", label=\"Best model\")\nplt.xlabel(\"Epochs\")\nplt.ylabel(\"Accuracy\")\nplt.legend()\n# plt.figure()\n\n# train and validation loss\nplt.subplot(1, 2, 2)\nplt.title(\"Loss Model 6, CLAHE 5.0 8x8, Split 80:20\")\nplt.plot(loss, label=\"Loss\")\nplt.plot(val_loss, label=\"Validation loss\")\nplt.plot( np.argmin(val_loss), np.min(val_loss), marker=\"x\", color=\"r\", label=\"Best model\")\nplt.xlabel(\"Epochs\")\nplt.ylabel(\"Loss\")\nplt.legend();\nplt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:22:28.813195Z","iopub.status.busy":"2024-07-22T23:22:28.812341Z","iopub.status.idle":"2024-07-22T23:22:29.292981Z","shell.execute_reply":"2024-07-22T23:22:29.292121Z"},"papermill":{"duration":6.677546,"end_time":"2024-07-22T23:22:29.295301","exception":false,"start_time":"2024-07-22T23:22:22.617755","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Predict Data Validation ","metadata":{"papermill":{"duration":5.960534,"end_time":"2024-07-22T23:22:41.422239","exception":false,"start_time":"2024-07-22T23:22:35.461705","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# collect all validation label\ny_val_6 = valid_generator_6.classes\n\n# predict data validation\ny_pred_6 = np.argmax(model_6.predict(valid_generator_6, steps=len(valid_generator_6)), axis=1)\n\n# dataframe from prediction\ndf_model_6 = pd.DataFrame({'Actual': y_val_6, 'Prediction': y_pred_6})\nprint(df_model_6)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:22:54.085257Z","iopub.status.busy":"2024-07-22T23:22:54.084880Z","iopub.status.idle":"2024-07-22T23:23:21.478024Z","shell.execute_reply":"2024-07-22T23:23:21.476979Z"},"papermill":{"duration":33.604672,"end_time":"2024-07-22T23:23:21.479999","exception":false,"start_time":"2024-07-22T23:22:47.875327","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Confussion Matrix","metadata":{"papermill":{"duration":6.24515,"end_time":"2024-07-22T23:23:33.901040","exception":false,"start_time":"2024-07-22T23:23:27.655890","status":"completed"},"tags":[]}},{"cell_type":"code","source":"cm_6 = confusion_matrix(y_val_6, y_pred_6)\n\n# heatmap from confussion_matrix\nax = plt.subplot()\nsns.heatmap(cm_6, annot=True, fmt='d', ax=ax, cbar=False, cmap='Blues')\n\nax.set_xlabel('Predicted labels')\nax.set_ylabel('True labels')\nax.set_title('Confusion Matrix')\nplt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:23:46.285836Z","iopub.status.busy":"2024-07-22T23:23:46.285471Z","iopub.status.idle":"2024-07-22T23:23:46.534579Z","shell.execute_reply":"2024-07-22T23:23:46.533672Z"},"papermill":{"duration":6.440198,"end_time":"2024-07-22T23:23:46.536700","exception":false,"start_time":"2024-07-22T23:23:40.096502","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Classification Report","metadata":{"papermill":{"duration":6.202599,"end_time":"2024-07-22T23:23:59.169008","exception":false,"start_time":"2024-07-22T23:23:52.966409","status":"completed"},"tags":[]}},{"cell_type":"code","source":"class_names = ['No DR', 'Mild', 'Moderate', 'Severe', 'Proliferative DR']\nreport_6 = classification_report(y_val_6, y_pred_6, target_names=class_names)\n\nprint(\"Classification Report:\")\nprint(report_6)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:24:11.532081Z","iopub.status.busy":"2024-07-22T23:24:11.531718Z","iopub.status.idle":"2024-07-22T23:24:11.545933Z","shell.execute_reply":"2024-07-22T23:24:11.544931Z"},"papermill":{"duration":6.208613,"end_time":"2024-07-22T23:24:11.547802","exception":false,"start_time":"2024-07-22T23:24:05.339189","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model 7\n\n* clip_limit = 10.0\n* tile_size = 4x4 \n* split data = 80:20","metadata":{"papermill":{"duration":6.194648,"end_time":"2024-07-22T23:24:23.956495","exception":false,"start_time":"2024-07-22T23:24:17.761847","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # define callback to save best model\n# checkpoint_7 = ModelCheckpoint(\"best_model_7.keras\", save_best_only=True)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:24:36.360172Z","iopub.status.busy":"2024-07-22T23:24:36.359322Z","iopub.status.idle":"2024-07-22T23:24:36.363398Z","shell.execute_reply":"2024-07-22T23:24:36.362543Z"},"papermill":{"duration":6.200962,"end_time":"2024-07-22T23:24:36.365448","exception":false,"start_time":"2024-07-22T23:24:30.164486","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # compile model 7\n# model_7 = Model(inputs=incept_model.input, outputs=predictions)\n# model_7.compile(optimizer = keras.optimizers.SGD(learning_rate=learning_rate),\n#                 loss = 'categorical_crossentropy',\n#                 metrics = ['accuracy'])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:24:48.755663Z","iopub.status.busy":"2024-07-22T23:24:48.754910Z","iopub.status.idle":"2024-07-22T23:24:48.759001Z","shell.execute_reply":"2024-07-22T23:24:48.758129Z"},"papermill":{"duration":6.218458,"end_time":"2024-07-22T23:24:48.760908","exception":false,"start_time":"2024-07-22T23:24:42.542450","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# history_7 = model_7.fit(train_generator_7, \n#                                   validation_data=valid_generator_7,\n#                                   epochs=epochs,\n#                                   callbacks=[checkpoint_7])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:25:01.138809Z","iopub.status.busy":"2024-07-22T23:25:01.137986Z","iopub.status.idle":"2024-07-22T23:25:01.142087Z","shell.execute_reply":"2024-07-22T23:25:01.141246Z"},"papermill":{"duration":6.199573,"end_time":"2024-07-22T23:25:01.143952","exception":false,"start_time":"2024-07-22T23:24:54.944379","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # evaluate validation data\n# validation_loss, validation_accuracy = model_7.evaluate(valid_generator_7)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:25:13.480964Z","iopub.status.busy":"2024-07-22T23:25:13.480632Z","iopub.status.idle":"2024-07-22T23:25:13.485692Z","shell.execute_reply":"2024-07-22T23:25:13.484980Z"},"papermill":{"duration":6.161887,"end_time":"2024-07-22T23:25:13.487754","exception":false,"start_time":"2024-07-22T23:25:07.325867","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # show best accuracy and loss result\n# max_val_acc = max(history_7.history['val_accuracy'])\n# max_train_acc = max(history_7.history['accuracy'])\n# min_val_loss = min(history_7.history['val_loss'])\n# min_train_loss = min(history_7.history['loss'])\n\n# print('Akurasi Training Tertinggi:', max_train_acc)\n# print('Akurasi Validasi Tertinggi:', max_val_acc)\n# print('Loss Training Terendah:', min_train_loss)\n# print('Loss Validasi Terendah:', min_val_loss)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:25:25.888088Z","iopub.status.busy":"2024-07-22T23:25:25.887273Z","iopub.status.idle":"2024-07-22T23:25:25.891724Z","shell.execute_reply":"2024-07-22T23:25:25.890840Z"},"papermill":{"duration":6.224855,"end_time":"2024-07-22T23:25:25.893680","exception":false,"start_time":"2024-07-22T23:25:19.668825","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Visualize Accuracy and Loss","metadata":{"papermill":{"duration":6.167125,"end_time":"2024-07-22T23:25:38.241457","exception":false,"start_time":"2024-07-22T23:25:32.074332","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # visualize accuracy and loss\n# acc = history_7.history['accuracy']\n# val_acc = history_7.history['val_accuracy']\n# loss = history_7.history['loss']\n# val_loss = history_7.history['val_loss']\n\n# plt.figure(figsize=(20, 5))\n\n# # train and validation acc\n# plt.subplot(1, 2, 1)\n# plt.title(\"Akurasi Model 7, CLAHE 10.0 4x4, Split 80:20\")\n# plt.plot(acc,label=\"Accuracy\")\n# plt.plot(val_acc, label=\"Validation Accuracy\")\n# plt.plot( np.argmax(val_acc), np.max(val_acc), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Accuracy\")\n# plt.legend()\n# # plt.figure()\n\n# # train and validation loss\n# plt.subplot(1, 2, 2)\n# plt.title(\"Loss Model 7, CLAHE 10.0 4x4, Split 80:20\")\n# plt.plot(loss, label=\"Loss\")\n# plt.plot(val_loss, label=\"Validation loss\")\n# plt.plot( np.argmin(val_loss), np.min(val_loss), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Loss\")\n# plt.legend();\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:25:50.640074Z","iopub.status.busy":"2024-07-22T23:25:50.639216Z","iopub.status.idle":"2024-07-22T23:25:50.644216Z","shell.execute_reply":"2024-07-22T23:25:50.643344Z"},"papermill":{"duration":6.23695,"end_time":"2024-07-22T23:25:50.646088","exception":false,"start_time":"2024-07-22T23:25:44.409138","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Predict Data Validation ","metadata":{"papermill":{"duration":6.18008,"end_time":"2024-07-22T23:26:03.055126","exception":false,"start_time":"2024-07-22T23:25:56.875046","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # collect all validation label\n# y_val_7 = valid_generator_7.classes\n\n# # predict data validation\n# y_pred_7 = np.argmax(model_7.predict(valid_generator_7, steps=len(valid_generator_7)), axis=1)\n\n# # dataframe from prediction\n# df_model_7 = pd.DataFrame({'Actual': y_val_7, 'Prediction': y_pred_7})\n# print(df_model_7)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:26:15.390915Z","iopub.status.busy":"2024-07-22T23:26:15.390021Z","iopub.status.idle":"2024-07-22T23:26:15.394470Z","shell.execute_reply":"2024-07-22T23:26:15.393568Z"},"papermill":{"duration":6.145918,"end_time":"2024-07-22T23:26:15.396284","exception":false,"start_time":"2024-07-22T23:26:09.250366","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Confussion Matrix","metadata":{"papermill":{"duration":6.197525,"end_time":"2024-07-22T23:26:27.795943","exception":false,"start_time":"2024-07-22T23:26:21.598418","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# cm_7 = confusion_matrix(y_val_7, y_pred_7)\n\n# # heatmap from confussion_matrix\n# ax = plt.subplot()\n# sns.heatmap(cm_7, annot=True, fmt='d', ax=ax, cbar=False, cmap='Blues')\n\n# ax.set_xlabel('Predicted labels')\n# ax.set_ylabel('True labels')\n# ax.set_title('Confusion Matrix')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:26:40.116877Z","iopub.status.busy":"2024-07-22T23:26:40.116031Z","iopub.status.idle":"2024-07-22T23:26:40.120393Z","shell.execute_reply":"2024-07-22T23:26:40.119511Z"},"papermill":{"duration":6.176791,"end_time":"2024-07-22T23:26:40.122389","exception":false,"start_time":"2024-07-22T23:26:33.945598","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Classification Report","metadata":{"papermill":{"duration":6.22648,"end_time":"2024-07-22T23:26:52.495519","exception":false,"start_time":"2024-07-22T23:26:46.269039","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# class_names = ['No DR', 'Mild', 'Moderate', 'Severe', 'Proliferative DR']\n# report_7 = classification_report(y_val_7, y_pred_7, target_names=class_names)\n\n# print(\"Classification Report:\")\n# print(report_7)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:27:04.900451Z","iopub.status.busy":"2024-07-22T23:27:04.899634Z","iopub.status.idle":"2024-07-22T23:27:04.903807Z","shell.execute_reply":"2024-07-22T23:27:04.902936Z"},"papermill":{"duration":6.169164,"end_time":"2024-07-22T23:27:04.905680","exception":false,"start_time":"2024-07-22T23:26:58.736516","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model 8\n\n* clip_limit = 10.0\n* tile_size = 8x8 \n* split data = 80:20","metadata":{"papermill":{"duration":6.174052,"end_time":"2024-07-22T23:27:17.266992","exception":false,"start_time":"2024-07-22T23:27:11.092940","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # define callback to save best model\n# checkpoint_8 = ModelCheckpoint(\"best_model_8.keras\", save_best_only=True)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:27:29.676673Z","iopub.status.busy":"2024-07-22T23:27:29.675921Z","iopub.status.idle":"2024-07-22T23:27:29.680160Z","shell.execute_reply":"2024-07-22T23:27:29.679220Z"},"papermill":{"duration":6.255637,"end_time":"2024-07-22T23:27:29.682023","exception":false,"start_time":"2024-07-22T23:27:23.426386","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # compile model 8\n# model_8 = Model(inputs=incept_model.input, outputs=predictions)\n# model_8.compile(optimizer = keras.optimizers.SGD(learning_rate=learning_rate),\n#                 loss = 'categorical_crossentropy',\n#                 metrics = ['accuracy'])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:27:42.015797Z","iopub.status.busy":"2024-07-22T23:27:42.015115Z","iopub.status.idle":"2024-07-22T23:27:42.019265Z","shell.execute_reply":"2024-07-22T23:27:42.018379Z"},"papermill":{"duration":6.175736,"end_time":"2024-07-22T23:27:42.021145","exception":false,"start_time":"2024-07-22T23:27:35.845409","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# history_8 = model_8.fit(train_generator_8, \n#                                   validation_data=valid_generator_8,\n#                                   epochs=epochs,\n#                                   callbacks=[checkpoint_8])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:27:54.415404Z","iopub.status.busy":"2024-07-22T23:27:54.414540Z","iopub.status.idle":"2024-07-22T23:27:54.418812Z","shell.execute_reply":"2024-07-22T23:27:54.417929Z"},"papermill":{"duration":6.212206,"end_time":"2024-07-22T23:27:54.420702","exception":false,"start_time":"2024-07-22T23:27:48.208496","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # evaluate validation data\n# validation_loss, validation_accuracy = model_8.evaluate(valid_generator_8)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:28:07.005237Z","iopub.status.busy":"2024-07-22T23:28:07.004601Z","iopub.status.idle":"2024-07-22T23:28:07.008720Z","shell.execute_reply":"2024-07-22T23:28:07.007829Z"},"papermill":{"duration":6.282319,"end_time":"2024-07-22T23:28:07.010638","exception":false,"start_time":"2024-07-22T23:28:00.728319","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # show best accuracy and loss result\n# max_val_acc = max(history_8.history['val_accuracy'])\n# max_train_acc = max(history_8.history['accuracy'])\n# min_val_loss = min(history_8.history['val_loss'])\n# min_train_loss = min(history_8.history['loss'])\n\n# print('Akurasi Training Tertinggi:', max_train_acc)\n# print('Akurasi Validasi Tertinggi:', max_val_acc)\n# print('Loss Training Terendah:', min_train_loss)\n# print('Loss Validasi Terendah:', min_val_loss)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:28:19.457145Z","iopub.status.busy":"2024-07-22T23:28:19.456255Z","iopub.status.idle":"2024-07-22T23:28:19.460894Z","shell.execute_reply":"2024-07-22T23:28:19.460003Z"},"papermill":{"duration":6.231231,"end_time":"2024-07-22T23:28:19.462823","exception":false,"start_time":"2024-07-22T23:28:13.231592","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Visualize Accuracy and Loss","metadata":{"papermill":{"duration":6.299525,"end_time":"2024-07-22T23:28:31.960672","exception":false,"start_time":"2024-07-22T23:28:25.661147","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # visualize accuracy and loss\n# acc = history_8.history['accuracy']\n# val_acc = history_8.history['val_accuracy']\n# loss = history_8.history['loss']\n# val_loss = history_8.history['val_loss']\n\n# plt.figure(figsize=(20, 5))\n\n# # train and validation acc\n# plt.subplot(1, 2, 1)\n# plt.title(\"Akurasi Model 8, CLAHE 10.0 8x8, Split 80:20\")\n# plt.plot(acc,label=\"Accuracy\")\n# plt.plot(val_acc, label=\"Validation Accuracy\")\n# plt.plot( np.argmax(val_acc), np.max(val_acc), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Accuracy\")\n# plt.legend()\n# # plt.figure()\n\n# # train and validation loss\n# plt.subplot(1, 2, 2)\n# plt.title(\"Loss Model 8, CLAHE 10.0 8x8, Split 80:20\")\n# plt.plot(loss, label=\"Loss\")\n# plt.plot(val_loss, label=\"Validation loss\")\n# plt.plot( np.argmin(val_loss), np.min(val_loss), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Loss\")\n# plt.legend();\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:28:44.309379Z","iopub.status.busy":"2024-07-22T23:28:44.308991Z","iopub.status.idle":"2024-07-22T23:28:44.314509Z","shell.execute_reply":"2024-07-22T23:28:44.313677Z"},"papermill":{"duration":6.172501,"end_time":"2024-07-22T23:28:44.316341","exception":false,"start_time":"2024-07-22T23:28:38.143840","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Predict Data Validation ","metadata":{"papermill":{"duration":6.21741,"end_time":"2024-07-22T23:28:56.731044","exception":false,"start_time":"2024-07-22T23:28:50.513634","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # collect all validation label\n# y_val_8 = valid_generator_8.classes\n\n# # predict data validation\n# y_pred_8 = np.argmax(model_8.predict(valid_generator_8, steps=len(valid_generator_8)), axis=1)\n\n# # dataframe from prediction\n# df_model_8 = pd.DataFrame({'Actual': y_val_8, 'Prediction': y_pred_8})\n# print(df_model_8)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:29:09.176216Z","iopub.status.busy":"2024-07-22T23:29:09.175393Z","iopub.status.idle":"2024-07-22T23:29:09.179619Z","shell.execute_reply":"2024-07-22T23:29:09.178762Z"},"papermill":{"duration":6.211658,"end_time":"2024-07-22T23:29:09.181558","exception":false,"start_time":"2024-07-22T23:29:02.969900","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Confussion Matrix","metadata":{"papermill":{"duration":6.197732,"end_time":"2024-07-22T23:29:21.609272","exception":false,"start_time":"2024-07-22T23:29:15.411540","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# cm_8 = confusion_matrix(y_val_8, y_pred_8)\n\n# # heatmap from confussion_matrix\n# ax = plt.subplot()\n# sns.heatmap(cm_8, annot=True, fmt='d', ax=ax, cbar=False, cmap='Blues')\n\n# ax.set_xlabel('Predicted labels')\n# ax.set_ylabel('True labels')\n# ax.set_title('Confusion Matrix')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:29:34.071953Z","iopub.status.busy":"2024-07-22T23:29:34.071602Z","iopub.status.idle":"2024-07-22T23:29:34.075828Z","shell.execute_reply":"2024-07-22T23:29:34.074992Z"},"papermill":{"duration":6.28408,"end_time":"2024-07-22T23:29:34.077746","exception":false,"start_time":"2024-07-22T23:29:27.793666","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Classification Report","metadata":{"papermill":{"duration":6.188583,"end_time":"2024-07-22T23:29:46.452536","exception":false,"start_time":"2024-07-22T23:29:40.263953","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# class_names = ['No DR', 'Mild', 'Moderate', 'Severe', 'Proliferative DR']\n# report_8 = classification_report(y_val_8, y_pred_8, target_names=class_names)\n\n# print(\"Classification Report:\")\n# print(report_8)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:29:58.895460Z","iopub.status.busy":"2024-07-22T23:29:58.895074Z","iopub.status.idle":"2024-07-22T23:29:58.899266Z","shell.execute_reply":"2024-07-22T23:29:58.898405Z"},"papermill":{"duration":6.236881,"end_time":"2024-07-22T23:29:58.901342","exception":false,"start_time":"2024-07-22T23:29:52.664461","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model 9\n\n* no CLAHE\n* split data = 75:25","metadata":{"papermill":{"duration":6.190263,"end_time":"2024-07-22T23:30:11.332624","exception":false,"start_time":"2024-07-22T23:30:05.142361","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # define callback to save best model\n# checkpoint_9 = ModelCheckpoint(\"best_model_9.keras\", save_best_only=True)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:30:23.708909Z","iopub.status.busy":"2024-07-22T23:30:23.708549Z","iopub.status.idle":"2024-07-22T23:30:23.712641Z","shell.execute_reply":"2024-07-22T23:30:23.711722Z"},"papermill":{"duration":6.188619,"end_time":"2024-07-22T23:30:23.714513","exception":false,"start_time":"2024-07-22T23:30:17.525894","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # compile model 9\n# model_9 = Model(inputs=incept_model.input, outputs=predictions)\n# model_9.compile(optimizer = keras.optimizers.SGD(learning_rate=learning_rate),\n#                 loss = 'categorical_crossentropy',\n#                 metrics = ['accuracy'])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:30:36.155978Z","iopub.status.busy":"2024-07-22T23:30:36.155624Z","iopub.status.idle":"2024-07-22T23:30:36.159816Z","shell.execute_reply":"2024-07-22T23:30:36.158884Z"},"papermill":{"duration":6.246017,"end_time":"2024-07-22T23:30:36.161752","exception":false,"start_time":"2024-07-22T23:30:29.915735","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# history_9 = model_9.fit(train_generator_9, \n#                                   validation_data=valid_generator_9,\n#                                   epochs=epochs,\n#                                   callbacks=[checkpoint_9])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:30:48.536992Z","iopub.status.busy":"2024-07-22T23:30:48.536094Z","iopub.status.idle":"2024-07-22T23:30:48.540529Z","shell.execute_reply":"2024-07-22T23:30:48.539634Z"},"papermill":{"duration":6.215285,"end_time":"2024-07-22T23:30:48.542341","exception":false,"start_time":"2024-07-22T23:30:42.327056","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # evaluate validation data\n# validation_loss, validation_accuracy = model_9.evaluate(valid_generator_9)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:31:00.966429Z","iopub.status.busy":"2024-07-22T23:31:00.966058Z","iopub.status.idle":"2024-07-22T23:31:00.970037Z","shell.execute_reply":"2024-07-22T23:31:00.969262Z"},"papermill":{"duration":6.23401,"end_time":"2024-07-22T23:31:00.971909","exception":false,"start_time":"2024-07-22T23:30:54.737899","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # show best accuracy and loss result\n# max_val_acc = max(history_9.history['val_accuracy'])\n# max_train_acc = max(history_9.history['accuracy'])\n# min_val_loss = min(history_9.history['val_loss'])\n# min_train_loss = min(history_9.history['loss'])\n\n# print('Akurasi Training Tertinggi:', max_train_acc)\n# print('Akurasi Validasi Tertinggi:', max_val_acc)\n# print('Loss Training Terendah:', min_train_loss)\n# print('Loss Validasi Terendah:', min_val_loss)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:31:13.417757Z","iopub.status.busy":"2024-07-22T23:31:13.416909Z","iopub.status.idle":"2024-07-22T23:31:13.421435Z","shell.execute_reply":"2024-07-22T23:31:13.420567Z"},"papermill":{"duration":6.204801,"end_time":"2024-07-22T23:31:13.423320","exception":false,"start_time":"2024-07-22T23:31:07.218519","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Visualize Accuracy and Loss","metadata":{"papermill":{"duration":6.175874,"end_time":"2024-07-22T23:31:25.802506","exception":false,"start_time":"2024-07-22T23:31:19.626632","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # visualize accuracy and loss\n# acc = history_9.history['accuracy']\n# val_acc = history_9.history['val_accuracy']\n# loss = history_9.history['loss']\n# val_loss = history_9.history['val_loss']\n\n# plt.figure(figsize=(20, 5))\n\n# # train and validation acc\n# plt.subplot(1, 2, 1)\n# plt.title(\"Akurasi Model 9, No CLAHE, Split 75:25\")\n# plt.plot(acc,label=\"Accuracy\")\n# plt.plot(val_acc, label=\"Validation Accuracy\")\n# plt.plot( np.argmax(val_acc), np.max(val_acc), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Accuracy\")\n# plt.legend()\n# # plt.figure()\n\n# # train and validation loss\n# plt.subplot(1, 2, 2)\n# plt.title(\"Loss Model 9, No CLAHE, Split 75:25\")\n# plt.plot(loss, label=\"Loss\")\n# plt.plot(val_loss, label=\"Validation loss\")\n# plt.plot( np.argmin(val_loss), np.min(val_loss), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Loss\")\n# plt.legend();\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:31:38.373428Z","iopub.status.busy":"2024-07-22T23:31:38.372971Z","iopub.status.idle":"2024-07-22T23:31:38.378116Z","shell.execute_reply":"2024-07-22T23:31:38.377267Z"},"papermill":{"duration":6.32233,"end_time":"2024-07-22T23:31:38.380005","exception":false,"start_time":"2024-07-22T23:31:32.057675","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Predict Data Validation ","metadata":{"papermill":{"duration":6.207506,"end_time":"2024-07-22T23:31:50.762150","exception":false,"start_time":"2024-07-22T23:31:44.554644","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # collect all validation label\n# y_val_9 = valid_generator_9.classes\n\n# # predict data validation\n# y_pred_9 = np.argmax(model_9.predict(valid_generator_9, steps=len(valid_generator_9)), axis=1)\n\n# # dataframe from prediction\n# df_model_9 = pd.DataFrame({'Actual': y_val_9, 'Prediction': y_pred_9})\n# print(df_model_9)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:32:03.157991Z","iopub.status.busy":"2024-07-22T23:32:03.157301Z","iopub.status.idle":"2024-07-22T23:32:03.161666Z","shell.execute_reply":"2024-07-22T23:32:03.160738Z"},"papermill":{"duration":6.198366,"end_time":"2024-07-22T23:32:03.163725","exception":false,"start_time":"2024-07-22T23:31:56.965359","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Confussion Matrix","metadata":{"papermill":{"duration":6.206949,"end_time":"2024-07-22T23:32:15.637473","exception":false,"start_time":"2024-07-22T23:32:09.430524","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# cm_9 = confusion_matrix(y_val_9, y_pred_9)\n\n# # heatmap from confussion_matrix\n# ax = plt.subplot()\n# sns.heatmap(cm_9, annot=True, fmt='d', ax=ax, cbar=False, cmap='Blues')\n\n# ax.set_xlabel('Predicted labels')\n# ax.set_ylabel('True labels')\n# ax.set_title('Confusion Matrix')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:32:28.088241Z","iopub.status.busy":"2024-07-22T23:32:28.087409Z","iopub.status.idle":"2024-07-22T23:32:28.091734Z","shell.execute_reply":"2024-07-22T23:32:28.090897Z"},"papermill":{"duration":6.253819,"end_time":"2024-07-22T23:32:28.093650","exception":false,"start_time":"2024-07-22T23:32:21.839831","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Classification Report","metadata":{"papermill":{"duration":6.258672,"end_time":"2024-07-22T23:32:40.552508","exception":false,"start_time":"2024-07-22T23:32:34.293836","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# class_names = ['No DR', 'Mild', 'Moderate', 'Severe', 'Proliferative DR']\n# report_9 = classification_report(y_val_9, y_pred_9, target_names=class_names)\n\n# print(\"Classification Report:\")\n# print(report_9)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:32:53.022745Z","iopub.status.busy":"2024-07-22T23:32:53.021887Z","iopub.status.idle":"2024-07-22T23:32:53.025956Z","shell.execute_reply":"2024-07-22T23:32:53.025119Z"},"papermill":{"duration":6.212904,"end_time":"2024-07-22T23:32:53.027866","exception":false,"start_time":"2024-07-22T23:32:46.814962","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model 10\n\n* no CLAHE\n* split data = 80:20","metadata":{"papermill":{"duration":6.19542,"end_time":"2024-07-22T23:33:05.438593","exception":false,"start_time":"2024-07-22T23:32:59.243173","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # define callback to save best model\n# checkpoint_10 = ModelCheckpoint(\"best_model_10.keras\", save_best_only=True)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:33:17.913520Z","iopub.status.busy":"2024-07-22T23:33:17.913130Z","iopub.status.idle":"2024-07-22T23:33:17.917402Z","shell.execute_reply":"2024-07-22T23:33:17.916465Z"},"papermill":{"duration":6.2397,"end_time":"2024-07-22T23:33:17.919438","exception":false,"start_time":"2024-07-22T23:33:11.679738","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # compile model 10\n# model_10 = Model(inputs=incept_model.input, outputs=predictions)\n# model_10.compile(optimizer = keras.optimizers.SGD(learning_rate=learning_rate),\n#                 loss = 'categorical_crossentropy',\n#                 metrics = ['accuracy'])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:33:30.404326Z","iopub.status.busy":"2024-07-22T23:33:30.403976Z","iopub.status.idle":"2024-07-22T23:33:30.408150Z","shell.execute_reply":"2024-07-22T23:33:30.407271Z"},"papermill":{"duration":6.275248,"end_time":"2024-07-22T23:33:30.410040","exception":false,"start_time":"2024-07-22T23:33:24.134792","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# history_10 = model_10.fit(train_generator_10, \n#                                   validation_data=valid_generator_10,\n#                                   epochs=epochs,\n#                                   callbacks=[checkpoint_10])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:33:42.800825Z","iopub.status.busy":"2024-07-22T23:33:42.799674Z","iopub.status.idle":"2024-07-22T23:33:42.804568Z","shell.execute_reply":"2024-07-22T23:33:42.803654Z"},"papermill":{"duration":6.218309,"end_time":"2024-07-22T23:33:42.806944","exception":false,"start_time":"2024-07-22T23:33:36.588635","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # evaluate validation data\n# validation_loss, validation_accuracy = model_10.evaluate(valid_generator_10)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:33:55.306257Z","iopub.status.busy":"2024-07-22T23:33:55.305527Z","iopub.status.idle":"2024-07-22T23:33:55.309565Z","shell.execute_reply":"2024-07-22T23:33:55.308685Z"},"papermill":{"duration":6.274693,"end_time":"2024-07-22T23:33:55.311537","exception":false,"start_time":"2024-07-22T23:33:49.036844","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # show best accuracy and loss result\n# max_val_acc = max(history_10.history['val_accuracy'])\n# max_train_acc = max(history_10.history['accuracy'])\n# min_val_loss = min(history_10.history['val_loss'])\n# min_train_loss = min(history_10.history['loss'])\n\n# print('Akurasi Training Tertinggi:', max_train_acc)\n# print('Akurasi Validasi Tertinggi:', max_val_acc)\n# print('Loss Training Terendah:', min_train_loss)\n# print('Loss Validasi Terendah:', min_val_loss)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:34:07.745557Z","iopub.status.busy":"2024-07-22T23:34:07.744735Z","iopub.status.idle":"2024-07-22T23:34:07.749018Z","shell.execute_reply":"2024-07-22T23:34:07.748120Z"},"papermill":{"duration":6.233454,"end_time":"2024-07-22T23:34:07.750904","exception":false,"start_time":"2024-07-22T23:34:01.517450","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Visualize Accuracy and Loss","metadata":{"papermill":{"duration":6.250302,"end_time":"2024-07-22T23:34:20.141744","exception":false,"start_time":"2024-07-22T23:34:13.891442","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # visualize accuracy and loss\n# acc = history_10.history['accuracy']\n# val_acc = history_10.history['val_accuracy']\n# loss = history_10.history['loss']\n# val_loss = history_10.history['val_loss']\n\n# plt.figure(figsize=(20, 5))\n\n# # train and validation acc\n# plt.subplot(1, 2, 1)\n# plt.title(\"Akurasi Model 10, No CLAHE, Split 80:20\")\n# plt.plot(acc,label=\"Accuracy\")\n# plt.plot(val_acc, label=\"Validation Accuracy\")\n# plt.plot( np.argmax(val_acc), np.max(val_acc), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Accuracy\")\n# plt.legend()\n# # plt.figure()\n\n# # train and validation loss\n# plt.subplot(1, 2, 2)\n# plt.title(\"Loss Model 10, No CLAHE, Split 80:20\")\n# plt.plot(loss, label=\"Loss\")\n# plt.plot(val_loss, label=\"Validation loss\")\n# plt.plot( np.argmin(val_loss), np.min(val_loss), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Loss\")\n# plt.legend();\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:34:32.523617Z","iopub.status.busy":"2024-07-22T23:34:32.522759Z","iopub.status.idle":"2024-07-22T23:34:32.527629Z","shell.execute_reply":"2024-07-22T23:34:32.526772Z"},"papermill":{"duration":6.236626,"end_time":"2024-07-22T23:34:32.529456","exception":false,"start_time":"2024-07-22T23:34:26.292830","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Predict Data Validation ","metadata":{"papermill":{"duration":6.170072,"end_time":"2024-07-22T23:34:44.925843","exception":false,"start_time":"2024-07-22T23:34:38.755771","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # collect all validation label\n# y_val_10 = valid_generator_10.classes\n\n# # predict data validation\n# y_pred_10 = np.argmax(model_10.predict(valid_generator_10, steps=len(valid_generator_10)), axis=1)\n\n# # dataframe from prediction\n# df_model_10 = pd.DataFrame({'Actual': y_val_10, 'Prediction': y_pred_10})\n# print(df_model_10)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:34:57.384482Z","iopub.status.busy":"2024-07-22T23:34:57.383630Z","iopub.status.idle":"2024-07-22T23:34:57.387812Z","shell.execute_reply":"2024-07-22T23:34:57.386926Z"},"papermill":{"duration":6.233063,"end_time":"2024-07-22T23:34:57.389742","exception":false,"start_time":"2024-07-22T23:34:51.156679","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Confussion Matrix","metadata":{"papermill":{"duration":6.230704,"end_time":"2024-07-22T23:35:09.880620","exception":false,"start_time":"2024-07-22T23:35:03.649916","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# cm_10 = confusion_matrix(y_val_10, y_pred_10)\n\n# # heatmap from confussion_matrix\n# ax = plt.subplot()\n# sns.heatmap(cm_10, annot=True, fmt='d', ax=ax, cbar=False, cmap='Blues')\n\n# ax.set_xlabel('Predicted labels')\n# ax.set_ylabel('True labels')\n# ax.set_title('Confusion Matrix')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:35:22.293897Z","iopub.status.busy":"2024-07-22T23:35:22.293539Z","iopub.status.idle":"2024-07-22T23:35:22.297747Z","shell.execute_reply":"2024-07-22T23:35:22.296875Z"},"papermill":{"duration":6.227236,"end_time":"2024-07-22T23:35:22.299642","exception":false,"start_time":"2024-07-22T23:35:16.072406","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Classification Report","metadata":{"papermill":{"duration":6.450545,"end_time":"2024-07-22T23:35:34.957143","exception":false,"start_time":"2024-07-22T23:35:28.506598","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# class_names = ['No DR', 'Mild', 'Moderate', 'Severe', 'Proliferative DR']\n# report_10 = classification_report(y_val_10, y_pred_10, target_names=class_names)\n\n# print(\"Classification Report:\")\n# print(report_10)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:35:47.728673Z","iopub.status.busy":"2024-07-22T23:35:47.727860Z","iopub.status.idle":"2024-07-22T23:35:47.732023Z","shell.execute_reply":"2024-07-22T23:35:47.731139Z"},"papermill":{"duration":6.445037,"end_time":"2024-07-22T23:35:47.733910","exception":false,"start_time":"2024-07-22T23:35:41.288873","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model 11\n\n* clip_limit = 20.0\n* tile_size = 4x4 \n* split data = 75:25","metadata":{"papermill":{"duration":6.261467,"end_time":"2024-07-22T23:36:00.309857","exception":false,"start_time":"2024-07-22T23:35:54.048390","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # define callback to save best model\n# checkpoint_11 = ModelCheckpoint(\"best_model_11.keras\", save_best_only=True)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:36:12.790447Z","iopub.status.busy":"2024-07-22T23:36:12.789645Z","iopub.status.idle":"2024-07-22T23:36:12.793713Z","shell.execute_reply":"2024-07-22T23:36:12.792769Z"},"papermill":{"duration":6.24467,"end_time":"2024-07-22T23:36:12.795603","exception":false,"start_time":"2024-07-22T23:36:06.550933","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # compile model 8\n# model_11 = Model(inputs=incept_model.input, outputs=predictions)\n# model_11.compile(optimizer = keras.optimizers.SGD(learning_rate=learning_rate),\n#                 loss = 'categorical_crossentropy',\n#                 metrics = ['accuracy'])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:36:25.268217Z","iopub.status.busy":"2024-07-22T23:36:25.267361Z","iopub.status.idle":"2024-07-22T23:36:25.271579Z","shell.execute_reply":"2024-07-22T23:36:25.270666Z"},"papermill":{"duration":6.261886,"end_time":"2024-07-22T23:36:25.273588","exception":false,"start_time":"2024-07-22T23:36:19.011702","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# history_11 = model_11.fit(train_generator_11, \n#                                   validation_data=valid_generator_11,\n#                                   epochs=epochs,\n#                                   callbacks=[checkpoint_11])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:36:37.736668Z","iopub.status.busy":"2024-07-22T23:36:37.735827Z","iopub.status.idle":"2024-07-22T23:36:37.740015Z","shell.execute_reply":"2024-07-22T23:36:37.739138Z"},"papermill":{"duration":6.256542,"end_time":"2024-07-22T23:36:37.742011","exception":false,"start_time":"2024-07-22T23:36:31.485469","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # evaluate validation data\n# validation_loss, validation_accuracy = model_11.evaluate(valid_generator_11)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:36:50.182450Z","iopub.status.busy":"2024-07-22T23:36:50.182067Z","iopub.status.idle":"2024-07-22T23:36:50.186271Z","shell.execute_reply":"2024-07-22T23:36:50.185321Z"},"papermill":{"duration":6.264292,"end_time":"2024-07-22T23:36:50.188138","exception":false,"start_time":"2024-07-22T23:36:43.923846","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # show best accuracy and loss result\n# max_val_acc = max(history_11.history['val_accuracy'])\n# max_train_acc = max(history_11.history['accuracy'])\n# min_val_loss = min(history_11.history['val_loss'])\n# min_train_loss = min(history_11.history['loss'])\n\n# print('Akurasi Training Tertinggi:', max_train_acc)\n# print('Akurasi Validasi Tertinggi:', max_val_acc)\n# print('Loss Training Terendah:', min_train_loss)\n# print('Loss Validasi Terendah:', min_val_loss)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:37:02.743188Z","iopub.status.busy":"2024-07-22T23:37:02.742836Z","iopub.status.idle":"2024-07-22T23:37:02.747211Z","shell.execute_reply":"2024-07-22T23:37:02.746370Z"},"papermill":{"duration":6.2921,"end_time":"2024-07-22T23:37:02.749090","exception":false,"start_time":"2024-07-22T23:36:56.456990","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Visualize Accuracy and Loss","metadata":{"papermill":{"duration":6.269283,"end_time":"2024-07-22T23:37:15.332042","exception":false,"start_time":"2024-07-22T23:37:09.062759","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # visualize accuracy and loss\n# acc = history_11.history['accuracy']\n# val_acc = history_11.history['val_accuracy']\n# loss = history_11.history['loss']\n# val_loss = history_11.history['val_loss']\n\n# plt.figure(figsize=(20, 5))\n\n# # train and validation acc\n# plt.subplot(1, 2, 1)\n# plt.title(\"Akurasi Model 11, CLAHE 20.0 4x4, Split 75:25\")\n# plt.plot(acc,label=\"Accuracy\")\n# plt.plot(val_acc, label=\"Validation Accuracy\")\n# plt.plot( np.argmax(val_acc), np.max(val_acc), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Accuracy\")\n# plt.legend()\n# # plt.figure()\n\n# # train and validation loss\n# plt.subplot(1, 2, 2)\n# plt.title(\"Loss Model 11, CLAHE 20.0 4x4, Split 75:25\")\n# plt.plot(loss, label=\"Loss\")\n# plt.plot(val_loss, label=\"Validation loss\")\n# plt.plot( np.argmin(val_loss), np.min(val_loss), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Loss\")\n# plt.legend();\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:37:27.911688Z","iopub.status.busy":"2024-07-22T23:37:27.911323Z","iopub.status.idle":"2024-07-22T23:37:27.916132Z","shell.execute_reply":"2024-07-22T23:37:27.915301Z"},"papermill":{"duration":6.31524,"end_time":"2024-07-22T23:37:27.918011","exception":false,"start_time":"2024-07-22T23:37:21.602771","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Predict Data Validation ","metadata":{"papermill":{"duration":6.225719,"end_time":"2024-07-22T23:37:40.450869","exception":false,"start_time":"2024-07-22T23:37:34.225150","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # collect all validation label\n# y_val_11 = valid_generator_11.classes\n\n# # predict data validation\n# y_pred_11 = np.argmax(model_11.predict(valid_generator_11, steps=len(valid_generator_11)), axis=1)\n\n# # dataframe from prediction\n# df_model_11 = pd.DataFrame({'Actual': y_val_11, 'Prediction': y_pred_11})\n# print(df_model_11)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:37:52.881320Z","iopub.status.busy":"2024-07-22T23:37:52.880624Z","iopub.status.idle":"2024-07-22T23:37:52.884882Z","shell.execute_reply":"2024-07-22T23:37:52.883957Z"},"papermill":{"duration":6.205052,"end_time":"2024-07-22T23:37:52.886864","exception":false,"start_time":"2024-07-22T23:37:46.681812","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Confussion Matrix","metadata":{"papermill":{"duration":6.224439,"end_time":"2024-07-22T23:38:05.420373","exception":false,"start_time":"2024-07-22T23:37:59.195934","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# cm_11 = confusion_matrix(y_val_11, y_pred_11)\n\n# # heatmap from confussion_matrix\n# ax = plt.subplot()\n# sns.heatmap(cm_11, annot=True, fmt='d', ax=ax, cbar=False, cmap='Blues')\n\n# ax.set_xlabel('Predicted labels')\n# ax.set_ylabel('True labels')\n# ax.set_title('Confusion Matrix')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:38:17.853525Z","iopub.status.busy":"2024-07-22T23:38:17.852680Z","iopub.status.idle":"2024-07-22T23:38:17.857026Z","shell.execute_reply":"2024-07-22T23:38:17.856124Z"},"papermill":{"duration":6.226059,"end_time":"2024-07-22T23:38:17.858956","exception":false,"start_time":"2024-07-22T23:38:11.632897","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Classification Report","metadata":{"papermill":{"duration":6.363482,"end_time":"2024-07-22T23:38:30.415803","exception":false,"start_time":"2024-07-22T23:38:24.052321","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# class_names = ['No DR', 'Mild', 'Moderate', 'Severe', 'Proliferative DR']\n# report_11 = classification_report(y_val_11, y_pred_11, target_names=class_names)\n\n# print(\"Classification Report:\")\n# print(report_11)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:38:42.902709Z","iopub.status.busy":"2024-07-22T23:38:42.901913Z","iopub.status.idle":"2024-07-22T23:38:42.905948Z","shell.execute_reply":"2024-07-22T23:38:42.905065Z"},"papermill":{"duration":6.209083,"end_time":"2024-07-22T23:38:42.907711","exception":false,"start_time":"2024-07-22T23:38:36.698628","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model 12\n\n* clip_limit = 20.0\n* tile_size = 8x8 \n* split data = 75:25","metadata":{"papermill":{"duration":6.216269,"end_time":"2024-07-22T23:38:55.359385","exception":false,"start_time":"2024-07-22T23:38:49.143116","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # define callback to save best model\n# checkpoint_12 = ModelCheckpoint(\"best_model_12.keras\", save_best_only=True)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:39:07.867346Z","iopub.status.busy":"2024-07-22T23:39:07.866615Z","iopub.status.idle":"2024-07-22T23:39:07.870494Z","shell.execute_reply":"2024-07-22T23:39:07.869618Z"},"papermill":{"duration":6.259138,"end_time":"2024-07-22T23:39:07.872331","exception":false,"start_time":"2024-07-22T23:39:01.613193","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # compile model 8\n# model_12 = Model(inputs=incept_model.input, outputs=predictions)\n# model_12.compile(optimizer = keras.optimizers.SGD(learning_rate=learning_rate),\n#                 loss = 'categorical_crossentropy',\n#                 metrics = ['accuracy'])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:39:20.279532Z","iopub.status.busy":"2024-07-22T23:39:20.278840Z","iopub.status.idle":"2024-07-22T23:39:20.283165Z","shell.execute_reply":"2024-07-22T23:39:20.282277Z"},"papermill":{"duration":6.211162,"end_time":"2024-07-22T23:39:20.285096","exception":false,"start_time":"2024-07-22T23:39:14.073934","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# history_12 = model_12.fit(train_generator_12, \n#                                   validation_data=valid_generator_12,\n#                                   epochs=epochs,\n#                                   callbacks=[checkpoint_12])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:39:32.763737Z","iopub.status.busy":"2024-07-22T23:39:32.762982Z","iopub.status.idle":"2024-07-22T23:39:32.767080Z","shell.execute_reply":"2024-07-22T23:39:32.766208Z"},"papermill":{"duration":6.301842,"end_time":"2024-07-22T23:39:32.768923","exception":false,"start_time":"2024-07-22T23:39:26.467081","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # evaluate validation data\n# validation_loss, validation_accuracy = model_12.evaluate(valid_generator_12)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:39:45.236315Z","iopub.status.busy":"2024-07-22T23:39:45.235947Z","iopub.status.idle":"2024-07-22T23:39:45.239744Z","shell.execute_reply":"2024-07-22T23:39:45.238871Z"},"papermill":{"duration":6.221933,"end_time":"2024-07-22T23:39:45.241681","exception":false,"start_time":"2024-07-22T23:39:39.019748","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # show best accuracy and loss result\n# max_val_acc = max(history_12.history['val_accuracy'])\n# max_train_acc = max(history_12.history['accuracy'])\n# min_val_loss = min(history_12.history['val_loss'])\n# min_train_loss = min(history_12.history['loss'])\n\n# print('Akurasi Training Tertinggi:', max_train_acc)\n# print('Akurasi Validasi Tertinggi:', max_val_acc)\n# print('Loss Training Terendah:', min_train_loss)\n# print('Loss Validasi Terendah:', min_val_loss)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:39:57.708656Z","iopub.status.busy":"2024-07-22T23:39:57.707810Z","iopub.status.idle":"2024-07-22T23:39:57.712336Z","shell.execute_reply":"2024-07-22T23:39:57.711405Z"},"papermill":{"duration":6.247414,"end_time":"2024-07-22T23:39:57.714389","exception":false,"start_time":"2024-07-22T23:39:51.466975","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Visualize Accuracy and Loss","metadata":{"papermill":{"duration":6.232879,"end_time":"2024-07-22T23:40:10.208604","exception":false,"start_time":"2024-07-22T23:40:03.975725","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # visualize accuracy and loss\n# acc = history_12.history['accuracy']\n# val_acc = history_12.history['val_accuracy']\n# loss = history_12.history['loss']\n# val_loss = history_12.history['val_loss']\n\n# plt.figure(figsize=(20, 5))\n\n# # train and validation acc\n# plt.subplot(1, 2, 1)\n# plt.title(\"Akurasi Model 12, CLAHE 20.0 8x8, Split 75:25\")\n# plt.plot(acc,label=\"Accuracy\")\n# plt.plot(val_acc, label=\"Validation Accuracy\")\n# plt.plot( np.argmax(val_acc), np.max(val_acc), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Accuracy\")\n# plt.legend()\n# # plt.figure()\n\n# # train and validation loss\n# plt.subplot(1, 2, 2)\n# plt.title(\"Loss Model 12, CLAHE 20.0 8x8, Split 75:25\")\n# plt.plot(loss, label=\"Loss\")\n# plt.plot(val_loss, label=\"Validation loss\")\n# plt.plot( np.argmin(val_loss), np.min(val_loss), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Loss\")\n# plt.legend();\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:40:22.660006Z","iopub.status.busy":"2024-07-22T23:40:22.659067Z","iopub.status.idle":"2024-07-22T23:40:22.664252Z","shell.execute_reply":"2024-07-22T23:40:22.663357Z"},"papermill":{"duration":6.20406,"end_time":"2024-07-22T23:40:22.666200","exception":false,"start_time":"2024-07-22T23:40:16.462140","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Predict Data Validation ","metadata":{"papermill":{"duration":6.283372,"end_time":"2024-07-22T23:40:35.167043","exception":false,"start_time":"2024-07-22T23:40:28.883671","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # collect all validation label\n# y_val_12 = valid_generator_12.classes\n\n# # predict data validation\n# y_pred_12 = np.argmax(model_12.predict(valid_generator_12, steps=len(valid_generator_12)), axis=1)\n\n# # dataframe from prediction\n# df_model_12 = pd.DataFrame({'Actual': y_val_12, 'Prediction': y_pred_12})\n# print(df_model_12)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:40:47.667609Z","iopub.status.busy":"2024-07-22T23:40:47.667204Z","iopub.status.idle":"2024-07-22T23:40:47.671572Z","shell.execute_reply":"2024-07-22T23:40:47.670665Z"},"papermill":{"duration":6.23409,"end_time":"2024-07-22T23:40:47.673453","exception":false,"start_time":"2024-07-22T23:40:41.439363","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Confussion Matrix","metadata":{"papermill":{"duration":6.22407,"end_time":"2024-07-22T23:41:00.115287","exception":false,"start_time":"2024-07-22T23:40:53.891217","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# cm_12 = confusion_matrix(y_val_12, y_pred_12)\n\n# # heatmap from confussion_matrix\n# ax = plt.subplot()\n# sns.heatmap(cm_12, annot=True, fmt='d', ax=ax, cbar=False, cmap='Blues')\n\n# ax.set_xlabel('Predicted labels')\n# ax.set_ylabel('True labels')\n# ax.set_title('Confusion Matrix')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:41:12.601393Z","iopub.status.busy":"2024-07-22T23:41:12.600566Z","iopub.status.idle":"2024-07-22T23:41:12.604892Z","shell.execute_reply":"2024-07-22T23:41:12.603960Z"},"papermill":{"duration":6.222931,"end_time":"2024-07-22T23:41:12.606943","exception":false,"start_time":"2024-07-22T23:41:06.384012","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Classification Report","metadata":{"papermill":{"duration":6.190806,"end_time":"2024-07-22T23:41:25.019898","exception":false,"start_time":"2024-07-22T23:41:18.829092","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# class_names = ['No DR', 'Mild', 'Moderate', 'Severe', 'Proliferative DR']\n# report_12 = classification_report(y_val_12, y_pred_12, target_names=class_names)\n\n# print(\"Classification Report:\")\n# print(report_12)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:41:37.532346Z","iopub.status.busy":"2024-07-22T23:41:37.531612Z","iopub.status.idle":"2024-07-22T23:41:37.535620Z","shell.execute_reply":"2024-07-22T23:41:37.534751Z"},"papermill":{"duration":6.279034,"end_time":"2024-07-22T23:41:37.537546","exception":false,"start_time":"2024-07-22T23:41:31.258512","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model 13\n\n* clip_limit = 20.0\n* tile_size = 4x4\n* split data = 80:20","metadata":{"papermill":{"duration":6.232009,"end_time":"2024-07-22T23:41:50.019564","exception":false,"start_time":"2024-07-22T23:41:43.787555","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # define callback to save best model\n# checkpoint_13 = ModelCheckpoint(\"best_model_13.keras\", save_best_only=True)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:42:02.550948Z","iopub.status.busy":"2024-07-22T23:42:02.550070Z","iopub.status.idle":"2024-07-22T23:42:02.554133Z","shell.execute_reply":"2024-07-22T23:42:02.553270Z"},"papermill":{"duration":6.286515,"end_time":"2024-07-22T23:42:02.556071","exception":false,"start_time":"2024-07-22T23:41:56.269556","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # compile model 8\n# model_13 = Model(inputs=incept_model.input, outputs=predictions)\n# model_13.compile(optimizer = keras.optimizers.SGD(learning_rate=learning_rate),\n#                 loss = 'categorical_crossentropy',\n#                 metrics = ['accuracy'])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:42:15.065099Z","iopub.status.busy":"2024-07-22T23:42:15.064149Z","iopub.status.idle":"2024-07-22T23:42:15.068462Z","shell.execute_reply":"2024-07-22T23:42:15.067598Z"},"papermill":{"duration":6.211912,"end_time":"2024-07-22T23:42:15.070491","exception":false,"start_time":"2024-07-22T23:42:08.858579","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# history_13 = model_13.fit(train_generator_13, \n#                                   validation_data=valid_generator_13,\n#                                   epochs=epochs,\n#                                   callbacks=[checkpoint_13])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:42:27.500700Z","iopub.status.busy":"2024-07-22T23:42:27.499886Z","iopub.status.idle":"2024-07-22T23:42:27.503962Z","shell.execute_reply":"2024-07-22T23:42:27.503109Z"},"papermill":{"duration":6.230843,"end_time":"2024-07-22T23:42:27.505862","exception":false,"start_time":"2024-07-22T23:42:21.275019","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # evaluate validation data\n# validation_loss, validation_accuracy = model_13.evaluate(valid_generator_13)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:42:39.989448Z","iopub.status.busy":"2024-07-22T23:42:39.989102Z","iopub.status.idle":"2024-07-22T23:42:39.993135Z","shell.execute_reply":"2024-07-22T23:42:39.992277Z"},"papermill":{"duration":6.289865,"end_time":"2024-07-22T23:42:39.995040","exception":false,"start_time":"2024-07-22T23:42:33.705175","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # show best accuracy and loss result\n# max_val_acc = max(history_13.history['val_accuracy'])\n# max_train_acc = max(history_13.history['accuracy'])\n# min_val_loss = min(history_13.history['val_loss'])\n# min_train_loss = min(history_13.history['loss'])\n\n# print('Akurasi Training Tertinggi:', max_train_acc)\n# print('Akurasi Validasi Tertinggi:', max_val_acc)\n# print('Loss Training Terendah:', min_train_loss)\n# print('Loss Validasi Terendah:', min_val_loss)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:42:52.433387Z","iopub.status.busy":"2024-07-22T23:42:52.432556Z","iopub.status.idle":"2024-07-22T23:42:52.436887Z","shell.execute_reply":"2024-07-22T23:42:52.435996Z"},"papermill":{"duration":6.21703,"end_time":"2024-07-22T23:42:52.438772","exception":false,"start_time":"2024-07-22T23:42:46.221742","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Visualize Accuracy and Loss","metadata":{"papermill":{"duration":6.216081,"end_time":"2024-07-22T23:43:04.905093","exception":false,"start_time":"2024-07-22T23:42:58.689012","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # visualize accuracy and loss\n# acc = history_13.history['accuracy']\n# val_acc = history_13.history['val_accuracy']\n# loss = history_13.history['loss']\n# val_loss = history_13.history['val_loss']\n\n# plt.figure(figsize=(20, 5))\n\n# # train and validation acc\n# plt.subplot(1, 2, 1)\n# plt.title(\"Akurasi Model 13, CLAHE 20.0 4x4, Split 80:20\")\n# plt.plot(acc,label=\"Accuracy\")\n# plt.plot(val_acc, label=\"Validation Accuracy\")\n# plt.plot( np.argmax(val_acc), np.max(val_acc), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Accuracy\")\n# plt.legend()\n# # plt.figure()\n\n# # train and validation loss\n# plt.subplot(1, 2, 2)\n# plt.title(\"Loss Model 13, CLAHE 20.0 4x4, Split 80:20\")\n# plt.plot(loss, label=\"Loss\")\n# plt.plot(val_loss, label=\"Validation loss\")\n# plt.plot( np.argmin(val_loss), np.min(val_loss), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Loss\")\n# plt.legend();\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:43:17.504849Z","iopub.status.busy":"2024-07-22T23:43:17.504038Z","iopub.status.idle":"2024-07-22T23:43:17.508902Z","shell.execute_reply":"2024-07-22T23:43:17.508031Z"},"papermill":{"duration":6.293276,"end_time":"2024-07-22T23:43:17.510782","exception":false,"start_time":"2024-07-22T23:43:11.217506","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Predict Data Validation ","metadata":{"papermill":{"duration":6.29742,"end_time":"2024-07-22T23:43:30.031415","exception":false,"start_time":"2024-07-22T23:43:23.733995","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # collect all validation label\n# y_val_13 = valid_generator_13.classes\n\n# # predict data validation\n# y_pred_13 = np.argmax(model_13.predict(valid_generator_13, steps=len(valid_generator_13)), axis=1)\n\n# # dataframe from prediction\n# df_model_13 = pd.DataFrame({'Actual': y_val_13, 'Prediction': y_pred_13})\n# print(df_model_13)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:43:42.541058Z","iopub.status.busy":"2024-07-22T23:43:42.540427Z","iopub.status.idle":"2024-07-22T23:43:42.544783Z","shell.execute_reply":"2024-07-22T23:43:42.543733Z"},"papermill":{"duration":6.292242,"end_time":"2024-07-22T23:43:42.546748","exception":false,"start_time":"2024-07-22T23:43:36.254506","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Confussion Matrix","metadata":{"papermill":{"duration":6.17341,"end_time":"2024-07-22T23:43:54.941091","exception":false,"start_time":"2024-07-22T23:43:48.767681","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# cm_13 = confusion_matrix(y_val_13, y_pred_13)\n\n# # heatmap from confussion_matrix\n# ax = plt.subplot()\n# sns.heatmap(cm_13, annot=True, fmt='d', ax=ax, cbar=False, cmap='Blues')\n\n# ax.set_xlabel('Predicted labels')\n# ax.set_ylabel('True labels')\n# ax.set_title('Confusion Matrix')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:44:07.414758Z","iopub.status.busy":"2024-07-22T23:44:07.413992Z","iopub.status.idle":"2024-07-22T23:44:07.418245Z","shell.execute_reply":"2024-07-22T23:44:07.417406Z"},"papermill":{"duration":6.284783,"end_time":"2024-07-22T23:44:07.420110","exception":false,"start_time":"2024-07-22T23:44:01.135327","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Classification Report","metadata":{"papermill":{"duration":6.253554,"end_time":"2024-07-22T23:44:19.938149","exception":false,"start_time":"2024-07-22T23:44:13.684595","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# class_names = ['No DR', 'Mild', 'Moderate', 'Severe', 'Proliferative DR']\n# report_13 = classification_report(y_val_13, y_pred_13, target_names=class_names)\n\n# print(\"Classification Report:\")\n# print(report_13)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:44:32.697433Z","iopub.status.busy":"2024-07-22T23:44:32.696573Z","iopub.status.idle":"2024-07-22T23:44:32.700887Z","shell.execute_reply":"2024-07-22T23:44:32.699992Z"},"papermill":{"duration":6.296929,"end_time":"2024-07-22T23:44:32.702852","exception":false,"start_time":"2024-07-22T23:44:26.405923","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model 14\n\n* clip_limit = 20.0\n* tile_size = 8x8 \n* split data = 80:20","metadata":{"papermill":{"duration":6.312342,"end_time":"2024-07-22T23:44:45.307351","exception":false,"start_time":"2024-07-22T23:44:38.995009","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # define callback to save best model\n# checkpoint_14 = ModelCheckpoint(\"best_model_14.keras\", save_best_only=True)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:44:57.816594Z","iopub.status.busy":"2024-07-22T23:44:57.816252Z","iopub.status.idle":"2024-07-22T23:44:57.820131Z","shell.execute_reply":"2024-07-22T23:44:57.819271Z"},"papermill":{"duration":6.256367,"end_time":"2024-07-22T23:44:57.822145","exception":false,"start_time":"2024-07-22T23:44:51.565778","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # compile model 8\n# model_14 = Model(inputs=incept_model.input, outputs=predictions)\n# model_14.compile(optimizer = keras.optimizers.SGD(learning_rate=learning_rate),\n#                 loss = 'categorical_crossentropy',\n#                 metrics = ['accuracy'])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:45:10.362498Z","iopub.status.busy":"2024-07-22T23:45:10.361865Z","iopub.status.idle":"2024-07-22T23:45:10.366139Z","shell.execute_reply":"2024-07-22T23:45:10.365328Z"},"papermill":{"duration":6.287247,"end_time":"2024-07-22T23:45:10.368045","exception":false,"start_time":"2024-07-22T23:45:04.080798","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# history_14 = model_14.fit(train_generator_14, \n#                                   validation_data=valid_generator_14,\n#                                   epochs=epochs,\n#                                   callbacks=[checkpoint_14])","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:45:22.993465Z","iopub.status.busy":"2024-07-22T23:45:22.992827Z","iopub.status.idle":"2024-07-22T23:45:22.997062Z","shell.execute_reply":"2024-07-22T23:45:22.996353Z"},"papermill":{"duration":6.262106,"end_time":"2024-07-22T23:45:22.998966","exception":false,"start_time":"2024-07-22T23:45:16.736860","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # evaluate validation data\n# validation_loss, validation_accuracy = model_14.evaluate(valid_generator_14)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:45:35.434979Z","iopub.status.busy":"2024-07-22T23:45:35.434623Z","iopub.status.idle":"2024-07-22T23:45:35.438543Z","shell.execute_reply":"2024-07-22T23:45:35.437678Z"},"papermill":{"duration":6.225886,"end_time":"2024-07-22T23:45:35.440383","exception":false,"start_time":"2024-07-22T23:45:29.214497","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # show best accuracy and loss result\n# max_val_acc = max(history_14.history['val_accuracy'])\n# max_train_acc = max(history_14.history['accuracy'])\n# min_val_loss = min(history_14.history['val_loss'])\n# min_train_loss = min(history_14.history['loss'])\n\n# print('Akurasi Training Tertinggi:', max_train_acc)\n# print('Akurasi Validasi Tertinggi:', max_val_acc)\n# print('Loss Training Terendah:', min_train_loss)\n# print('Loss Validasi Terendah:', min_val_loss)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:45:48.036751Z","iopub.status.busy":"2024-07-22T23:45:48.035836Z","iopub.status.idle":"2024-07-22T23:45:48.040478Z","shell.execute_reply":"2024-07-22T23:45:48.039710Z"},"papermill":{"duration":6.363059,"end_time":"2024-07-22T23:45:48.042375","exception":false,"start_time":"2024-07-22T23:45:41.679316","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Visualize Accuracy and Loss","metadata":{"papermill":{"duration":6.28589,"end_time":"2024-07-22T23:46:00.542956","exception":false,"start_time":"2024-07-22T23:45:54.257066","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # visualize accuracy and loss\n# acc = history_14.history['accuracy']\n# val_acc = history_14.history['val_accuracy']\n# loss = history_14.history['loss']\n# val_loss = history_14.history['val_loss']\n\n# plt.figure(figsize=(20, 5))\n\n# # train and validation acc\n# plt.subplot(1, 2, 1)\n# plt.title(\"Akurasi Model 14, CLAHE 20.0 8x8, Split 80:20\")\n# plt.plot(acc,label=\"Accuracy\")\n# plt.plot(val_acc, label=\"Validation Accuracy\")\n# plt.plot( np.argmax(val_acc), np.max(val_acc), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Accuracy\")\n# plt.legend()\n# # plt.figure()\n\n# # train and validation loss\n# plt.subplot(1, 2, 2)\n# plt.title(\"Loss Model 14, CLAHE 20.0 8x8, Split 80:20\")\n# plt.plot(loss, label=\"Loss\")\n# plt.plot(val_loss, label=\"Validation loss\")\n# plt.plot( np.argmin(val_loss), np.min(val_loss), marker=\"x\", color=\"r\", label=\"Best model\")\n# plt.xlabel(\"Epochs\")\n# plt.ylabel(\"Loss\")\n# plt.legend();\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:46:12.997984Z","iopub.status.busy":"2024-07-22T23:46:12.997629Z","iopub.status.idle":"2024-07-22T23:46:13.002456Z","shell.execute_reply":"2024-07-22T23:46:13.001574Z"},"papermill":{"duration":6.226411,"end_time":"2024-07-22T23:46:13.004523","exception":false,"start_time":"2024-07-22T23:46:06.778112","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Predict Data Validation ","metadata":{"papermill":{"duration":6.17706,"end_time":"2024-07-22T23:46:25.468265","exception":false,"start_time":"2024-07-22T23:46:19.291205","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# # collect all validation label\n# y_val_14 = valid_generator_14.classes\n\n# # predict data validation\n# y_pred_14 = np.argmax(model_14.predict(valid_generator_14, steps=len(valid_generator_14)), axis=1)\n\n# # dataframe from prediction\n# df_model_14 = pd.DataFrame({'Actual': y_val_14, 'Prediction': y_pred_14})\n# print(df_model_14)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:46:37.957660Z","iopub.status.busy":"2024-07-22T23:46:37.957295Z","iopub.status.idle":"2024-07-22T23:46:37.961544Z","shell.execute_reply":"2024-07-22T23:46:37.960676Z"},"papermill":{"duration":6.255053,"end_time":"2024-07-22T23:46:37.963423","exception":false,"start_time":"2024-07-22T23:46:31.708370","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Confussion Matrix","metadata":{"papermill":{"duration":6.332266,"end_time":"2024-07-22T23:46:50.519990","exception":false,"start_time":"2024-07-22T23:46:44.187724","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# cm_14 = confusion_matrix(y_val_14, y_pred_14)\n\n# # heatmap from confussion_matrix\n# ax = plt.subplot()\n# sns.heatmap(cm_14, annot=True, fmt='d', ax=ax, cbar=False, cmap='Blues')\n\n# ax.set_xlabel('Predicted labels')\n# ax.set_ylabel('True labels')\n# ax.set_title('Confusion Matrix')\n# plt.show()","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:47:02.988774Z","iopub.status.busy":"2024-07-22T23:47:02.988064Z","iopub.status.idle":"2024-07-22T23:47:02.992379Z","shell.execute_reply":"2024-07-22T23:47:02.991471Z"},"papermill":{"duration":6.216073,"end_time":"2024-07-22T23:47:02.994314","exception":false,"start_time":"2024-07-22T23:46:56.778241","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Classification Report","metadata":{"papermill":{"duration":6.223095,"end_time":"2024-07-22T23:47:15.471184","exception":false,"start_time":"2024-07-22T23:47:09.248089","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# class_names = ['No DR', 'Mild', 'Moderate', 'Severe', 'Proliferative DR']\n# report_14 = classification_report(y_val_14, y_pred_14, target_names=class_names)\n\n# print(\"Classification Report:\")\n# print(report_14)","metadata":{"execution":{"iopub.execute_input":"2024-07-22T23:47:27.996502Z","iopub.status.busy":"2024-07-22T23:47:27.996146Z","iopub.status.idle":"2024-07-22T23:47:28.000293Z","shell.execute_reply":"2024-07-22T23:47:27.999397Z"},"papermill":{"duration":6.252382,"end_time":"2024-07-22T23:47:28.002345","exception":false,"start_time":"2024-07-22T23:47:21.749963","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]}]}