{"metadata":{"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":87323,"databundleVersionId":9934427,"sourceType":"competition"}],"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true},"colab":{"provenance":[],"gpuType":"T4"},"accelerator":"GPU","widgets":{"application/vnd.jupyter.widget-state+json":{"9b75e13667eb42b7938c53f7c9c81250":{"model_module":"@jupyter-widgets/controls","model_name":"VBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"VBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"VBoxView","box_style":"","children":["IPY_MODEL_81799031748b4611957e829d82bd7e0e","IPY_MODEL_2b0f6aa6428545c4affe67a3a4d4c27e","IPY_MODEL_f8cbaac12d6b454bbe7e96dbf59f4fdd","IPY_MODEL_938aa7bc2aee4ccfb7f6eeea13322e92","IPY_MODEL_15aa22d908c64ce2810fa574dc8f53e7"],"layout":"IPY_MODEL_a691ef951ab048888d4fd8927907cb0d"}},"81799031748b4611957e829d82bd7e0e":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_825d5744b26349f3b9deb0210524f9cd","placeholder":"​","style":"IPY_MODEL_7505c55fddf6499e8d65a6bcf6ad90d8","value":"<center> <img\nsrc=https://www.kaggle.com/static/images/site-logo.png\nalt='Kaggle'> <br> Create an API token from <a\nhref=\"https://www.kaggle.com/settings/account\" target=\"_blank\">your Kaggle\nsettings page</a> and paste it below along with your Kaggle username. <br> </center>"}},"2b0f6aa6428545c4affe67a3a4d4c27e":{"model_module":"@jupyter-widgets/controls","model_name":"TextModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"TextModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"TextView","continuous_update":true,"description":"Username:","description_tooltip":null,"disabled":false,"layout":"IPY_MODEL_0b77ebec21f44109ac7c2b3a9c5c83e1","placeholder":"​","style":"IPY_MODEL_569e9c43dda44c9987b3878a067a672d","value":""}},"f8cbaac12d6b454bbe7e96dbf59f4fdd":{"model_module":"@jupyter-widgets/controls","model_name":"PasswordModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"PasswordModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"PasswordView","continuous_update":true,"description":"Token:","description_tooltip":null,"disabled":false,"layout":"IPY_MODEL_9fa118b45188485b975ed6fe56dd8e46","placeholder":"​","style":"IPY_MODEL_4aa1a5387f104b698d999b1635226ff9","value":""}},"938aa7bc2aee4ccfb7f6eeea13322e92":{"model_module":"@jupyter-widgets/controls","model_name":"ButtonModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ButtonModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ButtonView","button_style":"","description":"Login","disabled":false,"icon":"","layout":"IPY_MODEL_79396388965946a08267523c06f8db0f","style":"IPY_MODEL_47b2213a14e54debaba9ef6b67d81bee","tooltip":""}},"15aa22d908c64ce2810fa574dc8f53e7":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_163aedf905b04307b5f59c77f4f38d0f","placeholder":"​","style":"IPY_MODEL_3eb20b2af4454b9fb52be8a068e9f79b","value":"\n<b>Thank You</b></center>"}},"a691ef951ab048888d4fd8927907cb0d":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":"center","align_self":null,"border":null,"bottom":null,"display":"flex","flex":null,"flex_flow":"column","grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":"50%"}},"825d5744b26349f3b9deb0210524f9cd":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"7505c55fddf6499e8d65a6bcf6ad90d8":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"0b77ebec21f44109ac7c2b3a9c5c83e1":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"569e9c43dda44c9987b3878a067a672d":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"9fa118b45188485b975ed6fe56dd8e46":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"4aa1a5387f104b698d999b1635226ff9":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"79396388965946a08267523c06f8db0f":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"47b2213a14e54debaba9ef6b67d81bee":{"model_module":"@jupyter-widgets/controls","model_name":"ButtonStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ButtonStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","button_color":null,"font_weight":""}},"163aedf905b04307b5f59c77f4f38d0f":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"3eb20b2af4454b9fb52be8a068e9f79b":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}}}}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Introduction\n### 🧾 Problem Statement\nWith the rapid rise in AI-generated visual content, distinguishing real-world driving scenes from synthetic ones is increasingly important for maintaining data integrity in autonomous driving systems. This notebook focuses on training a deep learning model that can accurately classify RGB images as either:\n\nReal (label = 1)\n\nFake (label = 0)\n\n___\n### 📁 Dataset Overview  \nImages are in JPEG format and in RGB color space.\n\nLabels are provided for training data.\n\nTest data is unlabeled and evaluated through a test dir.\n___\n### ⚙️ Objective\nPreprocess the data.\n\nTrain a robust neural network model for binary classification.\n\nUse transfer learning with pre-trained CNN architectures (Xception, EfficientNet, MobileNet, etc.) to boost performance.\n\nGenerate predictions for the test dataset and format them for submission.","metadata":{"id":"lpD8--b_Z7qH"}},{"cell_type":"code","source":"# IMPORTANT: SOME KAGGLE DATA SOURCES ARE PRIVATE\n# RUN THIS CELL IN ORDER TO IMPORT YOUR KAGGLE DATA SOURCES.\nimport kagglehub\nkagglehub.login()\n","metadata":{"id":"KnKiBDyh7eLL","outputId":"c0fe792a-d937-4ae6-e847-b6d06cd72277"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from google.colab import files\nfiles.upload()  # Upload kaggle.json\n","metadata":{"id":"ZIuVhkdu84sL","outputId":"165b3f1d-92eb-4392-8d10-a3ac7784e689"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!mkdir -p ~/.kaggle\n!mv kaggle.json ~/.kaggle/\n!chmod 600 ~/.kaggle/kaggle.json\n","metadata":{"id":"smHixN749CTo"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!kaggle competitions download -c cidaut-ai-fake-scene-classification-2024\n!unzip -q cidaut-ai-fake-scene-classification-2024.zip\n","metadata":{"id":"Ug1P7Hrv7eLN","outputId":"b67838ff-3902-4105-c051-b0e2156f039a"},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Imports","metadata":{"id":"clMe2Kia7eLO"}},{"cell_type":"code","source":"import os\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator, load_img, img_to_array\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom PIL import Image\nimport collections\nimport cv2\nfrom tensorflow.keras import layers\nimport random\n\nfrom tensorflow.keras.applications import MobileNetV2, MobileNetV3Small ,EfficientNetB0,EfficientNetV2B0,Xception\nfrom tensorflow.keras.layers import Dense, GlobalAveragePooling2D, Dropout\nfrom tensorflow.keras.models import Model , load_model\nfrom tensorflow.keras.optimizers import Adam\nfrom tensorflow.keras.callbacks import ModelCheckpoint\nfrom sklearn.utils.class_weight import compute_class_weight\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:09:36.298436Z","iopub.execute_input":"2025-07-22T16:09:36.298943Z","iopub.status.idle":"2025-07-22T16:09:55.978641Z","shell.execute_reply.started":"2025-07-22T16:09:36.298909Z","shell.execute_reply":"2025-07-22T16:09:55.978078Z"},"id":"dXUWItl87eLP"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"SEED = 42\nos.environ['PYTHONHASHSEED'] = str(SEED)\nrandom.seed(SEED)\nnp.random.seed(SEED)\ntf.random.set_seed(SEED)","metadata":{"id":"wxs6RzjSd949"},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Load Data","metadata":{"id":"gNIY7DPV7eLP"}},{"cell_type":"code","source":"train_df = pd.read_csv('/content/train.csv')\ntrain_df.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:09:55.979875Z","iopub.execute_input":"2025-07-22T16:09:55.98037Z","iopub.status.idle":"2025-07-22T16:09:56.019757Z","shell.execute_reply.started":"2025-07-22T16:09:55.98035Z","shell.execute_reply":"2025-07-22T16:09:56.01907Z"},"id":"AXPUv9k57eLQ","outputId":"610b194d-3c3f-4d1a-8617-dc7d7fbdde1f"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(train_df.columns)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:09:56.0205Z","iopub.execute_input":"2025-07-22T16:09:56.020764Z","iopub.status.idle":"2025-07-22T16:09:56.026322Z","shell.execute_reply.started":"2025-07-22T16:09:56.02074Z","shell.execute_reply":"2025-07-22T16:09:56.025819Z"},"id":"VgiKTMTg7eLQ","outputId":"5b3a32fa-30ed-4570-cf41-f305a465c67f"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_df['label'] = train_df['label'].astype(str)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:09:56.027119Z","iopub.execute_input":"2025-07-22T16:09:56.027788Z","iopub.status.idle":"2025-07-22T16:09:56.046923Z","shell.execute_reply.started":"2025-07-22T16:09:56.027764Z","shell.execute_reply":"2025-07-22T16:09:56.046436Z"},"id":"pAA_xC9C7eLQ"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"class_counts=train_df['label'].value_counts()\nprint(class_counts)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:09:56.048607Z","iopub.execute_input":"2025-07-22T16:09:56.049139Z","iopub.status.idle":"2025-07-22T16:09:56.071717Z","shell.execute_reply.started":"2025-07-22T16:09:56.049122Z","shell.execute_reply":"2025-07-22T16:09:56.071057Z"},"id":"lUg6nPyS7eLQ","outputId":"fbd37dba-dadb-4d6a-f7d0-e3bffeb964e8"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_datagen = ImageDataGenerator(\n    rescale=1./255,\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    brightness_range=[0.8,1.2],\n    fill_mode='nearest',\n    validation_split=0.1\n\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:09:56.0724Z","iopub.execute_input":"2025-07-22T16:09:56.072634Z","iopub.status.idle":"2025-07-22T16:09:56.088549Z","shell.execute_reply.started":"2025-07-22T16:09:56.072612Z","shell.execute_reply":"2025-07-22T16:09:56.088074Z"},"id":"BsGYbXs-7eLR"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_generator = train_datagen.flow_from_dataframe(\n    train_df,\n    directory='/content/Train',\n    x_col='image',\n    y_col='label',\n    class_mode='binary',\n    target_size=(224, 224),\n    batch_size=32,\n    subset='training',\n    shuffle=True\n)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:09:56.089303Z","iopub.execute_input":"2025-07-22T16:09:56.089538Z","iopub.status.idle":"2025-07-22T16:09:58.440598Z","shell.execute_reply.started":"2025-07-22T16:09:56.089517Z","shell.execute_reply":"2025-07-22T16:09:58.439951Z"},"id":"w1bwhKiV7eLR","outputId":"48d34de8-54cf-4722-e265-d911bf5d0a1a"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"val_generator = train_datagen.flow_from_dataframe(\n    train_df,\n    directory='/content/Train',\n    x_col='image',\n    y_col='label',\n    class_mode='binary',\n    target_size=(224, 224),\n    batch_size=32,\n    subset='validation',\n    shuffle=False  )","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:09:58.441265Z","iopub.execute_input":"2025-07-22T16:09:58.441532Z","iopub.status.idle":"2025-07-22T16:09:58.454813Z","shell.execute_reply.started":"2025-07-22T16:09:58.441507Z","shell.execute_reply":"2025-07-22T16:09:58.454294Z"},"id":"jnYNqXQn7eLR","outputId":"af21bbbd-4226-494e-d835-024abaed30ab"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test_images = []\nimage_names = []\ntest_dir=\"/content/Test\"\nfor filename in sorted(os.listdir(test_dir)):\n    if filename.endswith('.jpg'):\n        img_path = os.path.join(test_dir, filename)\n        img = load_img(img_path, target_size=(224, 224))\n        img_array = img_to_array(img) / 255.0\n        test_images.append(img_array)\n        image_names.append(filename)\n\nX_test = np.array(test_images)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:09:58.455648Z","iopub.execute_input":"2025-07-22T16:09:58.455865Z","iopub.status.idle":"2025-07-22T16:10:01.444448Z","shell.execute_reply.started":"2025-07-22T16:09:58.45585Z","shell.execute_reply":"2025-07-22T16:10:01.443639Z"},"id":"kIqXLixh7eLR"},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Some Analysis","metadata":{"id":"iTPIKBRz7eLR"}},{"cell_type":"code","source":"images, labels = next(train_generator)\nplt.figure(figsize=(12, 6))\nfor i in range(6):\n    plt.subplot(2, 3, i + 1)\n    plt.imshow(images[i])\n    plt.title(f\"Label: {int(labels[i])}\")\n    plt.axis('off')\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:10:01.445373Z","iopub.execute_input":"2025-07-22T16:10:01.44567Z","iopub.status.idle":"2025-07-22T16:10:02.90925Z","shell.execute_reply.started":"2025-07-22T16:10:01.445649Z","shell.execute_reply":"2025-07-22T16:10:02.908506Z"},"id":"KLstg1zq7eLR","outputId":"bb2bd734-2790-422b-db5b-2bc74e5918a6"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"labels_list = []\nnum_batches = len(train_generator)\n\nfor _ in range(num_batches):\n    _, labels = next(train_generator)\n    labels_list.extend(labels)\n\nlabel_counts = collections.Counter(labels_list)\n\nplt.bar(['Label 0', 'Label 1'], [label_counts[0], label_counts[1]])\nplt.title('Class Distribution')\nplt.ylabel('Number of Samples')\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:10:02.910216Z","iopub.execute_input":"2025-07-22T16:10:02.910437Z","iopub.status.idle":"2025-07-22T16:10:18.264535Z","shell.execute_reply.started":"2025-07-22T16:10:02.91042Z","shell.execute_reply":"2025-07-22T16:10:18.263697Z"},"id":"WnmuL2uK7eLS","outputId":"15a60091-2c2f-46f3-b0cd-a69dbf4df008"},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"it is slightly imbalanced","metadata":{"id":"ymVFUYvi7eLS"}},{"cell_type":"code","source":"total = len(train_df)\npercentages = (class_counts / total) * 100","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:10:18.265304Z","iopub.execute_input":"2025-07-22T16:10:18.265604Z","iopub.status.idle":"2025-07-22T16:10:18.269874Z","shell.execute_reply.started":"2025-07-22T16:10:18.265579Z","shell.execute_reply":"2025-07-22T16:10:18.26909Z"},"id":"3UMx16nd7eLS"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"labels = class_counts.index\nsizes = class_counts.values\ncolors = ['#66b3ff', '#ff9999']\nexplode = (0.05, 0)\nplt.figure(figsize=(6, 6))\nplt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140,\n        colors=colors, explode=explode, shadow=True)\nplt.title('Class Distribution')\nplt.axis('equal')\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:10:18.270769Z","iopub.execute_input":"2025-07-22T16:10:18.271139Z","iopub.status.idle":"2025-07-22T16:10:18.414328Z","shell.execute_reply.started":"2025-07-22T16:10:18.271115Z","shell.execute_reply":"2025-07-22T16:10:18.413579Z"},"id":"QZKYwGw27eLS","outputId":"a057de4d-b417-4858-aae5-4819ad1f630b"},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Modeling","metadata":{"id":"_Pc3ZBDV7eLS"}},{"cell_type":"markdown","source":"## mobilevnet2","metadata":{"id":"ctMSd9Si7eLS"}},{"cell_type":"code","source":"base_model = MobileNetV2(weights='imagenet', include_top=False, input_shape=(224, 224, 3))\nbase_model.trainable = False","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:10:18.41699Z","iopub.execute_input":"2025-07-22T16:10:18.417323Z","iopub.status.idle":"2025-07-22T16:10:22.849133Z","shell.execute_reply.started":"2025-07-22T16:10:18.417303Z","shell.execute_reply":"2025-07-22T16:10:22.848537Z"},"id":"GUVAgeH17eLS","outputId":"00be7d18-cfe5-4510-aaa6-e2ecbca141b1"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"x = base_model.output\nx = GlobalAveragePooling2D()(x)\nx = Dropout(0.3)(x)\noutput = Dense(1, activation='sigmoid')(x)\n\nmodel = Model(inputs=base_model.input, outputs=output)\nmodel.compile(optimizer=Adam(learning_rate=1e-4), loss='binary_crossentropy', metrics=['accuracy'])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:10:22.849839Z","iopub.execute_input":"2025-07-22T16:10:22.850095Z","iopub.status.idle":"2025-07-22T16:10:22.883295Z","shell.execute_reply.started":"2025-07-22T16:10:22.850069Z","shell.execute_reply":"2025-07-22T16:10:22.882578Z"},"id":"5dnDg17x7eLS"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"class_weights = compute_class_weight(\n    class_weight='balanced',\n    classes=np.unique(train_generator.classes),\n    y=train_generator.classes\n)\nclass_weight_dict = dict(enumerate(class_weights))\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:10:22.884052Z","iopub.execute_input":"2025-07-22T16:10:22.88432Z","iopub.status.idle":"2025-07-22T16:10:22.935595Z","shell.execute_reply.started":"2025-07-22T16:10:22.884296Z","shell.execute_reply":"2025-07-22T16:10:22.935055Z"},"id":"e-FpUwOe7eLS"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"checkpoint_cb = ModelCheckpoint(\n    'best_model.h5',\n    monitor='val_accuracy',\n    save_best_only=True,\n    mode='max',\n    verbose=1\n)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:10:22.936272Z","iopub.execute_input":"2025-07-22T16:10:22.936543Z","iopub.status.idle":"2025-07-22T16:10:22.940737Z","shell.execute_reply.started":"2025-07-22T16:10:22.936524Z","shell.execute_reply":"2025-07-22T16:10:22.940079Z"},"id":"UXQOx34l7eLT"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"history_v2 = model.fit(\n    train_generator,\n    validation_data=val_generator,\n    epochs=15,\n    callbacks=[checkpoint_cb],\n    class_weight=class_weight_dict\n)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:10:22.941629Z","iopub.execute_input":"2025-07-22T16:10:22.941867Z","iopub.status.idle":"2025-07-22T16:13:52.966868Z","shell.execute_reply.started":"2025-07-22T16:10:22.941847Z","shell.execute_reply":"2025-07-22T16:13:52.966077Z"},"id":"fYgcHKFT7eLT","outputId":"867bb8f0-e780-4bb6-fe4c-eac486495a22"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"best_model = load_model('best_model.h5')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:13:52.968088Z","iopub.execute_input":"2025-07-22T16:13:52.968411Z","iopub.status.idle":"2025-07-22T16:13:53.731568Z","shell.execute_reply.started":"2025-07-22T16:13:52.968381Z","shell.execute_reply":"2025-07-22T16:13:53.730815Z"},"id":"f8s217F27eLT","outputId":"f3f05501-13f8-4813-adde-e86cf907917f"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"loss, accuracy = best_model.evaluate(val_generator)\nprint(f\"Validation Accuracy: {accuracy:.4f}, Loss: {loss:.4f}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:13:53.732496Z","iopub.execute_input":"2025-07-22T16:13:53.732747Z","iopub.status.idle":"2025-07-22T16:14:01.994004Z","shell.execute_reply.started":"2025-07-22T16:13:53.732729Z","shell.execute_reply":"2025-07-22T16:14:01.99338Z"},"id":"43p3cq_t7eLT","outputId":"b7c124f3-05c8-45a3-d57e-b7f692dcbe74"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"preds = best_model.predict(X_test)\npredicted_labels = (preds > 0.5).astype(int).flatten()\n\nsubmission_df = pd.DataFrame({\n    'image': image_names,\n    'label': predicted_labels\n})\nsubmission_df.to_csv('submission_mobile.csv', index=False)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:14:01.994773Z","iopub.execute_input":"2025-07-22T16:14:01.995014Z","iopub.status.idle":"2025-07-22T16:14:10.246549Z","shell.execute_reply.started":"2025-07-22T16:14:01.994996Z","shell.execute_reply":"2025-07-22T16:14:10.245974Z"},"id":"qqb0vOKJ7eLT","outputId":"b8d886e3-1848-4630-ef32-986632bf32f3"},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## mobilevnet3small\n","metadata":{"id":"Cjdc0GcZ7eLT"}},{"cell_type":"code","source":"base_model = MobileNetV3Small(weights='imagenet', include_top=False, input_shape=(224, 224, 3))\nbase_model.trainable = False\n\nx = base_model.output\nx = GlobalAveragePooling2D()(x)\nx = Dropout(0.3)(x)\noutput = Dense(1, activation='sigmoid')(x)\n\nmodel = Model(inputs=base_model.input, outputs=output)\n\nmodel.compile(optimizer=Adam(learning_rate=1e-4), loss='binary_crossentropy', metrics=['accuracy'])\n\nclass_weights = compute_class_weight(\n    class_weight='balanced',\n    classes=np.unique(train_generator.classes),\n    y=train_generator.classes\n)\nclass_weight_dict = dict(enumerate(class_weights))\n\ncheckpoint_cb = ModelCheckpoint(\n    'best_mobilenetv3_model.h5',\n    monitor='val_accuracy',\n    save_best_only=True,\n    mode='max',\n    verbose=1\n)\n\nhistory_v3small = model.fit(\n    train_generator,\n    validation_data=val_generator,\n    epochs=15,\n    callbacks=[checkpoint_cb],\n    class_weight=class_weight_dict\n)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:14:10.24722Z","iopub.execute_input":"2025-07-22T16:14:10.247436Z","iopub.status.idle":"2025-07-22T16:17:56.836831Z","shell.execute_reply.started":"2025-07-22T16:14:10.247414Z","shell.execute_reply":"2025-07-22T16:17:56.836287Z"},"id":"GB9AKQ_w7eLT","outputId":"428b71de-1827-4536-a6b5-48155dc80536"},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## effiecntnetb0","metadata":{"id":"7qGFRx4l7eLT"}},{"cell_type":"code","source":"base_model = EfficientNetB0(weights='imagenet', include_top=False, input_shape=(224, 224, 3))\nbase_model.trainable = False\n\n\nx = base_model.output\nx = layers.GlobalAveragePooling2D()(x)\nx= layers.Dropout(0.5)(x)\nx = layers.Dense(128, activation='relu', kernel_regularizer=keras.regularizers.l2(0.01))(x)\nx= layers.Dropout(0.3)(x)\noutputs = layers.Dense(1, activation='sigmoid')(x)\n\nmodel = Model(inputs=base_model.input, outputs=outputs)\n\nmodel.compile(optimizer=Adam(learning_rate=1e-3), loss='binary_crossentropy', metrics=['accuracy'])\n\nclass_weights = compute_class_weight(\n    class_weight='balanced',\n    classes=np.unique(train_generator.classes),\n    y=train_generator.classes\n)\nclass_weight_dict = dict(enumerate(class_weights))\n\ncheckpoint_cb = ModelCheckpoint(\n    'effcientb0_model.h5',\n    monitor='val_accuracy',\n    save_best_only=True,\n    mode='max',\n    verbose=1\n)\ndef scheduler(epoch, lr):\n  if epoch < 5:\n    return lr\n  else:\n    return (lr * tf.math.exp(-0.1)).numpy()\n\nhistory_efficent = model.fit(\n    train_generator,\n    validation_data=val_generator,\n    epochs=15,\n    callbacks=[checkpoint_cb, tf.keras.callbacks.LearningRateScheduler(scheduler)],\n    class_weight=class_weight_dict\n)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:17:57.294188Z","iopub.status.idle":"2025-07-22T16:17:57.294383Z","shell.execute_reply.started":"2025-07-22T16:17:57.294287Z","shell.execute_reply":"2025-07-22T16:17:57.294296Z"},"id":"7CD8cx317eLT","outputId":"3df80389-26dd-4e59-ac3e-976c9ef4a96f"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"effcientb0_model = load_model('effcientb0_model.h5')\nloss, accuracy = effcientb0_model.evaluate(val_generator)\nprint(f\"Validation Accuracy: {accuracy:.4f}, Loss: {loss:.4f}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:17:57.295088Z","iopub.status.idle":"2025-07-22T16:17:57.295323Z","shell.execute_reply.started":"2025-07-22T16:17:57.295216Z","shell.execute_reply":"2025-07-22T16:17:57.295226Z"},"id":"kPYdiec-7eLU","outputId":"ffc1f344-20a9-4772-fd3c-4c6817625bff"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"preds = effcientb0_model.predict(X_test)\npredicted_labels = (preds > 0.5).astype(int).flatten()\n\nsubmission_df = pd.DataFrame({\n    'image': image_names,\n    'label': predicted_labels\n})\nsubmission_df.to_csv('submission_effic.csv', index=False)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:17:57.296183Z","iopub.status.idle":"2025-07-22T16:17:57.296461Z","shell.execute_reply.started":"2025-07-22T16:17:57.2963Z","shell.execute_reply":"2025-07-22T16:17:57.296312Z"},"id":"UQtX9L_A7eLU","outputId":"7cef5938-e62b-45fc-8180-dfd4c6374f64"},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## efficentv2","metadata":{"id":"OlkN53Zv7eLU"}},{"cell_type":"code","source":"base_model = EfficientNetV2B0(weights='imagenet', include_top=False, input_shape=(224, 224, 3))\nbase_model.trainable = False\n\n\nx = base_model.output\nx = layers.GlobalAveragePooling2D()(x)\nx= layers.Dropout(0.5)(x)\noutputs = layers.Dense(1, activation='sigmoid')(x)\n\nmodel = Model(inputs=base_model.input, outputs=outputs)\n\nmodel.compile(optimizer=Adam(learning_rate=1e-3), loss='binary_crossentropy', metrics=['accuracy'])\n\nclass_weights = compute_class_weight(\n    class_weight='balanced',\n    classes=np.unique(train_generator.classes),\n    y=train_generator.classes\n)\nclass_weight_dict = dict(enumerate(class_weights))\n\ncheckpoint_cb = ModelCheckpoint(\n    'effcientv2b0_model.h5',\n    monitor='val_accuracy',\n    save_best_only=True,\n    mode='min',\n    verbose=1\n)\ndef scheduler(epoch, lr):\n  if epoch < 5:\n    return lr\n  else:\n    return (lr * tf.math.exp(-0.1)).numpy()\n\nhistory_efficentv2b0 = model.fit(\n    train_generator,\n    validation_data=val_generator,\n    epochs=15,\n    callbacks=[checkpoint_cb, tf.keras.callbacks.LearningRateScheduler(scheduler)],\n    class_weight=class_weight_dict\n)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:17:57.297328Z","iopub.status.idle":"2025-07-22T16:17:57.297619Z","shell.execute_reply.started":"2025-07-22T16:17:57.297456Z","shell.execute_reply":"2025-07-22T16:17:57.297471Z"},"id":"vThnKXeJ7eLU","outputId":"4c1ed5d9-f276-4a7a-cc30-e30b152b1e78"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"effcientv2b0_model = load_model('effcientv2b0_model.h5')\nloss, accuracy = effcientv2b0_model.evaluate(val_generator)\nprint(f\"Validation Accuracy: {accuracy:.4f}, Loss: {loss:.4f}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:17:57.298695Z","iopub.status.idle":"2025-07-22T16:17:57.299044Z","shell.execute_reply.started":"2025-07-22T16:17:57.298842Z","shell.execute_reply":"2025-07-22T16:17:57.298857Z"},"id":"2u0VNN9F7eLU","outputId":"77fb8253-0e94-4ccc-90eb-a4535d3c8ef7"},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## xception\n","metadata":{"id":"vWeuJUPq7eLY"}},{"cell_type":"code","source":"base_model = Xception(weights='imagenet', include_top=False, input_shape=(224, 224, 3))\nx = base_model.output\nx = GlobalAveragePooling2D()(x)\nx = Dense(1024, activation='relu',kernel_regularizer=keras.regularizers.l2(0.01))(x)\nx = Dropout(0.2)(x)\noutputs = Dense(1, activation='sigmoid')(x)\n\nmodel = Model(inputs=base_model.input, outputs=outputs)\n\nmodel.compile(optimizer=Adam(learning_rate=1e-3), loss='binary_crossentropy', metrics=['accuracy'])\n\nclass_weights = compute_class_weight(\n    class_weight='balanced',\n    classes=np.unique(train_generator.classes),\n    y=train_generator.classes\n)\nclass_weight_dict = dict(enumerate(class_weights))\n\ncheckpoint_cb = ModelCheckpoint(\n    'xceptionl.h5',\n    monitor='val_loss',\n    save_best_only=True,\n    mode='min',\n    verbose=1\n)\nhistory_xception = model.fit(\n    train_generator,\n    validation_data=val_generator,\n    epochs=15,\n    callbacks=[checkpoint_cb],\n    class_weight=class_weight_dict\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:17:57.300536Z","iopub.status.idle":"2025-07-22T16:17:57.300804Z","shell.execute_reply.started":"2025-07-22T16:17:57.300688Z","shell.execute_reply":"2025-07-22T16:17:57.300704Z"},"id":"6ivii_cn7eLY","outputId":"f5b20349-6007-4126-f3c7-d906e997458a"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"xceptionl = load_model('xceptionl.h5')\nloss, accuracy = xceptionl.evaluate(val_generator)\nprint(f\"Validation Accuracy: {accuracy:.4f}, Loss: {loss:.4f}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-22T16:17:57.301934Z","iopub.status.idle":"2025-07-22T16:17:57.302179Z","shell.execute_reply.started":"2025-07-22T16:17:57.302069Z","shell.execute_reply":"2025-07-22T16:17:57.302079Z"},"id":"OUPvWFc87eLY","outputId":"102eea1c-d355-4fbd-b9fc-d61772a936fd"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"preds = model.predict(X_test)\npredicted_labels = (preds > 0.5).astype(int).flatten()\n\nsubmission_df = pd.DataFrame({\n    'image': image_names,\n    'label': predicted_labels\n})\nsubmission_df.to_csv('submission_xc.csv', index=False)\n","metadata":{"id":"qsBJzjjB-v6z","outputId":"42bfcab8-267f-48f1-d3c8-d8c74844915e"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"base_model = Xception(weights='imagenet', include_top=False, input_shape=(224, 224, 3))\nx = base_model.output\nx = layers.Flatten()(x)\nx = Dense(1024, activation='relu')(x)\nx = Dropout(0.5)(x)\noutputs = Dense(1, activation='sigmoid')(x)\n\nmodel = Model(inputs=base_model.input, outputs=outputs)\n\nmodel.compile(optimizer=Adam(learning_rate=1e-3), loss='binary_crossentropy', metrics=['accuracy'])\n\nclass_weights = compute_class_weight(\n    class_weight='balanced',\n    classes=np.unique(train_generator.classes),\n    y=train_generator.classes\n)\nclass_weight_dict = dict(enumerate(class_weights))\n\ncheckpoint_cb = ModelCheckpoint(\n    'xceptionl2.h5',\n    monitor='val_loss',\n    save_best_only=True,\n    mode='min',\n    verbose=1\n)\nhistory_xception2 = model.fit(\n    train_generator,\n    validation_data=val_generator,\n    epochs=15,\n    callbacks=[checkpoint_cb],\n    class_weight=class_weight_dict\n)","metadata":{"id":"Ue6dXhg7GRrJ","outputId":"e0502481-c121-4bd4-ad49-012a81ab8b34"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"xceptionl2 = load_model('xceptionl2.h5')\nloss, accuracy = xceptionl2.evaluate(val_generator)\nprint(f\"Validation Accuracy: {accuracy:.4f}, Loss: {loss:.4f}\")","metadata":{"id":"lvE35G-JHGaM","outputId":"d4790b23-4aac-4a82-f46d-d4a9a69b2891"},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Results","metadata":{"id":"U3kPx2Dvxg8m"}},{"cell_type":"code","source":"def plot_model_histories(histories, model_names):\n    plt.figure(figsize=(16, 6))\n\n    # Accuracy plot\n    plt.subplot(1, 2, 1)\n    for history, name in zip(histories, model_names):\n        plt.plot(history.history['accuracy'], label=f'{name} - Train')\n        plt.plot(history.history['val_accuracy'], label=f'{name} - Val')\n    plt.title('Model Accuracy')\n    plt.xlabel('Epoch')\n    plt.ylabel('Accuracy')\n    plt.legend()\n    plt.grid(True)\n\n    # Loss plot\n    plt.subplot(1, 2, 2)\n    for history, name in zip(histories, model_names):\n        plt.plot(history.history['loss'], label=f'{name} - Train')\n        plt.plot(history.history['val_loss'], label=f'{name} - Val')\n    plt.title('Model Loss')\n    plt.xlabel('Epoch')\n    plt.ylabel('Loss')\n    plt.legend()\n    plt.grid(True)\n\n    plt.tight_layout()\n    plt.show()\n","metadata":{"id":"NxUEHQQzIeOa"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plot_model_histories(\n    histories=[history_xception, history_xception2,history_efficentv2b0,history_efficent,history_v3small,history_v2],\n    model_names=['xception', 'xception2','EfficientNetV2B0','EfficientNetB0','MobileNetV3Small','MobileNetV2']\n)\n","metadata":{"id":"3lSNPYE_xobo","outputId":"4673c1f9-b046-4cc7-93a3-4af277f63f18"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"preds = xceptionl.predict(X_test)\npredicted_labels = (preds > 0.5).astype(int).flatten()\n\nsubmission_df = pd.DataFrame({\n    'image': image_names,\n    'label': predicted_labels\n})","metadata":{"id":"WiOEA2JTyjXp","outputId":"e0e1a4af-d14a-4a7d-f4b5-6293525e1795"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plt.figure(figsize=(12, 8))\nfor i in range(6):\n    plt.subplot(2, 3, i + 1)\n    plt.imshow(X_test[i])\n    plt.title(f\"Predicted: {'Real' if predicted_labels[i] == 1 else 'Fake'}\")\n    plt.axis('off')\nplt.tight_layout()\nplt.show()","metadata":{"id":"K-zfzIywzAME","outputId":"fe6e03de-dde2-4b2b-8241-8ea109bf26de"},"outputs":[],"execution_count":null}]}