{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":18647,"databundleVersionId":1126921,"sourceType":"competition"},{"sourceId":1101206,"sourceType":"datasetVersion","datasetId":615046}],"dockerImageVersionId":30674,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-04-22T10:41:15.108744Z","iopub.execute_input":"2024-04-22T10:41:15.109293Z","iopub.status.idle":"2024-04-22T10:42:04.976662Z","shell.execute_reply.started":"2024-04-22T10:41:15.109262Z","shell.execute_reply":"2024-04-22T10:42:04.975656Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = pd.read_csv('/kaggle/input/prostate-cancer-grade-assessment/train.csv')","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:43:04.946882Z","iopub.execute_input":"2024-04-22T10:43:04.947772Z","iopub.status.idle":"2024-04-22T10:43:04.989218Z","shell.execute_reply.started":"2024-04-22T10:43:04.947741Z","shell.execute_reply":"2024-04-22T10:43:04.988361Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:43:07.056676Z","iopub.execute_input":"2024-04-22T10:43:07.057406Z","iopub.status.idle":"2024-04-22T10:43:07.081366Z","shell.execute_reply.started":"2024-04-22T10:43:07.057374Z","shell.execute_reply":"2024-04-22T10:43:07.080321Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def convert_gleason_score(score):\n    try:\n        parts = score.split('+')\n        return int(parts[0]) + int(parts[1])\n    except (ValueError, AttributeError):\n        return np.nan\n\ntrain_df['gleason_score_numeric'] = train_df['gleason_score'].apply(convert_gleason_score)","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:43:10.756403Z","iopub.execute_input":"2024-04-22T10:43:10.757382Z","iopub.status.idle":"2024-04-22T10:43:10.780468Z","shell.execute_reply.started":"2024-04-22T10:43:10.757344Z","shell.execute_reply":"2024-04-22T10:43:10.779536Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:43:13.285548Z","iopub.execute_input":"2024-04-22T10:43:13.285935Z","iopub.status.idle":"2024-04-22T10:43:13.304401Z","shell.execute_reply.started":"2024-04-22T10:43:13.285905Z","shell.execute_reply":"2024-04-22T10:43:13.303394Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport seaborn as sns","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:43:16.277494Z","iopub.execute_input":"2024-04-22T10:43:16.277849Z","iopub.status.idle":"2024-04-22T10:43:17.683956Z","shell.execute_reply.started":"2024-04-22T10:43:16.27782Z","shell.execute_reply":"2024-04-22T10:43:17.683202Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import warnings\nwarnings.filterwarnings('ignore')","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:43:20.220846Z","iopub.execute_input":"2024-04-22T10:43:20.221338Z","iopub.status.idle":"2024-04-22T10:43:20.225805Z","shell.execute_reply.started":"2024-04-22T10:43:20.221308Z","shell.execute_reply":"2024-04-22T10:43:20.224826Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(12, 6))\nplt.subplot(1, 2, 1)\nsns.countplot(x='isup_grade', data=train_df)\nplt.title('Distribution of ISUP Grade')\n\nfor p in plt.gca().patches:\n    plt.gca().annotate(f\"{p.get_height()}\", (p.get_x() + p.get_width() / 2., p.get_height()), ha='center', va='center', fontsize=10, color='black', xytext=(0, 5), textcoords='offset points')\n\nplt.subplot(1, 2, 2)\nsns.countplot(x='gleason_score_numeric', data=train_df)\nplt.title('Distribution of Gleason Score (Numeric)')\n\nfor p in plt.gca().patches:\n    plt.gca().annotate(f\"{p.get_height()}\", (p.get_x() + p.get_width() / 2., p.get_height()), ha='center', va='center', fontsize=10, color='black', xytext=(0, 5), textcoords='offset points')\n\nplt.tight_layout()\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:43:23.053784Z","iopub.execute_input":"2024-04-22T10:43:23.054606Z","iopub.status.idle":"2024-04-22T10:43:23.657219Z","shell.execute_reply.started":"2024-04-22T10:43:23.054572Z","shell.execute_reply":"2024-04-22T10:43:23.656281Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import cv2","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:43:27.149975Z","iopub.execute_input":"2024-04-22T10:43:27.150838Z","iopub.status.idle":"2024-04-22T10:43:27.393761Z","shell.execute_reply.started":"2024-04-22T10:43:27.150805Z","shell.execute_reply":"2024-04-22T10:43:27.392952Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image_dir = '/kaggle/input/prostate-cancer-grade-assessment/train_images/'","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:43:29.638403Z","iopub.execute_input":"2024-04-22T10:43:29.639261Z","iopub.status.idle":"2024-04-22T10:43:29.643222Z","shell.execute_reply.started":"2024-04-22T10:43:29.639227Z","shell.execute_reply":"2024-04-22T10:43:29.642221Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image_size = 256","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:43:32.100541Z","iopub.execute_input":"2024-04-22T10:43:32.100897Z","iopub.status.idle":"2024-04-22T10:43:32.105374Z","shell.execute_reply.started":"2024-04-22T10:43:32.100869Z","shell.execute_reply":"2024-04-22T10:43:32.104416Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image_ids = train_df['image_id'].iloc[:9].tolist()","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:43:37.381315Z","iopub.execute_input":"2024-04-22T10:43:37.381677Z","iopub.status.idle":"2024-04-22T10:43:37.38658Z","shell.execute_reply.started":"2024-04-22T10:43:37.381647Z","shell.execute_reply":"2024-04-22T10:43:37.38533Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import openslide","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:43:39.159528Z","iopub.execute_input":"2024-04-22T10:43:39.159873Z","iopub.status.idle":"2024-04-22T10:43:39.289897Z","shell.execute_reply.started":"2024-04-22T10:43:39.159844Z","shell.execute_reply":"2024-04-22T10:43:39.288931Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image_id = train_df['image_id'].iloc[0]\nfull_image_path = image_dir + image_id + '.tiff'\n\ntry:\n\n    example = openslide.OpenSlide(full_image_path)\n\n    clipped_example = example.read_region((5000, 5000), 0, (image_size, image_size))\n\n    plt.imshow(clipped_example)\n    plt.title(f\"Image ID: {image_id}\")\n    plt.axis('off')\n\n    example.close()\nexcept Exception as e:\n    print(f\"Error loading image {image_id}: {e}\")\n\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:43:41.228794Z","iopub.execute_input":"2024-04-22T10:43:41.229512Z","iopub.status.idle":"2024-04-22T10:43:41.564119Z","shell.execute_reply.started":"2024-04-22T10:43:41.229482Z","shell.execute_reply":"2024-04-22T10:43:41.563213Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df[\"image_path\"] = [image_dir+image_id+\".tiff\" for image_id in train_df[\"image_id\"]]","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:43:45.397061Z","iopub.execute_input":"2024-04-22T10:43:45.397929Z","iopub.status.idle":"2024-04-22T10:43:45.407995Z","shell.execute_reply.started":"2024-04-22T10:43:45.397898Z","shell.execute_reply":"2024-04-22T10:43:45.40709Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:43:47.787541Z","iopub.execute_input":"2024-04-22T10:43:47.788301Z","iopub.status.idle":"2024-04-22T10:43:47.805253Z","shell.execute_reply.started":"2024-04-22T10:43:47.78827Z","shell.execute_reply":"2024-04-22T10:43:47.804277Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.countplot(data=train_df, x='isup_grade')\nplt.title('Distribution of ISUP grades')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:43:50.669408Z","iopub.execute_input":"2024-04-22T10:43:50.670305Z","iopub.status.idle":"2024-04-22T10:43:50.860071Z","shell.execute_reply.started":"2024-04-22T10:43:50.670272Z","shell.execute_reply":"2024-04-22T10:43:50.859213Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(8, 6))\nplt.pie(train_df['isup_grade'].value_counts(), labels=train_df['isup_grade'].unique(), autopct='%1.1f%%', startangle=140)\nplt.title('Distribution of ISUP grades')\nplt.axis('equal')  \nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:43:54.11285Z","iopub.execute_input":"2024-04-22T10:43:54.113565Z","iopub.status.idle":"2024-04-22T10:43:54.273047Z","shell.execute_reply.started":"2024-04-22T10:43:54.113532Z","shell.execute_reply":"2024-04-22T10:43:54.272001Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.countplot(data=train_df, x='data_provider')\nplt.title('Distribution of Data Providers')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:43:57.629424Z","iopub.execute_input":"2024-04-22T10:43:57.630201Z","iopub.status.idle":"2024-04-22T10:43:57.823856Z","shell.execute_reply.started":"2024-04-22T10:43:57.630169Z","shell.execute_reply":"2024-04-22T10:43:57.8229Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(8, 6))\nplt.pie(train_df['data_provider'].value_counts(), labels=train_df['data_provider'].unique(), autopct='%1.1f%%', startangle=140)\nplt.title('Distribution of Data Providers')\nplt.axis('equal')  \nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:44:00.98344Z","iopub.execute_input":"2024-04-22T10:44:00.984178Z","iopub.status.idle":"2024-04-22T10:44:01.156833Z","shell.execute_reply.started":"2024-04-22T10:44:00.984148Z","shell.execute_reply":"2024-04-22T10:44:01.150204Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.countplot(data=train_df, x='gleason_score_numeric')\nplt.title('Distribution of Gleason Scores')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:44:04.268734Z","iopub.execute_input":"2024-04-22T10:44:04.26971Z","iopub.status.idle":"2024-04-22T10:44:04.525867Z","shell.execute_reply.started":"2024-04-22T10:44:04.269664Z","shell.execute_reply":"2024-04-22T10:44:04.524933Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"correlation_matrix = train_df[['isup_grade', 'gleason_score_numeric']].corr()\nsns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')\nplt.title('Correlation Matrix')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:44:07.229364Z","iopub.execute_input":"2024-04-22T10:44:07.229732Z","iopub.status.idle":"2024-04-22T10:44:07.531132Z","shell.execute_reply.started":"2024-04-22T10:44:07.229703Z","shell.execute_reply":"2024-04-22T10:44:07.530258Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"training_item_count = int(len(train_df) * 0.8)\nvalidation_df = train_df[training_item_count:]\ntrain_df = train_df[:training_item_count]","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:44:11.422038Z","iopub.execute_input":"2024-04-22T10:44:11.422759Z","iopub.status.idle":"2024-04-22T10:44:11.427565Z","shell.execute_reply.started":"2024-04-22T10:44:11.422728Z","shell.execute_reply":"2024-04-22T10:44:11.426476Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_single_sample(image_path, image_size=256, training=False, display=False):\n    image = openslide.OpenSlide(image_path)\n    mask_path = image_path.replace(\"train_images\", \"train_label_masks\").replace(\".tiff\", \"_mask.tiff\")\n    mask = openslide.OpenSlide(mask_path)\n    \n    stacked_image = []\n    groundtruth_per_image = []\n    \n    maximum_iteration = 0\n    selected_sample = False\n    while not selected_sample:\n        sampling_start_x = randint(image_size, image.dimensions[0] - image_size)\n        sampling_start_y = randint(image_size, image.dimensions[1] - image_size)\n\n        clipped_sample = image.read_region((sampling_start_x, sampling_start_y), 0, (256, 256))\n        clipped_array = np.asarray(clipped_sample)\n        \n        if (not np.all(clipped_array == 255) and np.std(clipped_array) > 20) or maximum_iteration > 200:\n            if display:\n                plt.imshow(clipped_sample)\n                plt.show()\n                \n            sampled_image = clipped_array[:, :, :3]\n            \n            if training:\n                clipped_mask = mask.read_region((sampling_start_x, sampling_start_y), 0, (256, 256))\n                groundtruth_per_image.append(np.mean(np.asarray(clipped_mask)[:, :, 0]))\n            \n            selected_sample = True\n        maximum_iteration += 1\n    \n    if training: \n        return np.array(sampled_image), np.array(groundtruth_per_image)\n    else:\n        return np.array(sampled_image)","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:44:14.620895Z","iopub.execute_input":"2024-04-22T10:44:14.621274Z","iopub.status.idle":"2024-04-22T10:44:14.631649Z","shell.execute_reply.started":"2024-04-22T10:44:14.621245Z","shell.execute_reply":"2024-04-22T10:44:14.630677Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_random_samples(image_path, image_size=256, display=False):\n    image = openslide.OpenSlide(image_path)\n    stacked_image = []\n    \n    selected_samples = 0\n    maximum_iteration = 0\n    while selected_samples < 3:\n        sampling_start_x = randint(image_size, image.dimensions[0] - image_size)\n        sampling_start_y = randint(image_size, image.dimensions[1] - image_size)\n\n        clipped_sample = image.read_region((sampling_start_x, sampling_start_y), 0, (256, 256))\n        clipped_array = np.asarray(clipped_sample)\n        \n        if (not np.all(clipped_array == 255) and np.std(clipped_array) > 20) or maximum_iteration > 200:\n            if display:\n                plt.imshow(clipped_sample)\n                plt.show()\n\n            stacked_image.append(clipped_array[:, :, :3])\n            selected_samples += 1\n        maximum_iteration += 1\n    return np.array(stacked_image)","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:44:17.715841Z","iopub.execute_input":"2024-04-22T10:44:17.716626Z","iopub.status.idle":"2024-04-22T10:44:17.725271Z","shell.execute_reply.started":"2024-04-22T10:44:17.716593Z","shell.execute_reply":"2024-04-22T10:44:17.724125Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def custom_single_image_generator(image_path_list, batch_size=16):\n    while True:\n        for start in range(0, len(image_path_list), batch_size):\n            X_batch = []\n            Y_batch = []\n            end = min(start + batch_size, training_item_count)\n\n            image_info_list = [get_single_sample(image_path, training=True) for image_path in image_path_list[start:end]]\n            X_batch = np.array([image_info[0]/255. for image_info in image_info_list])\n            Y_batch = np.array([image_info[1] for image_info in image_info_list])\n            \n            yield X_batch, Y_batch ","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:44:20.292612Z","iopub.execute_input":"2024-04-22T10:44:20.293251Z","iopub.status.idle":"2024-04-22T10:44:20.30012Z","shell.execute_reply.started":"2024-04-22T10:44:20.293218Z","shell.execute_reply":"2024-04-22T10:44:20.299085Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from random import randint ","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:44:22.931653Z","iopub.execute_input":"2024-04-22T10:44:22.932386Z","iopub.status.idle":"2024-04-22T10:44:22.936508Z","shell.execute_reply.started":"2024-04-22T10:44:22.932356Z","shell.execute_reply":"2024-04-22T10:44:22.935396Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"random_samples = get_random_samples(train_df.iloc[0].image_path, display=True)\nprint(\"Random samples shape:\", random_samples.shape)","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:44:26.03751Z","iopub.execute_input":"2024-04-22T10:44:26.038417Z","iopub.status.idle":"2024-04-22T10:44:27.431702Z","shell.execute_reply.started":"2024-04-22T10:44:26.038383Z","shell.execute_reply":"2024-04-22T10:44:27.430797Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image_path = train_df.iloc[0].image_path  \nsample_image, groundtruth = get_single_sample(image_path, training=True, display=True)\n\nprint(\"Sample Image Shape:\", sample_image.shape)\nprint(\"Ground Truth:\", groundtruth)","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:44:33.33217Z","iopub.execute_input":"2024-04-22T10:44:33.332789Z","iopub.status.idle":"2024-04-22T10:44:33.834713Z","shell.execute_reply.started":"2024-04-22T10:44:33.332759Z","shell.execute_reply":"2024-04-22T10:44:33.833601Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nfrom sklearn.utils import resample\nfrom sklearn.preprocessing import LabelEncoder\nfrom sklearn.utils.class_weight import compute_class_weight\nimport tensorflow as tf\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:45:23.236895Z","iopub.execute_input":"2024-04-22T10:45:23.237699Z","iopub.status.idle":"2024-04-22T10:45:37.058642Z","shell.execute_reply.started":"2024-04-22T10:45:23.237664Z","shell.execute_reply":"2024-04-22T10:45:37.05757Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import cv2\nimport PIL\nfrom IPython.display import Image, display\nfrom keras.applications.vgg16 import VGG16,preprocess_input\nimport plotly.graph_objs as go\nfrom sklearn.model_selection import train_test_split\nfrom keras.models import Sequential, Model,load_model\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator, load_img, img_to_array\nfrom keras.models import Sequential\nfrom keras.layers import Conv2D, MaxPooling2D, Dense, Dropout, Input, Flatten,BatchNormalization,Activation\nfrom keras.layers import GlobalMaxPooling2D\nfrom keras.models import Model\nfrom keras.optimizers import Adam, SGD, RMSprop\nfrom keras.callbacks import ModelCheckpoint, Callback, EarlyStopping\nfrom keras.utils import to_categorical\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nimport gc\nimport skimage.io\nfrom sklearn.model_selection import KFold\nimport tensorflow as tf\nfrom tensorflow.python.keras import backend as K\nsess = K.get_session()","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:47:28.207342Z","iopub.execute_input":"2024-04-22T10:47:28.208084Z","iopub.status.idle":"2024-04-22T10:47:29.111Z","shell.execute_reply.started":"2024-04-22T10:47:28.208043Z","shell.execute_reply":"2024-04-22T10:47:29.110215Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img=openslide.OpenSlide('/kaggle/input/prostate-cancer-grade-assessment/train_images/2fd1c7dc4a0f3a546a59717d8e9d28c3.tiff')\ndisplay(img.get_thumbnail(size=(512,512)))","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:47:33.077085Z","iopub.execute_input":"2024-04-22T10:47:33.078295Z","iopub.status.idle":"2024-04-22T10:47:33.358Z","shell.execute_reply.started":"2024-04-22T10:47:33.078262Z","shell.execute_reply":"2024-04-22T10:47:33.357102Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img.dimensions","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:47:36.577864Z","iopub.execute_input":"2024-04-22T10:47:36.578267Z","iopub.status.idle":"2024-04-22T10:47:36.585178Z","shell.execute_reply.started":"2024-04-22T10:47:36.578236Z","shell.execute_reply":"2024-04-22T10:47:36.584118Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df['isup_grade'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:47:39.165278Z","iopub.execute_input":"2024-04-22T10:47:39.1657Z","iopub.status.idle":"2024-04-22T10:47:39.179854Z","shell.execute_reply.started":"2024-04-22T10:47:39.165665Z","shell.execute_reply":"2024-04-22T10:47:39.177964Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"labels=[]\ndata=[]\ndata_dir='/kaggle/input/panda-resized-train-data-512x512/train_images/train_images/'\nfor i in range(train_df.shape[0]):\n    data.append(data_dir + train_df['image_id'].iloc[i]+'.png')\n    labels.append(train_df['isup_grade'].iloc[i])\ndf=pd.DataFrame(data)\ndf.columns=['images']\ndf['isup_grade']=labels","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:47:41.660738Z","iopub.execute_input":"2024-04-22T10:47:41.6614Z","iopub.status.idle":"2024-04-22T10:47:41.954957Z","shell.execute_reply.started":"2024-04-22T10:47:41.661367Z","shell.execute_reply":"2024-04-22T10:47:41.954207Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:47:44.532339Z","iopub.execute_input":"2024-04-22T10:47:44.532688Z","iopub.status.idle":"2024-04-22T10:47:44.543765Z","shell.execute_reply.started":"2024-04-22T10:47:44.532659Z","shell.execute_reply":"2024-04-22T10:47:44.542887Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = df['images']\ny = df['isup_grade']","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:48:06.387395Z","iopub.execute_input":"2024-04-22T10:48:06.387772Z","iopub.status.idle":"2024-04-22T10:48:06.392667Z","shell.execute_reply.started":"2024-04-22T10:48:06.387742Z","shell.execute_reply":"2024-04-22T10:48:06.391568Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:48:35.155613Z","iopub.execute_input":"2024-04-22T10:48:35.156483Z","iopub.status.idle":"2024-04-22T10:48:35.165512Z","shell.execute_reply.started":"2024-04-22T10:48:35.156448Z","shell.execute_reply":"2024-04-22T10:48:35.16446Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"label_encoder = LabelEncoder()\ny_train_encoded = label_encoder.fit_transform(y_train)\ny_test_encoded = label_encoder.transform(y_test)","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:49:03.074571Z","iopub.execute_input":"2024-04-22T10:49:03.074944Z","iopub.status.idle":"2024-04-22T10:49:03.082682Z","shell.execute_reply.started":"2024-04-22T10:49:03.074916Z","shell.execute_reply":"2024-04-22T10:49:03.081675Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class_weights = compute_class_weight('balanced', classes=np.unique(y_train_encoded), y=y_train_encoded)","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:49:18.466707Z","iopub.execute_input":"2024-04-22T10:49:18.467094Z","iopub.status.idle":"2024-04-22T10:49:18.474417Z","shell.execute_reply.started":"2024-04-22T10:49:18.467044Z","shell.execute_reply":"2024-04-22T10:49:18.47361Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train_balanced = pd.concat([X_train, y_train], axis=1)\nmajority_class = X_train_balanced['isup_grade'].value_counts().idxmax()\nminority_classes = [grade for grade in X_train_balanced['isup_grade'].unique() if grade != majority_class]","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:50:24.072848Z","iopub.execute_input":"2024-04-22T10:50:24.073247Z","iopub.status.idle":"2024-04-22T10:50:24.081854Z","shell.execute_reply.started":"2024-04-22T10:50:24.073216Z","shell.execute_reply":"2024-04-22T10:50:24.080799Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"upsampled_data = [X_train_balanced]\nfor grade in minority_classes:\n    minority_class_data = X_train_balanced[X_train_balanced['isup_grade'] == grade]\n    upsampled_minority_class = resample(minority_class_data, replace=True, n_samples=X_train_balanced['isup_grade'].value_counts()[majority_class], random_state=42)\n    upsampled_data.append(upsampled_minority_class)","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:50:40.744949Z","iopub.execute_input":"2024-04-22T10:50:40.745716Z","iopub.status.idle":"2024-04-22T10:50:40.761051Z","shell.execute_reply.started":"2024-04-22T10:50:40.745684Z","shell.execute_reply":"2024-04-22T10:50:40.760182Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train_balanced = pd.concat(upsampled_data)","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:50:52.649851Z","iopub.execute_input":"2024-04-22T10:50:52.650677Z","iopub.status.idle":"2024-04-22T10:50:52.655775Z","shell.execute_reply.started":"2024-04-22T10:50:52.650642Z","shell.execute_reply":"2024-04-22T10:50:52.65486Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_datagen = ImageDataGenerator(\n    rescale=1./255,\n    rotation_range=20,\n    width_shift_range=0.2,\n    height_shift_range=0.2,\n    shear_range=0.2,\n    zoom_range=0.2,\n    horizontal_flip=True,\n    fill_mode='nearest'\n)","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:51:08.088815Z","iopub.execute_input":"2024-04-22T10:51:08.089528Z","iopub.status.idle":"2024-04-22T10:51:08.094844Z","shell.execute_reply.started":"2024-04-22T10:51:08.089493Z","shell.execute_reply":"2024-04-22T10:51:08.093734Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Sequential([\n    Conv2D(32, (3, 3), activation='relu', input_shape=(512, 512, 3)),\n    MaxPooling2D((2, 2)),\n    Conv2D(64, (3, 3), activation='relu'),\n    MaxPooling2D((2, 2)),\n    Conv2D(128, (3, 3), activation='relu'),\n    MaxPooling2D((2, 2)),\n    Conv2D(128, (3, 3), activation='relu'),\n    MaxPooling2D((2, 2)),\n    Flatten(),\n    Dense(512, activation='relu'),\n    Dense(6, activation='softmax')  # 6 classes in total\n])\n\n# Compile the model\nmodel.compile(optimizer='adam',\n              loss='sparse_categorical_crossentropy',\n              metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:52:25.267455Z","iopub.execute_input":"2024-04-22T10:52:25.267834Z","iopub.status.idle":"2024-04-22T10:52:25.328585Z","shell.execute_reply.started":"2024-04-22T10:52:25.267806Z","shell.execute_reply":"2024-04-22T10:52:25.327564Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Convert 'isup_grade' column to integer type if needed\nX_train_balanced['isup_grade'] = X_train_balanced['isup_grade'].astype(int)\n\n# Define image data generator for data augmentation\ntrain_datagen = ImageDataGenerator(\n    rescale=1./255,\n    rotation_range=20,\n    width_shift_range=0.2,\n    height_shift_range=0.2,\n    shear_range=0.2,\n    zoom_range=0.2,\n    horizontal_flip=True,\n    fill_mode='nearest'\n)\n\n# Train the model\ntrain_generator = train_datagen.flow_from_dataframe(\n    dataframe=X_train_balanced,\n    x_col=\"images\",\n    y_col=\"isup_grade\",\n    target_size=(512, 512),\n    batch_size=32,\n    class_mode='sparse'\n)","metadata":{"execution":{"iopub.status.busy":"2024-04-22T10:52:31.361434Z","iopub.execute_input":"2024-04-22T10:52:31.362313Z","iopub.status.idle":"2024-04-22T10:52:31.471119Z","shell.execute_reply.started":"2024-04-22T10:52:31.362279Z","shell.execute_reply":"2024-04-22T10:52:31.469781Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train, X_val, y_train, y_val = train_test_split(df['images'],df['isup_grade'], test_size=0.2, random_state=41)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T12:56:43.123403Z","iopub.execute_input":"2024-04-09T12:56:43.123737Z","iopub.status.idle":"2024-04-09T12:56:43.1353Z","shell.execute_reply.started":"2024-04-09T12:56:43.123706Z","shell.execute_reply":"2024-04-09T12:56:43.134348Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train=pd.DataFrame(X_train)\ntrain.columns=['images']\ntrain['isup_grade']=y_train\n\nvalidation=pd.DataFrame(X_val)\nvalidation.columns=['images']\nvalidation['isup_grade']=y_val\n\ntrain['isup_grade']=train['isup_grade'].astype(str)\nvalidation['isup_grade']=validation['isup_grade'].astype(str)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T12:56:43.136352Z","iopub.execute_input":"2024-04-09T12:56:43.136644Z","iopub.status.idle":"2024-04-09T12:56:43.148509Z","shell.execute_reply.started":"2024-04-09T12:56:43.13661Z","shell.execute_reply":"2024-04-09T12:56:43.147633Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_datagen = ImageDataGenerator(rescale=1./255,rotation_range=20,\n    width_shift_range=0.2,\n    height_shift_range=0.2,horizontal_flip=True)\nval_datagen=train_datagen = ImageDataGenerator(rescale=1./255)\ntrain_generator = train_datagen.flow_from_dataframe(\n    train,\n    x_col='images',\n    y_col='isup_grade',\n    target_size=(224, 224),\n    batch_size=32,\n    class_mode='categorical')\n\nvalidation_generator = val_datagen.flow_from_dataframe(\n    validation,\n    x_col='images',\n    y_col='isup_grade',\n    target_size=(224, 224),\n    batch_size=32,\n    class_mode='categorical')","metadata":{"execution":{"iopub.status.busy":"2024-04-09T12:56:43.149831Z","iopub.execute_input":"2024-04-09T12:56:43.150421Z","iopub.status.idle":"2024-04-09T12:56:46.852784Z","shell.execute_reply.started":"2024-04-09T12:56:43.150388Z","shell.execute_reply":"2024-04-09T12:56:46.852063Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.applications import VGG16\nfrom tensorflow.keras.models import Model\nfrom tensorflow.keras.layers import Dense, Flatten\nfrom tensorflow.keras.optimizers import Adam","metadata":{"execution":{"iopub.status.busy":"2024-04-09T12:56:46.853859Z","iopub.execute_input":"2024-04-09T12:56:46.854167Z","iopub.status.idle":"2024-04-09T12:56:46.865054Z","shell.execute_reply.started":"2024-04-09T12:56:46.854143Z","shell.execute_reply":"2024-04-09T12:56:46.864186Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))","metadata":{"execution":{"iopub.status.busy":"2024-04-09T12:56:46.866354Z","iopub.execute_input":"2024-04-09T12:56:46.866719Z","iopub.status.idle":"2024-04-09T12:56:48.031461Z","shell.execute_reply.started":"2024-04-09T12:56:46.866686Z","shell.execute_reply":"2024-04-09T12:56:48.030596Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x = base_model.output\nx = Flatten()(x)\nx = Dense(1024, activation='relu')(x)  \nx = Dropout(0.5)(x)  \nx = BatchNormalization()(x)  \nx = Dense(512, activation='relu')(x)  \nx = Dropout(0.5)(x)  \nx = BatchNormalization()(x)  \npredictions = Dense(6, activation='softmax')(x)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T12:56:48.032703Z","iopub.execute_input":"2024-04-09T12:56:48.033081Z","iopub.status.idle":"2024-04-09T12:56:48.085654Z","shell.execute_reply.started":"2024-04-09T12:56:48.033048Z","shell.execute_reply":"2024-04-09T12:56:48.084972Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Model(inputs=base_model.input, outputs=predictions)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T12:56:48.086593Z","iopub.execute_input":"2024-04-09T12:56:48.086848Z","iopub.status.idle":"2024-04-09T12:56:48.097102Z","shell.execute_reply.started":"2024-04-09T12:56:48.086825Z","shell.execute_reply":"2024-04-09T12:56:48.096068Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.optimizers import Adam","metadata":{"execution":{"iopub.status.busy":"2024-04-09T12:56:48.098288Z","iopub.execute_input":"2024-04-09T12:56:48.098705Z","iopub.status.idle":"2024-04-09T12:56:48.104054Z","shell.execute_reply.started":"2024-04-09T12:56:48.098674Z","shell.execute_reply":"2024-04-09T12:56:48.103273Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(optimizer=Adam(learning_rate=0.0001), loss='categorical_crossentropy', metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2024-04-09T12:56:48.105156Z","iopub.execute_input":"2024-04-09T12:56:48.105422Z","iopub.status.idle":"2024-04-09T12:56:48.122264Z","shell.execute_reply.started":"2024-04-09T12:56:48.105399Z","shell.execute_reply":"2024-04-09T12:56:48.121558Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit(\n    train_generator,\n    steps_per_epoch=len(train_generator),\n    epochs=3,  \n    validation_data=validation_generator,\n    validation_steps=len(validation_generator)\n)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T12:56:48.123246Z","iopub.execute_input":"2024-04-09T12:56:48.12351Z","iopub.status.idle":"2024-04-09T13:02:34.359559Z","shell.execute_reply.started":"2024-04-09T12:56:48.123487Z","shell.execute_reply":"2024-04-09T13:02:34.358729Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"loss, accuracy = model.evaluate(validation_generator)\nprint(\"Validation Loss:\", loss)\nprint(\"Validation Accuracy:\", accuracy)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:02:34.360918Z","iopub.execute_input":"2024-04-09T13:02:34.361223Z","iopub.status.idle":"2024-04-09T13:02:55.0818Z","shell.execute_reply.started":"2024-04-09T13:02:34.361198Z","shell.execute_reply":"2024-04-09T13:02:55.080822Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import confusion_matrix, classification_report\n\ny_pred = model.predict(validation_generator)\ny_pred_classes = np.argmax(y_pred, axis=1)\n\ny_true = validation_generator.classes\n\nconf_matrix = confusion_matrix(y_true, y_pred_classes)\n\nclass_report = classification_report(y_true, y_pred_classes)\n\nprint(\"Confusion Matrix:\")\nprint(conf_matrix)\n\nprint(\"\\nClassification Report:\")\nprint(class_report)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:02:55.083131Z","iopub.execute_input":"2024-04-09T13:02:55.083859Z","iopub.status.idle":"2024-04-09T13:03:07.158906Z","shell.execute_reply.started":"2024-04-09T13:02:55.083824Z","shell.execute_reply":"2024-04-09T13:03:07.157636Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\n\nplt.plot(history.history['accuracy'], label='Training Accuracy')\nplt.plot(history.history['val_accuracy'], label='Validation Accuracy')\nplt.xlabel('Epoch')\nplt.ylabel('Accuracy')\nplt.title('Training and Validation Accuracy')\nplt.legend()\nplt.show()\n\nplt.plot(history.history['loss'], label='Training Loss')\nplt.plot(history.history['val_loss'], label='Validation Loss')\nplt.xlabel('Epoch')\nplt.ylabel('Loss')\nplt.title('Training and Validation Loss')\nplt.legend()\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:03:07.160792Z","iopub.execute_input":"2024-04-09T13:03:07.161127Z","iopub.status.idle":"2024-04-09T13:03:07.780172Z","shell.execute_reply.started":"2024-04-09T13:03:07.1611Z","shell.execute_reply":"2024-04-09T13:03:07.779085Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.applications import VGG19","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:03:07.781543Z","iopub.execute_input":"2024-04-09T13:03:07.782182Z","iopub.status.idle":"2024-04-09T13:03:07.786467Z","shell.execute_reply.started":"2024-04-09T13:03:07.782147Z","shell.execute_reply":"2024-04-09T13:03:07.785593Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"base_model = VGG19(weights='imagenet', include_top=False, input_shape=(224, 224, 3))","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:03:07.787611Z","iopub.execute_input":"2024-04-09T13:03:07.788374Z","iopub.status.idle":"2024-04-09T13:03:08.876121Z","shell.execute_reply.started":"2024-04-09T13:03:07.788338Z","shell.execute_reply":"2024-04-09T13:03:08.875313Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x = base_model.output\nx = Flatten()(x)\nx = Dense(1024, activation='relu')(x)  \nx = Dropout(0.5)(x)  \nx = BatchNormalization()(x)  \nx = Dense(512, activation='relu')(x)  \nx = Dropout(0.5)(x)  \nx = BatchNormalization()(x)  \npredictions = Dense(6, activation='softmax')(x)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:03:08.877204Z","iopub.execute_input":"2024-04-09T13:03:08.877484Z","iopub.status.idle":"2024-04-09T13:03:08.924718Z","shell.execute_reply.started":"2024-04-09T13:03:08.87746Z","shell.execute_reply":"2024-04-09T13:03:08.924015Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Model(inputs=base_model.input, outputs=predictions)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:03:08.925842Z","iopub.execute_input":"2024-04-09T13:03:08.926253Z","iopub.status.idle":"2024-04-09T13:03:08.936468Z","shell.execute_reply.started":"2024-04-09T13:03:08.926217Z","shell.execute_reply":"2024-04-09T13:03:08.935495Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(optimizer=Adam(0.001), loss='categorical_crossentropy', metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:03:08.937505Z","iopub.execute_input":"2024-04-09T13:03:08.937859Z","iopub.status.idle":"2024-04-09T13:03:08.949436Z","shell.execute_reply.started":"2024-04-09T13:03:08.937835Z","shell.execute_reply":"2024-04-09T13:03:08.94847Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit(\n    train_generator,\n    steps_per_epoch=len(train_generator),\n    epochs=3, \n    validation_data=validation_generator,\n    validation_steps=len(validation_generator)\n)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:03:08.950724Z","iopub.execute_input":"2024-04-09T13:03:08.951063Z","iopub.status.idle":"2024-04-09T13:07:12.203108Z","shell.execute_reply.started":"2024-04-09T13:03:08.951018Z","shell.execute_reply":"2024-04-09T13:07:12.202228Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"loss, accuracy = model.evaluate(validation_generator)\nprint(\"Validation Loss:\", loss)\nprint(\"Validation Accuracy:\", accuracy)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:07:12.204769Z","iopub.execute_input":"2024-04-09T13:07:12.205206Z","iopub.status.idle":"2024-04-09T13:07:23.906992Z","shell.execute_reply.started":"2024-04-09T13:07:12.205169Z","shell.execute_reply":"2024-04-09T13:07:23.906096Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred = model.predict(validation_generator)\ny_pred_classes = np.argmax(y_pred, axis=1)\n\ny_true = validation_generator.classes\n\nconf_matrix = confusion_matrix(y_true, y_pred_classes)\n\nclass_report = classification_report(y_true, y_pred_classes)\n\nprint(\"Confusion Matrix:\")\nprint(conf_matrix)\n\nprint(\"\\nClassification Report:\")\nprint(class_report)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:07:23.908078Z","iopub.execute_input":"2024-04-09T13:07:23.908363Z","iopub.status.idle":"2024-04-09T13:07:36.307042Z","shell.execute_reply.started":"2024-04-09T13:07:23.90834Z","shell.execute_reply":"2024-04-09T13:07:36.306011Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.applications import InceptionV3","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:07:36.308866Z","iopub.execute_input":"2024-04-09T13:07:36.309239Z","iopub.status.idle":"2024-04-09T13:07:36.3138Z","shell.execute_reply.started":"2024-04-09T13:07:36.309205Z","shell.execute_reply":"2024-04-09T13:07:36.312745Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"base_model = InceptionV3(weights='imagenet', include_top=False, input_shape=(224, 224, 3))","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:07:36.315102Z","iopub.execute_input":"2024-04-09T13:07:36.315398Z","iopub.status.idle":"2024-04-09T13:07:38.895786Z","shell.execute_reply.started":"2024-04-09T13:07:36.315373Z","shell.execute_reply":"2024-04-09T13:07:38.894799Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.layers import GlobalAveragePooling2D","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:07:38.897461Z","iopub.execute_input":"2024-04-09T13:07:38.897818Z","iopub.status.idle":"2024-04-09T13:07:38.902416Z","shell.execute_reply.started":"2024-04-09T13:07:38.897786Z","shell.execute_reply":"2024-04-09T13:07:38.901501Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x = base_model.output\nx = GlobalAveragePooling2D()(x)\nx = Dense(1024, activation='relu')(x)\npredictions = Dense(6, activation='softmax')(x)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:07:38.903455Z","iopub.execute_input":"2024-04-09T13:07:38.903744Z","iopub.status.idle":"2024-04-09T13:07:38.93922Z","shell.execute_reply.started":"2024-04-09T13:07:38.90372Z","shell.execute_reply":"2024-04-09T13:07:38.938329Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Model(inputs=base_model.input, outputs=predictions)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:07:38.94033Z","iopub.execute_input":"2024-04-09T13:07:38.942269Z","iopub.status.idle":"2024-04-09T13:07:38.988239Z","shell.execute_reply.started":"2024-04-09T13:07:38.942236Z","shell.execute_reply":"2024-04-09T13:07:38.987384Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for layer in base_model.layers:\n    layer.trainable = False","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:07:38.989433Z","iopub.execute_input":"2024-04-09T13:07:38.990022Z","iopub.status.idle":"2024-04-09T13:07:39.001315Z","shell.execute_reply.started":"2024-04-09T13:07:38.98999Z","shell.execute_reply":"2024-04-09T13:07:39.000285Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(optimizer=Adam(0.0001), loss='categorical_crossentropy', metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:07:39.002678Z","iopub.execute_input":"2024-04-09T13:07:39.00302Z","iopub.status.idle":"2024-04-09T13:07:39.013588Z","shell.execute_reply.started":"2024-04-09T13:07:39.00299Z","shell.execute_reply":"2024-04-09T13:07:39.012712Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit(\n    train_generator,\n    steps_per_epoch=len(train_generator),\n    epochs=20,  \n    validation_data=validation_generator,\n    validation_steps=len(validation_generator)\n)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:07:39.01496Z","iopub.execute_input":"2024-04-09T13:07:39.015298Z","iopub.status.idle":"2024-04-09T13:17:36.118428Z","shell.execute_reply.started":"2024-04-09T13:07:39.015273Z","shell.execute_reply":"2024-04-09T13:17:36.117656Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"loss, accuracy = model.evaluate(validation_generator)\nprint(\"Validation Loss:\", loss)\nprint(\"Validation Accuracy:\", accuracy)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:17:36.1199Z","iopub.execute_input":"2024-04-09T13:17:36.120349Z","iopub.status.idle":"2024-04-09T13:17:47.692669Z","shell.execute_reply.started":"2024-04-09T13:17:36.120315Z","shell.execute_reply":"2024-04-09T13:17:47.691776Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred = model.predict(validation_generator)\ny_pred_classes = np.argmax(y_pred, axis=1)\n\ny_true = validation_generator.classes\n\nconf_matrix = confusion_matrix(y_true, y_pred_classes)\n\nclass_report = classification_report(y_true, y_pred_classes)\n\nprint(\"Confusion Matrix:\")\nprint(conf_matrix)\n\nprint(\"\\nClassification Report:\")\nprint(class_report)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:17:47.693948Z","iopub.execute_input":"2024-04-09T13:17:47.694336Z","iopub.status.idle":"2024-04-09T13:18:10.297903Z","shell.execute_reply.started":"2024-04-09T13:17:47.694304Z","shell.execute_reply":"2024-04-09T13:18:10.297011Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(history.history['accuracy'], label='Training Accuracy')\nplt.plot(history.history['val_accuracy'], label='Validation Accuracy')\nplt.xlabel('Epoch')\nplt.ylabel('Accuracy')\nplt.title('Training and Validation Accuracy')\nplt.legend()\nplt.show()\n\nplt.plot(history.history['loss'], label='Training Loss')\nplt.plot(history.history['val_loss'], label='Validation Loss')\nplt.xlabel('Epoch')\nplt.ylabel('Loss')\nplt.title('Training and Validation Loss')\nplt.legend()\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-04-09T13:18:33.957443Z","iopub.execute_input":"2024-04-09T13:18:33.957811Z","iopub.status.idle":"2024-04-09T13:18:34.624939Z","shell.execute_reply.started":"2024-04-09T13:18:33.957783Z","shell.execute_reply":"2024-04-09T13:18:34.624009Z"},"trusted":true},"execution_count":null,"outputs":[]}]}