{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.11","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":939937,"sourceType":"datasetVersion","datasetId":501529,"isSourceIdPinned":false},{"sourceId":3134515,"sourceType":"datasetVersion","datasetId":1909705},{"sourceId":7802620,"sourceType":"datasetVersion","datasetId":4568839}],"dockerImageVersionId":31041,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import kagglehub\n\n# Download latest version\npath = kagglehub.dataset_download(\"manjilkarki/deepfake-and-real-images\")\n\nprint(\"Path to dataset files:\", path)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-10T06:13:35.581819Z","iopub.execute_input":"2025-06-10T06:13:35.582631Z","iopub.status.idle":"2025-06-10T06:13:35.966216Z","shell.execute_reply.started":"2025-06-10T06:13:35.582606Z","shell.execute_reply":"2025-06-10T06:13:35.965471Z"}},"outputs":[{"name":"stdout","text":"Path to dataset files: /kaggle/input/deepfake-and-real-images\n","output_type":"stream"}],"execution_count":2},{"cell_type":"code","source":"#importing packages\n\nimport tensorflow as tf\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import *\nfrom tensorflow.keras.utils import image_dataset_from_directory\nimport warnings\n\nwarnings.filterwarnings('ignore')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-10T06:13:35.967470Z","iopub.execute_input":"2025-06-10T06:13:35.967678Z","iopub.status.idle":"2025-06-10T06:13:35.977792Z","shell.execute_reply.started":"2025-06-10T06:13:35.967661Z","shell.execute_reply":"2025-06-10T06:13:35.977312Z"}},"outputs":[],"execution_count":3},{"cell_type":"code","source":"#checking for duplications\n\nimport os\ndef get_all_image_paths(folder_path):\n image_paths = []\n for root, dirs, files in os.walk(folder_path):\n for file in files:\n if file.lower().endswith(('.jpg')):\n image_paths.append(os.path.join(root, file))\n return set(image_paths)\n\ntrain_paths = get_all_image_paths('/kaggle/input/deepfake-and-real-images/Dataset/Train')\nval_paths = get_all_image_paths('/kaggle/input/deepfake-and-real-images/Dataset/Validation')\ntest_paths = get_all_image_paths('/kaggle/input/deepfake-and-real-images/Dataset/Test')\n\n# Intersections\nprint(\"Train ∩ Val:\", len(train_paths & val_paths))\nprint(\"Train ∩ Test:\", len(train_paths & test_paths))\nprint(\"Val ∩ Test:\", len(val_paths & test_paths))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-10T08:59:05.636516Z","iopub.execute_input":"2025-06-10T08:59:05.636741Z","iopub.status.idle":"2025-06-10T09:00:08.992905Z","shell.execute_reply.started":"2025-06-10T08:59:05.636724Z","shell.execute_reply":"2025-06-10T09:00:08.992227Z"}},"outputs":[{"name":"stdout","text":"Train ∩ Val: 0\nTrain ∩ Test: 0\nVal ∩ Test: 0\n","output_type":"stream"}],"execution_count":30},{"cell_type":"code","source":"#loading image data\ndef load_1stimage_data(path):\n img_size = (256, 256)\n batch_size = 64\n\n train_ds = tf.keras.preprocessing.image_dataset_from_directory(\n path + \"/Dataset/Train\",\n label_mode=\"binary\", \n image_size=img_size,\n batch_size=batch_size,\n shuffle=True\n )\n\n val_ds = tf.keras.preprocessing.image_dataset_from_directory(\n path + \"/Dataset/Validation\",\n label_mode=\"binary\",\n image_size=img_size,\n batch_size=batch_size,\n shuffle=True \n )\n\n test_ds = tf.keras.preprocessing.image_dataset_from_directory(\n path + \"/Dataset/Test\",\n label_mode=\"binary\",\n image_size=img_size,\n batch_size=batch_size,\n shuffle=False \n )\n\n\n return train_ds,val_ds ,test_ds\n\ntrain,val,test=load_1stimage_data('/kaggle/input/deepfake-and-real-images')\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-10T06:13:35.978415Z","iopub.execute_input":"2025-06-10T06:13:35.978660Z","iopub.status.idle":"2025-06-10T06:18:25.747888Z","shell.execute_reply.started":"2025-06-10T06:13:35.978643Z","shell.execute_reply":"2025-06-10T06:18:25.747351Z"}},"outputs":[{"name":"stdout","text":"Found 140002 files belonging to 2 classes.\nFound 39428 files belonging to 2 classes.\nFound 10905 files belonging to 2 classes.\n","output_type":"stream"}],"execution_count":4},{"cell_type":"code","source":"print(\"Class names and their labels:\", train.class_names)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import *\nfrom tensorflow.keras.optimizers import Adam\nfrom tensorflow.keras.regularizers import l2\n\nmodel = Sequential([\n Input((256, 256, 3)),\n Rescaling(1./255),\n RandomFlip(\"horizontal\"),\n RandomRotation(0.1),\n RandomZoom(0.1),\n RandomTranslation(0.1, 0.1),\n RandomContrast(0.1),\n\n Conv2D(32, (3,3), padding='same', kernel_regularizer=l2(1e-4)),\n BatchNormalization(),\n LeakyReLU(alpha=0.1),\n MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same'),\n\n Conv2D(32, (3,3), padding='same', kernel_regularizer=l2(1e-4)),\n BatchNormalization(),\n LeakyReLU(alpha=0.1),\n MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same'),\n\n Conv2D(64, (3,3), padding='same', kernel_regularizer=l2(1e-4)),\n BatchNormalization(),\n LeakyReLU(alpha=0.1),\n MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same'),\n\n Conv2D(64, (3,3), padding='same', kernel_regularizer=l2(1e-4)),\n BatchNormalization(),\n LeakyReLU(alpha=0.1),\n MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same'),\n\n Conv2D(128, (3,3), padding='same', kernel_regularizer=l2(1e-4)),\n BatchNormalization(),\n LeakyReLU(alpha=0.1),\n MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same'),\n\n Conv2D(128, (3,3), padding='same', kernel_regularizer=l2(1e-4)),\n BatchNormalization(),\n LeakyReLU(alpha=0.1),\n MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same'),\n\n Conv2D(128, (3,3), padding='same', kernel_regularizer=l2(1e-4)),\n BatchNormalization(),\n LeakyReLU(alpha=0.1),\n MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same'),\n\n Conv2D(256, (3,3), padding='same', kernel_regularizer=l2(1e-4)),\n BatchNormalization(),\n LeakyReLU(alpha=0.1),\n MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same'),\n\n Conv2D(256, (3,3), padding='same', kernel_regularizer=l2(1e-4)),\n BatchNormalization(),\n LeakyReLU(alpha=0.1),\n MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same'),\n\n Conv2D(256, (3,3), padding='same', kernel_regularizer=l2(1e-4)),\n BatchNormalization(),\n LeakyReLU(alpha=0.1),\n MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same'),\n\n Conv2D(512, (3,3), padding='same', kernel_regularizer=l2(1e-4)),\n BatchNormalization(),\n LeakyReLU(alpha=0.1),\n MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same'),\n\n Conv2D(512, (3,3), padding='same', kernel_regularizer=l2(1e-4)),\n BatchNormalization(),\n LeakyReLU(alpha=0.1),\n MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same'),\n\n Conv2D(512, (3,3), padding='same', kernel_regularizer=l2(1e-4)),\n BatchNormalization(),\n LeakyReLU(alpha=0.1),\n MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same'),\n\n Conv2D(512, (3,3), padding='same', kernel_regularizer=l2(1e-4)),\n BatchNormalization(),\n LeakyReLU(alpha=0.1),\n MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same'),\n\n GlobalAveragePooling2D(),\n\n Dense(512, kernel_regularizer=l2(1e-4)),\n BatchNormalization(),\n LeakyReLU(alpha=0.1),\n Dropout(0.2),\n\n Dense(128, kernel_regularizer=l2(1e-4)),\n BatchNormalization(),\n LeakyReLU(alpha=0.1),\n Dropout(0.2),\n\n Dense(1, activation='sigmoid')\n])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-10T06:32:55.873770Z","iopub.execute_input":"2025-06-10T06:32:55.874034Z","iopub.status.idle":"2025-06-10T06:32:56.154024Z","shell.execute_reply.started":"2025-06-10T06:32:55.874014Z","shell.execute_reply":"2025-06-10T06:32:56.153366Z"}},"outputs":[],"execution_count":10},{"cell_type":"code","source":"model.summary()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-10T06:33:00.841001Z","iopub.execute_input":"2025-06-10T06:33:00.841609Z","iopub.status.idle":"2025-06-10T06:33:00.893724Z","shell.execute_reply.started":"2025-06-10T06:33:00.841586Z","shell.execute_reply":"2025-06-10T06:33:00.892995Z"}},"outputs":[{"output_type":"display_data","data":{"text/plain":"\u001b[1mModel: \"sequential_1\"\u001b[0m\n","text/html":"
Model: \"sequential_1\"\n
\n"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓\n┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩\n│ rescaling_1 (\u001b[38;5;33mRescaling\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m, \u001b[38;5;34m256\u001b[0m, \u001b[38;5;34m3\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ random_flip_1 (\u001b[38;5;33mRandomFlip\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m, \u001b[38;5;34m256\u001b[0m, \u001b[38;5;34m3\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ random_rotation_1 (\u001b[38;5;33mRandomRotation\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m, \u001b[38;5;34m256\u001b[0m, \u001b[38;5;34m3\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ random_zoom_1 (\u001b[38;5;33mRandomZoom\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m, \u001b[38;5;34m256\u001b[0m, \u001b[38;5;34m3\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ random_translation_1 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m, \u001b[38;5;34m256\u001b[0m, \u001b[38;5;34m3\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n│ (\u001b[38;5;33mRandomTranslation\u001b[0m) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ random_contrast_1 (\u001b[38;5;33mRandomContrast\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m, \u001b[38;5;34m256\u001b[0m, \u001b[38;5;34m3\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_15 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m, \u001b[38;5;34m256\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m896\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_17 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m, \u001b[38;5;34m256\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m128\u001b[0m │\n│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_17 (\u001b[38;5;33mLeakyReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m, \u001b[38;5;34m256\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_15 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_16 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m9,248\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_18 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m128\u001b[0m │\n│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_18 (\u001b[38;5;33mLeakyReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_16 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_17 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m18,496\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_19 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m256\u001b[0m │\n│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_19 (\u001b[38;5;33mLeakyReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_17 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_18 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m36,928\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_20 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m256\u001b[0m │\n│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_20 (\u001b[38;5;33mLeakyReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_18 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_19 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m36,928\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_21 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m256\u001b[0m │\n│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_21 (\u001b[38;5;33mLeakyReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_19 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_20 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m73,856\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_22 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │\n│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_22 (\u001b[38;5;33mLeakyReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_20 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_21 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m147,584\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_23 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │\n│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_23 (\u001b[38;5;33mLeakyReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_21 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2\u001b[0m, \u001b[38;5;34m2\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_22 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2\u001b[0m, \u001b[38;5;34m2\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m147,584\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_24 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2\u001b[0m, \u001b[38;5;34m2\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │\n│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_24 (\u001b[38;5;33mLeakyReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2\u001b[0m, \u001b[38;5;34m2\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_22 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_23 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m295,168\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_25 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m1,024\u001b[0m │\n│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_25 (\u001b[38;5;33mLeakyReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_23 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_24 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m590,080\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_26 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m1,024\u001b[0m │\n│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_26 (\u001b[38;5;33mLeakyReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_24 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_25 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m590,080\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_27 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m1,024\u001b[0m │\n│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_27 (\u001b[38;5;33mLeakyReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_25 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_26 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m1,180,160\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_28 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,048\u001b[0m │\n│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_28 (\u001b[38;5;33mLeakyReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_26 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_27 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,359,808\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_29 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,048\u001b[0m │\n│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_29 (\u001b[38;5;33mLeakyReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_27 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_28 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,359,808\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_30 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,048\u001b[0m │\n│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_30 (\u001b[38;5;33mLeakyReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_28 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_29 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,359,808\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_31 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,048\u001b[0m │\n│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_31 (\u001b[38;5;33mLeakyReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_29 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ global_average_pooling2d_1 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n│ (\u001b[38;5;33mGlobalAveragePooling2D\u001b[0m) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ dense_3 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m262,656\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_32 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,048\u001b[0m │\n│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_32 (\u001b[38;5;33mLeakyReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ dropout_2 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ dense_4 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m65,664\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_33 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │\n│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_33 (\u001b[38;5;33mLeakyReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ dropout_3 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ dense_5 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m129\u001b[0m │\n└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘\n","text/html":"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓\n┃ Layer (type) ┃ Output Shape ┃ Param # ┃\n┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩\n│ rescaling_1 (Rescaling) │ (None, 256, 256, 3) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ random_flip_1 (RandomFlip) │ (None, 256, 256, 3) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ random_rotation_1 (RandomRotation) │ (None, 256, 256, 3) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ random_zoom_1 (RandomZoom) │ (None, 256, 256, 3) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ random_translation_1 │ (None, 256, 256, 3) │ 0 │\n│ (RandomTranslation) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ random_contrast_1 (RandomContrast) │ (None, 256, 256, 3) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_15 (Conv2D) │ (None, 256, 256, 32) │ 896 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_17 │ (None, 256, 256, 32) │ 128 │\n│ (BatchNormalization) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_17 (LeakyReLU) │ (None, 256, 256, 32) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_15 (MaxPooling2D) │ (None, 128, 128, 32) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_16 (Conv2D) │ (None, 128, 128, 32) │ 9,248 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_18 │ (None, 128, 128, 32) │ 128 │\n│ (BatchNormalization) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_18 (LeakyReLU) │ (None, 128, 128, 32) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_16 (MaxPooling2D) │ (None, 64, 64, 32) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_17 (Conv2D) │ (None, 64, 64, 64) │ 18,496 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_19 │ (None, 64, 64, 64) │ 256 │\n│ (BatchNormalization) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_19 (LeakyReLU) │ (None, 64, 64, 64) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_17 (MaxPooling2D) │ (None, 32, 32, 64) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_18 (Conv2D) │ (None, 32, 32, 64) │ 36,928 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_20 │ (None, 32, 32, 64) │ 256 │\n│ (BatchNormalization) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_20 (LeakyReLU) │ (None, 32, 32, 64) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_18 (MaxPooling2D) │ (None, 16, 16, 64) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_19 (Conv2D) │ (None, 16, 16, 64) │ 36,928 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_21 │ (None, 16, 16, 64) │ 256 │\n│ (BatchNormalization) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_21 (LeakyReLU) │ (None, 16, 16, 64) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_19 (MaxPooling2D) │ (None, 8, 8, 64) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_20 (Conv2D) │ (None, 8, 8, 128) │ 73,856 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_22 │ (None, 8, 8, 128) │ 512 │\n│ (BatchNormalization) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_22 (LeakyReLU) │ (None, 8, 8, 128) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_20 (MaxPooling2D) │ (None, 4, 4, 128) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_21 (Conv2D) │ (None, 4, 4, 128) │ 147,584 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_23 │ (None, 4, 4, 128) │ 512 │\n│ (BatchNormalization) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_23 (LeakyReLU) │ (None, 4, 4, 128) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_21 (MaxPooling2D) │ (None, 2, 2, 128) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_22 (Conv2D) │ (None, 2, 2, 128) │ 147,584 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_24 │ (None, 2, 2, 128) │ 512 │\n│ (BatchNormalization) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_24 (LeakyReLU) │ (None, 2, 2, 128) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_22 (MaxPooling2D) │ (None, 1, 1, 128) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_23 (Conv2D) │ (None, 1, 1, 256) │ 295,168 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_25 │ (None, 1, 1, 256) │ 1,024 │\n│ (BatchNormalization) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_25 (LeakyReLU) │ (None, 1, 1, 256) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_23 (MaxPooling2D) │ (None, 1, 1, 256) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_24 (Conv2D) │ (None, 1, 1, 256) │ 590,080 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_26 │ (None, 1, 1, 256) │ 1,024 │\n│ (BatchNormalization) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_26 (LeakyReLU) │ (None, 1, 1, 256) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_24 (MaxPooling2D) │ (None, 1, 1, 256) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_25 (Conv2D) │ (None, 1, 1, 256) │ 590,080 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_27 │ (None, 1, 1, 256) │ 1,024 │\n│ (BatchNormalization) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_27 (LeakyReLU) │ (None, 1, 1, 256) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_25 (MaxPooling2D) │ (None, 1, 1, 256) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_26 (Conv2D) │ (None, 1, 1, 512) │ 1,180,160 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_28 │ (None, 1, 1, 512) │ 2,048 │\n│ (BatchNormalization) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_28 (LeakyReLU) │ (None, 1, 1, 512) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_26 (MaxPooling2D) │ (None, 1, 1, 512) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_27 (Conv2D) │ (None, 1, 1, 512) │ 2,359,808 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_29 │ (None, 1, 1, 512) │ 2,048 │\n│ (BatchNormalization) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_29 (LeakyReLU) │ (None, 1, 1, 512) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_27 (MaxPooling2D) │ (None, 1, 1, 512) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_28 (Conv2D) │ (None, 1, 1, 512) │ 2,359,808 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_30 │ (None, 1, 1, 512) │ 2,048 │\n│ (BatchNormalization) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_30 (LeakyReLU) │ (None, 1, 1, 512) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_28 (MaxPooling2D) │ (None, 1, 1, 512) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ conv2d_29 (Conv2D) │ (None, 1, 1, 512) │ 2,359,808 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_31 │ (None, 1, 1, 512) │ 2,048 │\n│ (BatchNormalization) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_31 (LeakyReLU) │ (None, 1, 1, 512) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ max_pooling2d_29 (MaxPooling2D) │ (None, 1, 1, 512) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ global_average_pooling2d_1 │ (None, 512) │ 0 │\n│ (GlobalAveragePooling2D) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ dense_3 (Dense) │ (None, 512) │ 262,656 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_32 │ (None, 512) │ 2,048 │\n│ (BatchNormalization) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_32 (LeakyReLU) │ (None, 512) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ dropout_2 (Dropout) │ (None, 512) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ dense_4 (Dense) │ (None, 128) │ 65,664 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ batch_normalization_33 │ (None, 128) │ 512 │\n│ (BatchNormalization) │ │ │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ leaky_re_lu_33 (LeakyReLU) │ (None, 128) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ dropout_3 (Dropout) │ (None, 128) │ 0 │\n├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n│ dense_5 (Dense) │ (None, 1) │ 129 │\n└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘\n\n"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"\u001b[1m Total params: \u001b[0m\u001b[38;5;34m10,551,265\u001b[0m (40.25 MB)\n","text/html":"
Total params: 10,551,265 (40.25 MB)\n\n"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m10,543,073\u001b[0m (40.22 MB)\n","text/html":"
Trainable params: 10,543,073 (40.22 MB)\n\n"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m8,192\u001b[0m (32.00 KB)\n","text/html":"
Non-trainable params: 8,192 (32.00 KB)\n\n"},"metadata":{}}],"execution_count":11},{"cell_type":"code","source":"from tensorflow.keras.optimizers import Adam\n\ncustom_adam = Adam(learning_rate=0.0001, beta_1=0.9, beta_2=0.999)\nmodel.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-10T06:33:09.309691Z","iopub.execute_input":"2025-06-10T06:33:09.310439Z","iopub.status.idle":"2025-06-10T06:33:09.320163Z","shell.execute_reply.started":"2025-06-10T06:33:09.310414Z","shell.execute_reply":"2025-06-10T06:33:09.319567Z"}},"outputs":[],"execution_count":12},{"cell_type":"code","source":"from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping, ReduceLROnPlateau\n\ncheckpoint=ModelCheckpoint(filepath='best_model.keras',monitor='val_accuracy',verbose=1,save_best_only=True,mode='max')\n\nearlystop=EarlyStopping(monitor='val_accuracy',patience=5,verbose=1,restore_best_weights=True)\n\nlr_scheduler=ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=3)\n\n\nmodel.fit(train,epochs=20,validation_data=val,callbacks=[checkpoint, earlystop, lr_scheduler])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-10T06:33:12.195054Z","iopub.execute_input":"2025-06-10T06:33:12.195358Z","iopub.status.idle":"2025-06-10T08:45:22.426163Z","shell.execute_reply.started":"2025-06-10T06:33:12.195336Z","shell.execute_reply":"2025-06-10T08:45:22.425489Z"}},"outputs":[{"name":"stdout","text":"Epoch 1/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 169ms/step - accuracy: 0.7306 - loss: 0.6615\nEpoch 1: val_accuracy improved from -inf to 0.82188, saving model to best_model.keras\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m415s\u001b[0m 181ms/step - accuracy: 0.7306 - loss: 0.6614 - val_accuracy: 0.8219 - val_loss: 0.5350 - learning_rate: 0.0010\nEpoch 2/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 170ms/step - accuracy: 0.9237 - loss: 0.2651\nEpoch 2: val_accuracy improved from 0.82188 to 0.88021, saving model to best_model.keras\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m396s\u001b[0m 181ms/step - accuracy: 0.9237 - loss: 0.2651 - val_accuracy: 0.8802 - val_loss: 0.3719 - learning_rate: 0.0010\nEpoch 3/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 170ms/step - accuracy: 0.9398 - loss: 0.2168\nEpoch 3: val_accuracy did not improve from 0.88021\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m395s\u001b[0m 181ms/step - accuracy: 0.9398 - loss: 0.2168 - val_accuracy: 0.8396 - val_loss: 0.4283 - learning_rate: 0.0010\nEpoch 4/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 170ms/step - accuracy: 0.9453 - loss: 0.2060\nEpoch 4: val_accuracy did not improve from 0.88021\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m395s\u001b[0m 180ms/step - accuracy: 0.9453 - loss: 0.2060 - val_accuracy: 0.4982 - val_loss: 0.6115 - learning_rate: 0.0010\nEpoch 5/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 171ms/step - accuracy: 0.9497 - loss: 0.1988\nEpoch 5: val_accuracy did not improve from 0.88021\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m396s\u001b[0m 181ms/step - accuracy: 0.9497 - loss: 0.1988 - val_accuracy: 0.4981 - val_loss: 0.6951 - learning_rate: 0.0010\nEpoch 6/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 171ms/step - accuracy: 0.9618 - loss: 0.1630\nEpoch 6: val_accuracy did not improve from 0.88021\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m396s\u001b[0m 181ms/step - accuracy: 0.9618 - loss: 0.1630 - val_accuracy: 0.8415 - val_loss: 0.4978 - learning_rate: 5.0000e-04\nEpoch 7/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 171ms/step - accuracy: 0.9650 - loss: 0.1469\nEpoch 7: val_accuracy improved from 0.88021 to 0.92787, saving model to best_model.keras\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m396s\u001b[0m 181ms/step - accuracy: 0.9650 - loss: 0.1469 - val_accuracy: 0.9279 - val_loss: 0.2922 - learning_rate: 5.0000e-04\nEpoch 8/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 171ms/step - accuracy: 0.9669 - loss: 0.1400\nEpoch 8: val_accuracy did not improve from 0.92787\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m395s\u001b[0m 181ms/step - accuracy: 0.9669 - loss: 0.1400 - val_accuracy: 0.8998 - val_loss: 1.1297 - learning_rate: 5.0000e-04\nEpoch 9/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 171ms/step - accuracy: 0.9669 - loss: 0.1348\nEpoch 9: val_accuracy did not improve from 0.92787\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m396s\u001b[0m 181ms/step - accuracy: 0.9669 - loss: 0.1348 - val_accuracy: 0.6181 - val_loss: 0.5903 - learning_rate: 5.0000e-04\nEpoch 10/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 171ms/step - accuracy: 0.9697 - loss: 0.1293\nEpoch 10: val_accuracy did not improve from 0.92787\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m395s\u001b[0m 181ms/step - accuracy: 0.9697 - loss: 0.1293 - val_accuracy: 0.9098 - val_loss: 3.3274 - learning_rate: 5.0000e-04\nEpoch 11/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 170ms/step - accuracy: 0.9733 - loss: 0.1154\nEpoch 11: val_accuracy improved from 0.92787 to 0.94286, saving model to best_model.keras\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m396s\u001b[0m 181ms/step - accuracy: 0.9733 - loss: 0.1154 - val_accuracy: 0.9429 - val_loss: 0.5456 - learning_rate: 2.5000e-04\nEpoch 12/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 171ms/step - accuracy: 0.9745 - loss: 0.1080\nEpoch 12: val_accuracy improved from 0.94286 to 0.95536, saving model to best_model.keras\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m396s\u001b[0m 181ms/step - accuracy: 0.9745 - loss: 0.1080 - val_accuracy: 0.9554 - val_loss: 0.3949 - learning_rate: 2.5000e-04\nEpoch 13/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 170ms/step - accuracy: 0.9754 - loss: 0.1032\nEpoch 13: val_accuracy did not improve from 0.95536\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m395s\u001b[0m 181ms/step - accuracy: 0.9754 - loss: 0.1032 - val_accuracy: 0.8582 - val_loss: 0.4256 - learning_rate: 2.5000e-04\nEpoch 14/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 169ms/step - accuracy: 0.9774 - loss: 0.0954\nEpoch 14: val_accuracy improved from 0.95536 to 0.95706, saving model to best_model.keras\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m394s\u001b[0m 180ms/step - accuracy: 0.9774 - loss: 0.0954 - val_accuracy: 0.9571 - val_loss: 0.1861 - learning_rate: 1.2500e-04\nEpoch 15/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 170ms/step - accuracy: 0.9791 - loss: 0.0913\nEpoch 15: val_accuracy did not improve from 0.95706\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m395s\u001b[0m 180ms/step - accuracy: 0.9791 - loss: 0.0913 - val_accuracy: 0.9540 - val_loss: 0.1751 - learning_rate: 1.2500e-04\nEpoch 16/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 171ms/step - accuracy: 0.9789 - loss: 0.0884\nEpoch 16: val_accuracy did not improve from 0.95706\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m396s\u001b[0m 181ms/step - accuracy: 0.9789 - loss: 0.0884 - val_accuracy: 0.4981 - val_loss: 0.7811 - learning_rate: 1.2500e-04\nEpoch 17/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 171ms/step - accuracy: 0.9791 - loss: 0.0879\nEpoch 17: val_accuracy improved from 0.95706 to 0.95998, saving model to best_model.keras\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m397s\u001b[0m 181ms/step - accuracy: 0.9791 - loss: 0.0879 - val_accuracy: 0.9600 - val_loss: 0.1445 - learning_rate: 1.2500e-04\nEpoch 18/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 171ms/step - accuracy: 0.9793 - loss: 0.0860\nEpoch 18: val_accuracy did not improve from 0.95998\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m396s\u001b[0m 181ms/step - accuracy: 0.9793 - loss: 0.0860 - val_accuracy: 0.8186 - val_loss: 0.4408 - learning_rate: 1.2500e-04\nEpoch 19/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 170ms/step - accuracy: 0.9804 - loss: 0.0830\nEpoch 19: val_accuracy did not improve from 0.95998\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m394s\u001b[0m 180ms/step - accuracy: 0.9804 - loss: 0.0830 - val_accuracy: 0.9593 - val_loss: 0.9851 - learning_rate: 1.2500e-04\nEpoch 20/20\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 171ms/step - accuracy: 0.9796 - loss: 0.0835\nEpoch 20: val_accuracy improved from 0.95998 to 0.96398, saving model to best_model.keras\n\u001b[1m2188/2188\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m397s\u001b[0m 181ms/step - accuracy: 0.9796 - loss: 0.0835 - val_accuracy: 0.9640 - val_loss: 0.2303 - learning_rate: 1.2500e-04\nRestoring model weights from the end of the best epoch: 20.\n","output_type":"stream"},{"execution_count":13,"output_type":"execute_result","data":{"text/plain":"