{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":16880,"databundleVersionId":858837,"sourceType":"competition"},{"sourceId":924245,"sourceType":"datasetVersion","datasetId":464091}],"dockerImageVersionId":29844,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"Part 1: Dataset Overview and Initial Processing","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport warnings\nwarnings.filterwarnings('ignore')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:27.883302Z","iopub.execute_input":"2025-04-30T02:34:27.883539Z","iopub.status.idle":"2025-04-30T02:34:30.141370Z","shell.execute_reply.started":"2025-04-30T02:34:27.883484Z","shell.execute_reply":"2025-04-30T02:34:30.140471Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"dataset_path = '/kaggle/input/deepfake-faces/metadata.csv'\ndf = pd.read_csv(dataset_path)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:30.143323Z","iopub.execute_input":"2025-04-30T02:34:30.143529Z","iopub.status.idle":"2025-04-30T02:34:30.284326Z","shell.execute_reply.started":"2025-04-30T02:34:30.143493Z","shell.execute_reply":"2025-04-30T02:34:30.283764Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Display basic dataset details\ndisplay(df.head())\ndisplay(df.tail())\nprint(\"Dataset Shape:\", df.shape)\nprint(\"Columns:\", df.columns)\nprint(\"Duplicated Rows:\", df.duplicated().sum())\nprint(\"Missing Values:\")\nprint(df.isnull().sum())\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:30.286149Z","iopub.execute_input":"2025-04-30T02:34:30.286348Z","iopub.status.idle":"2025-04-30T02:34:30.359490Z","shell.execute_reply.started":"2025-04-30T02:34:30.286313Z","shell.execute_reply":"2025-04-30T02:34:30.358830Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df.info()\nprint(\"Unique Values Per Column:\")\nprint(df.nunique())\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:30.360896Z","iopub.execute_input":"2025-04-30T02:34:30.361199Z","iopub.status.idle":"2025-04-30T02:34:30.427626Z","shell.execute_reply.started":"2025-04-30T02:34:30.361146Z","shell.execute_reply":"2025-04-30T02:34:30.426969Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Classifying Features\ndef classify_features(df):\n    categorical_features = []\n    non_categorical_features = []\n    discrete_features = []\n    continuous_features = []\n    \n    for column in df.columns:\n        if df[column].dtype == 'object':\n            if df[column].nunique() < 10:\n                categorical_features.append(column)\n            else:\n                non_categorical_features.append(column)\n        elif df[column].dtype in ['int64', 'float64']:\n            if df[column].nunique() < 10:\n                discrete_features.append(column)\n            else:\n                continuous_features.append(column)\n    \n    return categorical_features, non_categorical_features, discrete_features, continuous_features\n\ncategorical, non_categorical, discrete, continuous = classify_features(df)\nprint(\"Categorical Features:\", categorical)\nprint(\"Non-Categorical Features:\", non_categorical)\nprint(\"Discrete Features:\", discrete)\nprint(\"Continuous Features:\", continuous)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:30.428742Z","iopub.execute_input":"2025-04-30T02:34:30.428977Z","iopub.status.idle":"2025-04-30T02:34:30.461878Z","shell.execute_reply.started":"2025-04-30T02:34:30.428931Z","shell.execute_reply":"2025-04-30T02:34:30.461205Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df.fillna(\"Not Available\", inplace=True)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:30.463041Z","iopub.execute_input":"2025-04-30T02:34:30.463251Z","iopub.status.idle":"2025-04-30T02:34:30.482172Z","shell.execute_reply.started":"2025-04-30T02:34:30.463215Z","shell.execute_reply":"2025-04-30T02:34:30.481538Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Part 2: Exploratory Data Analysis - Categorical Features","metadata":{}},{"cell_type":"code","source":"for col in categorical:\n    print(f\"{col}: {df[col].unique()}\\n\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:30.483223Z","iopub.execute_input":"2025-04-30T02:34:30.483421Z","iopub.status.idle":"2025-04-30T02:34:30.492917Z","shell.execute_reply.started":"2025-04-30T02:34:30.483387Z","shell.execute_reply":"2025-04-30T02:34:30.492326Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for col in categorical:\n    print(df[col].value_counts())\n    print()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:30.493985Z","iopub.execute_input":"2025-04-30T02:34:30.494185Z","iopub.status.idle":"2025-04-30T02:34:30.509579Z","shell.execute_reply.started":"2025-04-30T02:34:30.494151Z","shell.execute_reply":"2025-04-30T02:34:30.508893Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Countplots for categorical features\nfor col in categorical:\n    plt.figure(figsize=(15,6))\n    sns.countplot(x=df[col], palette='hls')\n    plt.title(f\"Distribution of {col}\")\n    plt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:30.510535Z","iopub.execute_input":"2025-04-30T02:34:30.510763Z","iopub.status.idle":"2025-04-30T02:34:30.674820Z","shell.execute_reply.started":"2025-04-30T02:34:30.510717Z","shell.execute_reply":"2025-04-30T02:34:30.674136Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Pie charts for categorical features\nfor col in categorical:\n    plt.figure(figsize=(10,7))\n    plt.pie(df[col].value_counts(), labels=df[col].value_counts().index, autopct='%1.1f%%', textprops={'fontsize': 12})\n    plt.title(f\"Proportion of {col}\")\n    plt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:30.676192Z","iopub.execute_input":"2025-04-30T02:34:30.676491Z","iopub.status.idle":"2025-04-30T02:34:30.766490Z","shell.execute_reply.started":"2025-04-30T02:34:30.676446Z","shell.execute_reply":"2025-04-30T02:34:30.765822Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Part 3: Exploratory Data Analysis - Numerical Features\n","metadata":{}},{"cell_type":"code","source":"import seaborn as sns\nimport matplotlib.pyplot as plt\n\nfor col in discrete + continuous:\n    plt.figure(figsize=(12,5))\n    sns.distplot(df[col], hist=True, kde=True, bins=20)\n    plt.title(f\"Distribution of {col}\")\n    plt.xticks(rotation=90)\n    plt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:30.767975Z","iopub.execute_input":"2025-04-30T02:34:30.768266Z","iopub.status.idle":"2025-04-30T02:34:31.146405Z","shell.execute_reply.started":"2025-04-30T02:34:30.768220Z","shell.execute_reply":"2025-04-30T02:34:31.145559Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Boxplots for numerical features\nfor col in discrete + continuous:\n    plt.figure(figsize=(12,5))\n    sns.boxplot(x=df[col], palette='hls')\n    plt.title(f\"Boxplot of {col}\")\n    plt.xticks(rotation=90)\n    plt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:31.147743Z","iopub.execute_input":"2025-04-30T02:34:31.148067Z","iopub.status.idle":"2025-04-30T02:34:31.428942Z","shell.execute_reply.started":"2025-04-30T02:34:31.147993Z","shell.execute_reply":"2025-04-30T02:34:31.427998Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Violin plots for numerical features\nfor col in discrete + continuous:\n    plt.figure(figsize=(12,5))\n    sns.violinplot(x=df[col], palette='hls')\n    plt.title(f\"Violin Plot of {col}\")\n    plt.xticks(rotation=90)\n    plt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:31.430214Z","iopub.execute_input":"2025-04-30T02:34:31.430527Z","iopub.status.idle":"2025-04-30T02:34:32.265168Z","shell.execute_reply.started":"2025-04-30T02:34:31.430451Z","shell.execute_reply":"2025-04-30T02:34:32.264198Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Part 4: Data Splitting and Image Analysis","metadata":{}},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\n\nreal_df = df[df[\"label\"] == \"REAL\"]\nfake_df = df[df[\"label\"] == \"FAKE\"]\n\nsample_size = min(len(real_df), len(fake_df))\nreal_df = real_df.sample(sample_size, random_state=42)\nfake_df = fake_df.sample(sample_size, random_state=42)\n\nsample_meta = pd.concat([real_df, fake_df])\n\nTrain_set, Test_set = train_test_split(sample_meta, test_size=0.2, random_state=42, stratify=sample_meta['label'])\nTrain_set, Val_set  = train_test_split(Train_set, test_size=0.3, random_state=42, stratify=Train_set['label'])\nprint(\"Train, Validation, and Test Set Sizes:\", Train_set.shape, Val_set.shape, Test_set.shape)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:32.266988Z","iopub.execute_input":"2025-04-30T02:34:32.267683Z","iopub.status.idle":"2025-04-30T02:34:32.615409Z","shell.execute_reply.started":"2025-04-30T02:34:32.267616Z","shell.execute_reply":"2025-04-30T02:34:32.614626Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import cv2\nimport os\nimage_path = '/kaggle/input/deepfake-faces/faces_224/'\nimage_files = sorted(os.listdir(image_path))\nselected_images = image_files[:9]\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:32.616413Z","iopub.execute_input":"2025-04-30T02:34:32.616625Z","iopub.status.idle":"2025-04-30T02:34:33.936261Z","shell.execute_reply.started":"2025-04-30T02:34:32.616588Z","shell.execute_reply":"2025-04-30T02:34:33.935679Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plt.figure(figsize=(10, 10))\nfor index, image_file in enumerate(selected_images):\n    image = cv2.imread(os.path.join(image_path, image_file))\n    plt.subplot(3, 3, index + 1)\n    plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))\n    plt.title(f'Image {index + 1}')\n    plt.axis('off')\nplt.show()\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:33.937283Z","iopub.execute_input":"2025-04-30T02:34:33.937475Z","iopub.status.idle":"2025-04-30T02:34:34.821903Z","shell.execute_reply.started":"2025-04-30T02:34:33.937441Z","shell.execute_reply":"2025-04-30T02:34:34.821055Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Display image resolutions\nfor i, image_file in enumerate(image_files[:10]):\n    image = cv2.imread(os.path.join(image_path, image_file))\n    if image is not None:\n        height, width, _ = image.shape\n        print(f\"Resolution of image {i+1}: {width} x {height}\")\n    else:\n        print(f\"Error reading image {i+1}\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:34.825343Z","iopub.execute_input":"2025-04-30T02:34:34.825549Z","iopub.status.idle":"2025-04-30T02:34:34.863860Z","shell.execute_reply.started":"2025-04-30T02:34:34.825511Z","shell.execute_reply":"2025-04-30T02:34:34.863163Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Visualizing a batch of real vs fake images\nplt.figure(figsize=(15,15))\nfor cur, i in enumerate(Train_set.index[25:50]):\n    plt.subplot(5, 5, cur+1)\n    plt.xticks([])\n    plt.yticks([])\n    plt.grid(False)\n    plt.imshow(cv2.imread(image_path + Train_set.loc[i,'videoname'][:-4] + '.jpg'))\n    plt.xlabel('FAKE Image' if Train_set.loc[i,'label']=='FAKE' else 'REAL Image')\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:34.865319Z","iopub.execute_input":"2025-04-30T02:34:34.865597Z","iopub.status.idle":"2025-04-30T02:34:36.534672Z","shell.execute_reply.started":"2025-04-30T02:34:34.865544Z","shell.execute_reply":"2025-04-30T02:34:36.533955Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def retreive_dataset(set_name):\n    images,labels=[],[]\n    for (img, imclass) in zip(set_name['videoname'], set_name['label']):\n        images.append(cv2.imread('../input/deepfake-faces/faces_224/'+img[:-4]+'.jpg'))\n        if(imclass=='FAKE'):\n            labels.append(1)\n        else:\n            labels.append(0)\n    \n    return np.array(images),np.array(labels)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:36.535918Z","iopub.execute_input":"2025-04-30T02:34:36.536198Z","iopub.status.idle":"2025-04-30T02:34:36.541254Z","shell.execute_reply.started":"2025-04-30T02:34:36.536146Z","shell.execute_reply":"2025-04-30T02:34:36.540597Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X_train,y_train=retreive_dataset(Train_set)\nX_val,y_val=retreive_dataset(Val_set)\nX_test,y_test=retreive_dataset(Test_set)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:34:36.542322Z","iopub.execute_input":"2025-04-30T02:34:36.542623Z","iopub.status.idle":"2025-04-30T02:39:09.128269Z","shell.execute_reply.started":"2025-04-30T02:34:36.542561Z","shell.execute_reply":"2025-04-30T02:39:09.127518Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow.keras import layers, models\nfrom functools import partial","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:39:09.129780Z","iopub.execute_input":"2025-04-30T02:39:09.130111Z","iopub.status.idle":"2025-04-30T02:39:13.781553Z","shell.execute_reply.started":"2025-04-30T02:39:09.130049Z","shell.execute_reply":"2025-04-30T02:39:13.780948Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"tf.random.set_seed(42)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:39:13.782588Z","iopub.execute_input":"2025-04-30T02:39:13.782853Z","iopub.status.idle":"2025-04-30T02:39:13.786572Z","shell.execute_reply.started":"2025-04-30T02:39:13.782806Z","shell.execute_reply":"2025-04-30T02:39:13.785892Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"DefaultConv2D = partial(layers.Conv2D, kernel_size=3, padding=\"same\",\n                        activation=\"relu\", kernel_initializer=\"he_normal\")\n\n# Model Definition\nmodel = models.Sequential([\n    DefaultConv2D(filters=64, kernel_size=7, input_shape=[224, 224, 3]),\n    layers.MaxPooling2D(),\n    layers.BatchNormalization(),\n    DefaultConv2D(filters=128),\n    DefaultConv2D(filters=128),\n    layers.MaxPooling2D(),\n    layers.BatchNormalization(),\n    layers.Flatten(),\n    layers.Dense(units=128, activation=\"relu\",\n                 kernel_initializer=\"he_normal\"),\n    layers.BatchNormalization(),\n    layers.Dropout(0.5),\n    layers.Dense(units=64, activation=\"relu\",\n                 kernel_initializer=\"he_normal\"),\n    layers.BatchNormalization(),\n    layers.Dropout(0.5),\n    layers.Dense(units=1, activation=\"sigmoid\")\n])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:39:13.787872Z","iopub.execute_input":"2025-04-30T02:39:13.788128Z","iopub.status.idle":"2025-04-30T02:39:18.046604Z","shell.execute_reply.started":"2025-04-30T02:39:13.788078Z","shell.execute_reply":"2025-04-30T02:39:18.046062Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"initial_learning_rate = 0.001\nlr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(\n    initial_learning_rate, decay_steps=100000, decay_rate=0.96, staircase=True\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:39:18.047742Z","iopub.execute_input":"2025-04-30T02:39:18.048046Z","iopub.status.idle":"2025-04-30T02:39:18.052060Z","shell.execute_reply.started":"2025-04-30T02:39:18.047976Z","shell.execute_reply":"2025-04-30T02:39:18.051404Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=lr_schedule),\n              loss=\"binary_crossentropy\", metrics=[\"accuracy\"])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:39:18.052942Z","iopub.execute_input":"2025-04-30T02:39:18.053232Z","iopub.status.idle":"2025-04-30T02:39:18.098945Z","shell.execute_reply.started":"2025-04-30T02:39:18.053171Z","shell.execute_reply":"2025-04-30T02:39:18.098474Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model.summary()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:39:18.099819Z","iopub.execute_input":"2025-04-30T02:39:18.100057Z","iopub.status.idle":"2025-04-30T02:39:18.107936Z","shell.execute_reply.started":"2025-04-30T02:39:18.099997Z","shell.execute_reply":"2025-04-30T02:39:18.107381Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"history = model.fit(\n    X_train, y_train,\n    epochs=10,  # Adjust as needed\n    batch_size=32,  # Adjust as needed\n    validation_data=(X_val, y_val),\n    verbose=1\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:39:18.109000Z","iopub.execute_input":"2025-04-30T02:39:18.109305Z","iopub.status.idle":"2025-04-30T02:58:42.136139Z","shell.execute_reply.started":"2025-04-30T02:39:18.109242Z","shell.execute_reply":"2025-04-30T02:58:42.135460Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y_pred = model.predict(X_test)\nfrom sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score, confusion_matrix, classification_report\ny_test_pred_binary = (y_pred > 0.5).astype(int)\ny_train_pred = model.predict(X_train)\ny_train_pred_binary = (y_train_pred > 0.5).astype(int)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:58:42.137911Z","iopub.execute_input":"2025-04-30T02:58:42.138252Z","iopub.status.idle":"2025-04-30T02:59:28.486649Z","shell.execute_reply.started":"2025-04-30T02:58:42.138186Z","shell.execute_reply":"2025-04-30T02:59:28.485921Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_accuracy = accuracy_score(y_train, y_train_pred_binary)\nprint(f\"Training Accuracy: {train_accuracy * 100:.2f}%\")\ntest_accuracy = accuracy_score(y_test, y_test_pred_binary)\nprint(f\"Test Accuracy: {test_accuracy * 100:.2f}%\")\nf1 = f1_score(y_test, y_test_pred_binary)\nprint(f\"F1 Score: {f1:.4f}\")\n\nprecision = precision_score(y_test, y_test_pred_binary)\nprint(f\"Precison: {precision:.4f}\")\n\nrecall = recall_score(y_test, y_test_pred_binary)\nprint(f\"Recall: {recall:.4f}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:59:28.487721Z","iopub.execute_input":"2025-04-30T02:59:28.487969Z","iopub.status.idle":"2025-04-30T02:59:28.505724Z","shell.execute_reply.started":"2025-04-30T02:59:28.487918Z","shell.execute_reply":"2025-04-30T02:59:28.505142Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"conf_matrix = confusion_matrix(y_test, y_test_pred_binary)\nprint(\"Confusion Matrix:\")\nprint(conf_matrix)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:59:28.506717Z","iopub.execute_input":"2025-04-30T02:59:28.506938Z","iopub.status.idle":"2025-04-30T02:59:28.517507Z","shell.execute_reply.started":"2025-04-30T02:59:28.506894Z","shell.execute_reply":"2025-04-30T02:59:28.516703Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import scikitplot as skplt","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:59:28.518666Z","iopub.execute_input":"2025-04-30T02:59:28.518964Z","iopub.status.idle":"2025-04-30T02:59:28.630447Z","shell.execute_reply.started":"2025-04-30T02:59:28.518912Z","shell.execute_reply":"2025-04-30T02:59:28.629967Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"skplt.metrics.plot_confusion_matrix(y_test, y_test_pred_binary, normalize=True)\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:59:28.631322Z","iopub.execute_input":"2025-04-30T02:59:28.631501Z","iopub.status.idle":"2025-04-30T02:59:29.112868Z","shell.execute_reply.started":"2025-04-30T02:59:28.631469Z","shell.execute_reply":"2025-04-30T02:59:29.111818Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"class_report = classification_report(y_test, y_test_pred_binary)\nprint(\"Classification Report:\")\nprint(class_report)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:59:29.114314Z","iopub.execute_input":"2025-04-30T02:59:29.114677Z","iopub.status.idle":"2025-04-30T02:59:29.145738Z","shell.execute_reply.started":"2025-04-30T02:59:29.114620Z","shell.execute_reply":"2025-04-30T02:59:29.144699Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plt.figure(figsize=(12, 4))\nplt.subplot(1, 2, 1)\nplt.plot(history.history['accuracy'], label='Training Accuracy')\nplt.plot(history.history['val_accuracy'], label='Validation Accuracy')\nplt.title('Training and Validation Accuracy')\nplt.xlabel('Epoch')\nplt.ylabel('Accuracy')\nplt.legend()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:59:29.147618Z","iopub.execute_input":"2025-04-30T02:59:29.148153Z","iopub.status.idle":"2025-04-30T02:59:29.435587Z","shell.execute_reply.started":"2025-04-30T02:59:29.147931Z","shell.execute_reply":"2025-04-30T02:59:29.434448Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plt.plot(history.history['loss'], label='Training Loss')\nplt.plot(history.history['val_loss'], label='Validation Loss')\nplt.title('Training and Validation Loss')\nplt.xlabel('Epoch')\nplt.ylabel('Loss')\nplt.legend()\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:59:29.437077Z","iopub.execute_input":"2025-04-30T02:59:29.437447Z","iopub.status.idle":"2025-04-30T02:59:29.750607Z","shell.execute_reply.started":"2025-04-30T02:59:29.437387Z","shell.execute_reply":"2025-04-30T02:59:29.749643Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from tensorflow.keras.applications import ResNet50\ninput_shape = (224, 224, 3)\nbase_model = ResNet50(weights='imagenet', include_top=False, input_shape=input_shape)\nfor layer in base_model.layers:\n    layer.trainable = False\nmodel_resnet50 = models.Sequential()\nmodel_resnet50.add(base_model)\nmodel_resnet50.add(layers.GlobalAveragePooling2D())\nmodel_resnet50.add(layers.Dense(1, activation='sigmoid'))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:59:29.752533Z","iopub.execute_input":"2025-04-30T02:59:29.752905Z","iopub.status.idle":"2025-04-30T02:59:35.421416Z","shell.execute_reply.started":"2025-04-30T02:59:29.752845Z","shell.execute_reply":"2025-04-30T02:59:35.420635Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model_resnet50.summary()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:59:35.422756Z","iopub.execute_input":"2025-04-30T02:59:35.423070Z","iopub.status.idle":"2025-04-30T02:59:35.444081Z","shell.execute_reply.started":"2025-04-30T02:59:35.422992Z","shell.execute_reply":"2025-04-30T02:59:35.442007Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from tensorflow.keras import optimizers","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:59:35.444965Z","iopub.execute_input":"2025-04-30T02:59:35.445225Z","iopub.status.idle":"2025-04-30T02:59:35.451899Z","shell.execute_reply.started":"2025-04-30T02:59:35.445178Z","shell.execute_reply":"2025-04-30T02:59:35.451294Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model_resnet50.compile(optimizer=optimizers.Adam(lr=0.001), loss='binary_crossentropy', metrics=['accuracy'])\nhistory = model_resnet50.fit(\n    X_train, y_train,\n    epochs=10,  \n    validation_data=(X_val, y_val),\n    verbose=1\n)\ny_pred = model_resnet50.predict(X_test)\ny_test_pred_binary = (y_pred > 0.5).astype(int)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T02:59:35.453172Z","iopub.execute_input":"2025-04-30T02:59:35.453409Z","iopub.status.idle":"2025-04-30T03:17:27.236621Z","shell.execute_reply.started":"2025-04-30T02:59:35.453360Z","shell.execute_reply":"2025-04-30T03:17:27.235588Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y_train_pred = model_resnet50.predict(X_train)\ny_train_pred_binary = (y_train_pred > 0.5).astype(int)\ntrain_accuracy = accuracy_score(y_train, y_train_pred_binary)\nprint(f\"Training Accuracy: {train_accuracy * 100:.2f}%\")\ntest_accuracy = accuracy_score(y_test, y_test_pred_binary)\nprint(f\"Test Accuracy: {test_accuracy * 100:.2f}%\")\nf1 = f1_score(y_test, y_test_pred_binary)\nprint(f\"F1 Score: {f1:.4f}\")\nprecision = precision_score(y_test, y_test_pred_binary)\nprint(f\"Precison: {precision:.4f}\")\nrecall = recall_score(y_test, y_test_pred_binary)\nprint(f\"Recall: {recall:.4f}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T03:17:27.237842Z","iopub.execute_input":"2025-04-30T03:17:27.238118Z","iopub.status.idle":"2025-04-30T03:18:36.412267Z","shell.execute_reply.started":"2025-04-30T03:17:27.238053Z","shell.execute_reply":"2025-04-30T03:18:36.411419Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"conf_matrix = confusion_matrix(y_test, y_test_pred_binary)\nprint(\"Confusion Matrix:\")\nprint(conf_matrix)\nskplt.metrics.plot_confusion_matrix(y_test, y_test_pred_binary, normalize=True)\nplt.show()\nclass_report = classification_report(y_test, y_test_pred_binary)\nprint(\"Classification Report:\")\nprint(class_report)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T03:18:36.413581Z","iopub.execute_input":"2025-04-30T03:18:36.413794Z","iopub.status.idle":"2025-04-30T03:18:36.977770Z","shell.execute_reply.started":"2025-04-30T03:18:36.413756Z","shell.execute_reply":"2025-04-30T03:18:36.976847Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plt.figure(figsize=(12, 4))\nplt.subplot(1, 2, 1)\nplt.plot(history.history['accuracy'], label='Training Accuracy')\nplt.plot(history.history['val_accuracy'], label='Validation Accuracy')\nplt.title('Training and Validation Accuracy')\nplt.xlabel('Epoch')\nplt.ylabel('Accuracy')\nplt.legend()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T03:18:36.978907Z","iopub.execute_input":"2025-04-30T03:18:36.979147Z","iopub.status.idle":"2025-04-30T03:18:37.251919Z","shell.execute_reply.started":"2025-04-30T03:18:36.979107Z","shell.execute_reply":"2025-04-30T03:18:37.248726Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plt.plot(history.history['loss'], label='Training Loss')\nplt.plot(history.history['val_loss'], label='Validation Loss')\nplt.title('Training and Validation Loss')\nplt.xlabel('Epoch')\nplt.ylabel('Loss')\nplt.legend()\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T03:18:37.253930Z","iopub.execute_input":"2025-04-30T03:18:37.254333Z","iopub.status.idle":"2025-04-30T03:18:37.608509Z","shell.execute_reply.started":"2025-04-30T03:18:37.254247Z","shell.execute_reply":"2025-04-30T03:18:37.607381Z"}},"outputs":[],"execution_count":null}]}