{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.12.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":5441,"databundleVersionId":38425,"sourceType":"competition"}],"dockerImageVersionId":31259,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Import Packages","metadata":{}},{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:35:15.971650Z","iopub.execute_input":"2026-01-17T22:35:15.972314Z","iopub.status.idle":"2026-01-17T22:35:15.979618Z","shell.execute_reply.started":"2026-01-17T22:35:15.972280Z","shell.execute_reply":"2026-01-17T22:35:15.978777Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import os\nimport shutil\nimport random\nimport numpy as np\nimport pandas as pd\nimport matplotlib.image as mpimg\nimport matplotlib.pyplot as plt\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint\nfrom tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, BatchNormalization, Dropout\nfrom tensorflow.keras.regularizers import L2\nimport warnings\nwarnings.filterwarnings('ignore')","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:35:15.981057Z","iopub.execute_input":"2026-01-17T22:35:15.981392Z","iopub.status.idle":"2026-01-17T22:35:15.996729Z","shell.execute_reply.started":"2026-01-17T22:35:15.981364Z","shell.execute_reply":"2026-01-17T22:35:15.995978Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Unzipping Training Data","metadata":{}},{"cell_type":"code","source":"\n !unzip /kaggle/input/dogs-vs-cats-redux-kernels-edition/train.zip","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:35:15.997904Z","iopub.execute_input":"2026-01-17T22:35:15.998182Z","iopub.status.idle":"2026-01-17T22:35:16.010925Z","shell.execute_reply.started":"2026-01-17T22:35:15.998145Z","shell.execute_reply":"2026-01-17T22:35:16.010245Z"},"_kg_hide-input":false},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_path = '/kaggle/working/train'\n\nlen(os.listdir(train_path))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:35:16.012029Z","iopub.execute_input":"2026-01-17T22:35:16.012352Z","iopub.status.idle":"2026-01-17T22:35:16.038274Z","shell.execute_reply.started":"2026-01-17T22:35:16.012325Z","shell.execute_reply":"2026-01-17T22:35:16.037474Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Some Visualization","metadata":{}},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport matplotlib.image as mpimg\nimport random \n\nplt.figure(figsize=(16,16))\nimages = os.listdir(train_path)\nfor i in range( 8):\n    img = random.choice([x for x in images])\n    fig = plt.subplot(4,4,i+1)\n    fig.axis('off')\n    img =mpimg.imread(os.path.join(train_path,img))\n    fig.imshow(img)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:35:16.040021Z","iopub.execute_input":"2026-01-17T22:35:16.040568Z","iopub.status.idle":"2026-01-17T22:35:16.549073Z","shell.execute_reply.started":"2026-01-17T22:35:16.040541Z","shell.execute_reply":"2026-01-17T22:35:16.548272Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"os.listdir(train_path)[:20]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:35:16.549942Z","iopub.execute_input":"2026-01-17T22:35:16.550168Z","iopub.status.idle":"2026-01-17T22:35:16.569715Z","shell.execute_reply.started":"2026-01-17T22:35:16.550149Z","shell.execute_reply":"2026-01-17T22:35:16.569170Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Creating Directories to organize our Data","metadata":{}},{"cell_type":"code","source":"try :\n    parent_dir = '/kaggle/working/cats-vs-dogs'\n    os.mkdir(parent_dir)\n    \n    for dir in ['training','validation']:\n        path = os.path.join(parent_dir,dir)\n        os.mkdir(path)\n        for dir in ['cats','dogs']:\n            n_path = os.path.join(path,dir)\n            os.mkdir(n_path)\n\nexcept OSError:\n    print ('Existed')\n    \n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:35:16.570527Z","iopub.execute_input":"2026-01-17T22:35:16.570743Z","iopub.status.idle":"2026-01-17T22:35:16.575983Z","shell.execute_reply.started":"2026-01-17T22:35:16.570726Z","shell.execute_reply":"2026-01-17T22:35:16.575439Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"src_dir = train_path\n\ncats_train_dir = '/kaggle/working/cats-vs-dogs/training/cats'\ncats_val_dir = '/kaggle/working/cats-vs-dogs/validation/cats'\n\ndogs_train_dir = '/kaggle/working/cats-vs-dogs/training/dogs'\ndogs_val_dir ='/kaggle/working/cats-vs-dogs/validation/dogs'\n\n#list of cats names in all training images \ncats = [cat for cat in os.listdir(src_dir) if cat[:3]=='cat']\n#list of dogs names in all training images\ndogs = [dog for dog in os.listdir(src_dir) if dog[:3]=='dog']\n\n#Take 10% of training images for validation\ncats_val_sampels = random.sample(cats,int(0.1*len(cats)))\ndogs_val_sampels = random.sample(dogs ,int(0.1*len(dogs)))\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:35:16.576871Z","iopub.execute_input":"2026-01-17T22:35:16.577107Z","iopub.status.idle":"2026-01-17T22:35:16.616847Z","shell.execute_reply.started":"2026-01-17T22:35:16.577088Z","shell.execute_reply":"2026-01-17T22:35:16.616331Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from shutil import copyfile\n\nfor img in os.listdir(src_dir):\n    src_img = os.path.join(src_dir,img)\n    if img[:3] == 'cat':\n        if img in cats_val_sampels:\n            dest_img = os.path.join(cats_val_dir,img)\n        else:\n            dest_img = os.path.join(cats_train_dir,img)\n    elif img[:3] == 'dog':\n        if img in dogs_val_sampels:\n            dest_img = os.path.join(dogs_val_dir,img)\n        else:\n            dest_img = os.path.join(dogs_train_dir,img)\n    copyfile(src_img,dest_img)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:35:16.618492Z","iopub.execute_input":"2026-01-17T22:35:16.618784Z","iopub.status.idle":"2026-01-17T22:35:19.601450Z","shell.execute_reply.started":"2026-01-17T22:35:16.618766Z","shell.execute_reply":"2026-01-17T22:35:19.600857Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print ('No. of all Cats :' , len(cats) )\nprint ('No. of cats for training: ' , len(os.listdir(cats_train_dir)))\nprint ('No. of cats for validation :' , len(os.listdir(cats_val_dir)))\n\nprint ('No. of all Dogs :' , len(dogs) )\nprint ('No. of dogs for training: ' , len(os.listdir(dogs_train_dir)))\nprint ('No. of dogs for validation :' , len(os.listdir(dogs_val_dir)))\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:35:19.602299Z","iopub.execute_input":"2026-01-17T22:35:19.602585Z","iopub.status.idle":"2026-01-17T22:35:19.620834Z","shell.execute_reply.started":"2026-01-17T22:35:19.602564Z","shell.execute_reply":"2026-01-17T22:35:19.620124Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plt.figure(figsize=(16,16))\n\nimages = os.listdir(cats_train_dir)\nfor i in range(8):\n    img = random.choice([x for x in images])\n    fig = plt.subplot(4,4,i+1)\n    fig.axis('off')\n    img = mpimg.imread(os.path.join(cats_train_dir, img)) \n    fig.imshow(img) ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:35:19.621744Z","iopub.execute_input":"2026-01-17T22:35:19.621979Z","iopub.status.idle":"2026-01-17T22:35:20.096153Z","shell.execute_reply.started":"2026-01-17T22:35:19.621962Z","shell.execute_reply":"2026-01-17T22:35:20.094761Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Image Data Generator","metadata":{}},{"cell_type":"code","source":"train_datagen = ImageDataGenerator(rescale=1/255)\nvalid_datagen = ImageDataGenerator(rescale=1/255)\n\n\ntrain_dir = '/kaggle/working/cats-vs-dogs/training'\ntrain_generator = train_datagen.flow_from_directory(train_dir, target_size=(150, 150), batch_size=32, class_mode='binary')\n\nvalid_dir = '/kaggle/working/cats-vs-dogs/validation'\nvalid_generator = valid_datagen.flow_from_directory(valid_dir,target_size=(150, 150), batch_size=32,class_mode='binary')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:37:04.464102Z","iopub.execute_input":"2026-01-17T22:37:04.464696Z","iopub.status.idle":"2026-01-17T22:37:04.660877Z","shell.execute_reply.started":"2026-01-17T22:37:04.464667Z","shell.execute_reply":"2026-01-17T22:37:04.660425Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(valid_generator.class_indices)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:37:07.365857Z","iopub.execute_input":"2026-01-17T22:37:07.366463Z","iopub.status.idle":"2026-01-17T22:37:07.370298Z","shell.execute_reply.started":"2026-01-17T22:37:07.366436Z","shell.execute_reply":"2026-01-17T22:37:07.369767Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Modelling","metadata":{}},{"cell_type":"markdown","source":"## Base Model","metadata":{}},{"cell_type":"code","source":"# create model\nmodel = Sequential([    Conv2D(32, (3,3), activation='relu', input_shape=(150, 150, 3)),\n                        MaxPooling2D(2, 2),\n                        Conv2D(64, (3,3), activation='relu'),\n                        MaxPooling2D(2,2),\n                        Conv2D(128, (3,3), activation='relu'),\n                        MaxPooling2D(2,2),\n\n                        Flatten(),\n                        Dense(128, activation='relu'),\n                        Dense(1, activation='sigmoid')  ])\n\n# Compile model \nmodel.compile(optimizer='adamax', loss='binary_crossentropy', metrics=['accuracy'])\nmodel.summary()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:37:09.310790Z","iopub.execute_input":"2026-01-17T22:37:09.311459Z","iopub.status.idle":"2026-01-17T22:37:11.504577Z","shell.execute_reply.started":"2026-01-17T22:37:09.311432Z","shell.execute_reply":"2026-01-17T22:37:11.504068Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"history = model.fit(train_generator, epochs=5, verbose=1,validation_data=valid_generator)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:37:14.156006Z","iopub.execute_input":"2026-01-17T22:37:14.156645Z","iopub.status.idle":"2026-01-17T22:40:00.864686Z","shell.execute_reply.started":"2026-01-17T22:37:14.156621Z","shell.execute_reply":"2026-01-17T22:40:00.864165Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"history_df = pd.DataFrame(history.history)\nhistory_df.loc[:,['loss','val_loss']].plot()\nhistory_df.loc[:,['accuracy','val_accuracy']].plot()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:40:04.838644Z","iopub.execute_input":"2026-01-17T22:40:04.838933Z","iopub.status.idle":"2026-01-17T22:40:05.196706Z","shell.execute_reply.started":"2026-01-17T22:40:04.838910Z","shell.execute_reply":"2026-01-17T22:40:05.195970Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_acc = model.evaluate(train_generator)[1]\nvalid_acc = model.evaluate(valid_generator)[1]\nprint(\"Our Base Model Accuracy on Training Data: \", train_acc)\nprint(\"Our Base Model Accuracy on Validation Data: \", valid_acc)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:40:09.113207Z","iopub.execute_input":"2026-01-17T22:40:09.113855Z","iopub.status.idle":"2026-01-17T22:40:40.351758Z","shell.execute_reply.started":"2026-01-17T22:40:09.113826Z","shell.execute_reply":"2026-01-17T22:40:40.350992Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Data Augmentation on the fly","metadata":{}},{"cell_type":"code","source":"aug_train_datagen = ImageDataGenerator(rescale=1./255,\n                                    rotation_range=90,\n                                    width_shift_range=0.2,\n                                    height_shift_range=0.2,\n                                    shear_range=0.2,\n                                    zoom_range=0.2,\n                                    horizontal_flip=True,\n                                    fill_mode='nearest')\nvalid_datagen = ImageDataGenerator(rescale=1/255)\n\ntrain_dir = '/kaggle/working/cats-vs-dogs/training'\naug_train_generator = train_datagen.flow_from_directory(train_dir, target_size=(150, 150), batch_size=32, class_mode='binary')\n\nvalid_dir = '/kaggle/working/cats-vs-dogs/validation'\nvalid_generator = valid_datagen.flow_from_directory(valid_dir,target_size=(150, 150), batch_size=32,class_mode='binary')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:41:17.628034Z","iopub.execute_input":"2026-01-17T22:41:17.628628Z","iopub.status.idle":"2026-01-17T22:41:17.869471Z","shell.execute_reply.started":"2026-01-17T22:41:17.628599Z","shell.execute_reply":"2026-01-17T22:41:17.868905Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Augmented Model","metadata":{}},{"cell_type":"code","source":"my_callbacks = [ EarlyStopping(monitor='val_loss', patience=5, min_delta=0.001),\n                 ModelCheckpoint('/kaggle/working/weights.best.keras', monitor='val_loss', save_best_only=True)]\n\n# create model\naug_model = Sequential([    Conv2D(32, (3,3), activation='relu', input_shape=(150, 150, 3)),\n                            MaxPooling2D(2, 2),\n                            Conv2D(64, (3,3), activation='relu'),\n                            MaxPooling2D(2,2),\n                            Conv2D(128, (3,3), activation='relu'),\n                            MaxPooling2D(2,2),\n\n                            Flatten(),\n                            Dense(128, activation='relu'),\n                            Dense(1, activation='sigmoid')  ])\n\n# load weights if exists\nif os.path.exists(\"/kaggle/working/weights.best.keras\"):\n    aug_model.load_weights(\"weights.best.hdf5\")\n\n# Compile model \naug_model.compile(optimizer='adamax', loss='binary_crossentropy', metrics=['accuracy'])\naug_model.summary()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:42:10.577130Z","iopub.execute_input":"2026-01-17T22:42:10.577903Z","iopub.status.idle":"2026-01-17T22:42:10.638927Z","shell.execute_reply.started":"2026-01-17T22:42:10.577874Z","shell.execute_reply":"2026-01-17T22:42:10.638373Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"aug_history = aug_model.fit(aug_train_generator, epochs=5, verbose=1,validation_data=valid_generator, callbacks = my_callbacks)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:42:13.750236Z","iopub.execute_input":"2026-01-17T22:42:13.750544Z","iopub.status.idle":"2026-01-17T22:44:57.163557Z","shell.execute_reply.started":"2026-01-17T22:42:13.750521Z","shell.execute_reply":"2026-01-17T22:44:57.162898Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"history_df = pd.DataFrame(aug_history.history)\nhistory_df.loc[:,['loss','val_loss']].plot()\nhistory_df.loc[:,['accuracy','val_accuracy']].plot()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:45:14.978202Z","iopub.execute_input":"2026-01-17T22:45:14.978863Z","iopub.status.idle":"2026-01-17T22:45:15.266474Z","shell.execute_reply.started":"2026-01-17T22:45:14.978814Z","shell.execute_reply":"2026-01-17T22:45:15.265856Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_acc = aug_model.evaluate(train_generator)[1]\nvalid_acc = aug_model.evaluate(valid_generator)[1]\nprint(\"Our Augmented Base Model Accuracy on Training Data: \", train_acc)\nprint(\"Our Augmented Base Model Accuracy on Validation Data: \", valid_acc)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:45:18.197274Z","iopub.execute_input":"2026-01-17T22:45:18.197975Z","iopub.status.idle":"2026-01-17T22:45:49.662330Z","shell.execute_reply.started":"2026-01-17T22:45:18.197945Z","shell.execute_reply":"2026-01-17T22:45:49.661773Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"- *Still Overfitting*\n- *We may try more Regularization*","metadata":{}},{"cell_type":"markdown","source":"# More Complex Model\n","metadata":{}},{"cell_type":"code","source":"my_callbacks = [ EarlyStopping(monitor='val_loss', patience=5, min_delta=0.001),\n                 ModelCheckpoint('/kaggle/working/weights2.best.keras', monitor='val_loss', save_best_only=True)]\n\n# create model\nnew_model = Sequential([    Conv2D(32, (3,3), activation='relu', input_shape=(150, 150, 3)),\n                            MaxPooling2D(2, 2),\n                            Conv2D(64, (3,3), activation='relu'),\n                            MaxPooling2D(2,2),\n                            Conv2D(128, (3,3), activation='relu'),\n                            MaxPooling2D(2,2),\n                            Conv2D(128, (3,3), activation='relu'),\n                            MaxPooling2D(2,2),\n                            Flatten(),\n                            BatchNormalization(),\n                            Dense(128, kernel_regularizer = L2(0.15), bias_regularizer=L2(0.15), activation='relu'),\n                            Dropout(rate = 0.5 , seed = 40),\n                            Dense(1, activation='sigmoid')  ])\n\n# load weights if exists\nif os.path.exists(\"/kaggle/working/weights2.best.keras\"):\n    new_model.load_weights(\"weights2.best.keras\")\n\n# Compile model \nnew_model.compile(optimizer='adamax', loss='binary_crossentropy', metrics=['accuracy'])\nnew_model.summary()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:46:30.071973Z","iopub.execute_input":"2026-01-17T22:46:30.072296Z","iopub.status.idle":"2026-01-17T22:46:30.154831Z","shell.execute_reply.started":"2026-01-17T22:46:30.072270Z","shell.execute_reply":"2026-01-17T22:46:30.154288Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"new_history = new_model.fit(aug_train_generator, epochs=20, verbose=1,validation_data=valid_generator, callbacks = my_callbacks)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:46:33.202873Z","iopub.execute_input":"2026-01-17T22:46:33.203485Z","iopub.status.idle":"2026-01-17T22:57:13.983440Z","shell.execute_reply.started":"2026-01-17T22:46:33.203458Z","shell.execute_reply":"2026-01-17T22:57:13.982640Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"history_df = pd.DataFrame(new_history.history)\nhistory_df.loc[:,['loss','val_loss']].plot()\nhistory_df.loc[:,['accuracy','val_accuracy']].plot()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:57:43.424866Z","iopub.execute_input":"2026-01-17T22:57:43.425163Z","iopub.status.idle":"2026-01-17T22:57:43.708270Z","shell.execute_reply.started":"2026-01-17T22:57:43.425140Z","shell.execute_reply":"2026-01-17T22:57:43.707452Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_acc = new_model.evaluate(train_generator)[1]\nvalid_acc = new_model.evaluate(valid_generator)[1]\nprint(\"Our New Model Accuracy on Training Data: \", train_acc)\nprint(\"Our New Model Accuracy on Validation Data: \", valid_acc)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:57:50.280638Z","iopub.execute_input":"2026-01-17T22:57:50.281160Z","iopub.status.idle":"2026-01-17T22:58:21.522989Z","shell.execute_reply.started":"2026-01-17T22:57:50.281134Z","shell.execute_reply":"2026-01-17T22:58:21.522372Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"new_history = new_model.fit(aug_train_generator, epochs=20, verbose=1,validation_data=valid_generator, callbacks = my_callbacks)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T22:58:21.524275Z","iopub.execute_input":"2026-01-17T22:58:21.524540Z","iopub.status.idle":"2026-01-17T23:06:47.774172Z","shell.execute_reply.started":"2026-01-17T22:58:21.524520Z","shell.execute_reply":"2026-01-17T23:06:47.773603Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"history_df = pd.DataFrame(new_history.history)\nhistory_df.loc[:,['loss','val_loss']].plot()\nhistory_df.loc[:,['accuracy','val_accuracy']].plot()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T23:06:47.775306Z","iopub.execute_input":"2026-01-17T23:06:47.775562Z","iopub.status.idle":"2026-01-17T23:06:48.047760Z","shell.execute_reply.started":"2026-01-17T23:06:47.775540Z","shell.execute_reply":"2026-01-17T23:06:48.047165Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_acc = new_model.evaluate(train_generator)[1]\nvalid_acc = new_model.evaluate(valid_generator)[1]\nprint(\"Our New Model Accuracy on Training Data: \", train_acc)\nprint(\"Our New Model Accuracy on Validation Data: \", valid_acc)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-17T23:06:48.048982Z","iopub.execute_input":"2026-01-17T23:06:48.049213Z","iopub.status.idle":"2026-01-17T23:07:18.854922Z","shell.execute_reply.started":"2026-01-17T23:06:48.049193Z","shell.execute_reply":"2026-01-17T23:07:18.854292Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}