{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":3362,"databundleVersionId":31148,"sourceType":"competition"}],"dockerImageVersionId":30235,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Problem Statement\nIn this problem, you'll train a CNN model to classify whether images contain either a dog or a cat.  This is easy for humans, dogs, and cats. Your computer will find it a bit more difficult. <br>\nThe Dogs vs. Cats dataset is a standard computer vision dataset that involves classifying photos as either containing a dog or cat. <br>\n<br>\nIn this notebook, you will discover how to develop a convolutional neural network to classify photos of dogs and cats.\n* How to load and prepare photos of dogs and cats for modeling.\n* How to develop a convolutional neural network for photo classification from scratch and improve model performance.\n* How to develop a model for photo classification using transfer learning.","metadata":{}},{"cell_type":"markdown","source":"# Importing Libraries","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport tensorflow as tf\nfrom tensorflow import keras\nimport os\n\nimport matplotlib.pyplot as plt\nimport matplotlib.image as img\nimport seaborn as sns\n\n'''setting seed'''\nseed = 0\nnp.random.seed(seed)\ntf.random.set_seed(3)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-08-10T16:14:03.55224Z","iopub.execute_input":"2024-08-10T16:14:03.552884Z","iopub.status.idle":"2024-08-10T16:14:08.547596Z","shell.execute_reply.started":"2024-08-10T16:14:03.552804Z","shell.execute_reply":"2024-08-10T16:14:08.546744Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Load and Extract data","metadata":{}},{"cell_type":"code","source":"import zipfile\n\nzip_files = ['test1', 'train']\n\nfor zip_file in zip_files:\n    with zipfile.ZipFile(\"../input/dogs-vs-cats/{}.zip\".format(zip_file),\"r\") as z:\n        z.extractall(\".\")\n        print(\"{} unzipped\".format(zip_file))","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:08.549559Z","iopub.execute_input":"2024-08-10T16:14:08.55008Z","iopub.status.idle":"2024-08-10T16:14:24.979303Z","shell.execute_reply.started":"2024-08-10T16:14:08.550051Z","shell.execute_reply":"2024-08-10T16:14:24.978282Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"TRAIN_DIR_PATH = './train'\nfile_names = os.listdir(TRAIN_DIR_PATH)\nprint('There are {} number of images in directory.'.format(len(file_names)))","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:24.98065Z","iopub.execute_input":"2024-08-10T16:14:24.981037Z","iopub.status.idle":"2024-08-10T16:14:25.001057Z","shell.execute_reply.started":"2024-08-10T16:14:24.980995Z","shell.execute_reply":"2024-08-10T16:14:25.00013Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def to_dataframe(file_names):\n    files, labels = list(), list()\n    for file in file_names:\n        files.append(file)\n        labels.append(file[:3])\n    df = pd.DataFrame({'filename':files, 'label':labels})\n    return df\n\ndf = to_dataframe(file_names)","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:25.002064Z","iopub.execute_input":"2024-08-10T16:14:25.002344Z","iopub.status.idle":"2024-08-10T16:14:25.022316Z","shell.execute_reply.started":"2024-08-10T16:14:25.002318Z","shell.execute_reply":"2024-08-10T16:14:25.021401Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.head()","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:25.025744Z","iopub.execute_input":"2024-08-10T16:14:25.026168Z","iopub.status.idle":"2024-08-10T16:14:25.046735Z","shell.execute_reply.started":"2024-08-10T16:14:25.026139Z","shell.execute_reply":"2024-08-10T16:14:25.045658Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Analyze data","metadata":{}},{"cell_type":"code","source":"print('data set label distribution:\\n',df['label'].value_counts())\n\nplt.figure(figsize=(7,7))\nsns.countplot(x = df['label'])\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:25.047897Z","iopub.execute_input":"2024-08-10T16:14:25.048182Z","iopub.status.idle":"2024-08-10T16:14:25.223471Z","shell.execute_reply.started":"2024-08-10T16:14:25.048156Z","shell.execute_reply":"2024-08-10T16:14:25.222497Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cat = [file for file in file_names if file[:3]=='cat']\ndog = [file for file in file_names if file[:3]=='dog']","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:25.224896Z","iopub.execute_input":"2024-08-10T16:14:25.226182Z","iopub.status.idle":"2024-08-10T16:14:25.242465Z","shell.execute_reply.started":"2024-08-10T16:14:25.226142Z","shell.execute_reply":"2024-08-10T16:14:25.241292Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Randomly print a CAT Image\nim = img.imread('./train/cat.11789.jpg')\nprint(im.shape)\nplt.imshow(im)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:25.244006Z","iopub.execute_input":"2024-08-10T16:14:25.244963Z","iopub.status.idle":"2024-08-10T16:14:25.435233Z","shell.execute_reply.started":"2024-08-10T16:14:25.244925Z","shell.execute_reply":"2024-08-10T16:14:25.434217Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Randomly print a CAT Image\nim = img.imread('./train/dog.11789.jpg')\nprint(im.shape)\nplt.imshow(im)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:25.436526Z","iopub.execute_input":"2024-08-10T16:14:25.436906Z","iopub.status.idle":"2024-08-10T16:14:25.65554Z","shell.execute_reply.started":"2024-08-10T16:14:25.436867Z","shell.execute_reply":"2024-08-10T16:14:25.654409Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Randomly Print Images","metadata":{}},{"cell_type":"code","source":"plt.figure(figsize=(15,7))\nfor i, c in enumerate(np.random.randint(0,len(cat),4), start=1):\n    im = img.imread('./train/'+cat[c])\n    print(im.shape)\n    plt.subplot(2,2,i)\n    plt.imshow(im)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:25.656796Z","iopub.execute_input":"2024-08-10T16:14:25.657107Z","iopub.status.idle":"2024-08-10T16:14:26.249301Z","shell.execute_reply.started":"2024-08-10T16:14:25.657077Z","shell.execute_reply":"2024-08-10T16:14:26.248321Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(15,7))\nfor i, c in enumerate(np.random.randint(0,len(dog),4), start=1):\n    im = img.imread('./train/'+dog[c])\n    plt.subplot(2,2,i)\n    print(im.shape)\n    plt.imshow(im)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:26.250623Z","iopub.execute_input":"2024-08-10T16:14:26.250945Z","iopub.status.idle":"2024-08-10T16:14:26.821861Z","shell.execute_reply.started":"2024-08-10T16:14:26.250916Z","shell.execute_reply":"2024-08-10T16:14:26.820917Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Looking at a few random photos in the directory, you can see that the photos are color and have different shapes and sizes.","metadata":{}},{"cell_type":"markdown","source":"# Split data","metadata":{}},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\ntrain_set, valid_set = train_test_split(df, test_size=0.2,random_state=seed)","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:26.823201Z","iopub.execute_input":"2024-08-10T16:14:26.823616Z","iopub.status.idle":"2024-08-10T16:14:26.925772Z","shell.execute_reply.started":"2024-08-10T16:14:26.823577Z","shell.execute_reply":"2024-08-10T16:14:26.92499Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_set.shape, valid_set.shape","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:26.927181Z","iopub.execute_input":"2024-08-10T16:14:26.927515Z","iopub.status.idle":"2024-08-10T16:14:26.933731Z","shell.execute_reply.started":"2024-08-10T16:14:26.927483Z","shell.execute_reply":"2024-08-10T16:14:26.932811Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('train set distribution:\\n',train_set['label'].value_counts())\nprint('\\nvalid set distribution:\\n',valid_set['label'].value_counts())\nprint()\n\nplt.figure(figsize=(10,5))\nplt.subplot(1,3,1)\nsns.countplot(x=train_set['label'], order=['dog','cat'])\nplt.title('Train set label distribution')\n\nplt.subplot(1,3,3)\nsns.countplot(x=valid_set['label'], order=['dog','cat'])\nplt.title('valid set label distribution')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:26.938732Z","iopub.execute_input":"2024-08-10T16:14:26.939017Z","iopub.status.idle":"2024-08-10T16:14:27.166019Z","shell.execute_reply.started":"2024-08-10T16:14:26.93899Z","shell.execute_reply":"2024-08-10T16:14:27.165062Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Hence it's a balanced dataset","metadata":{}},{"cell_type":"markdown","source":"# Image data Generator and Data Augmentation","metadata":{}},{"cell_type":"code","source":"from tensorflow.keras.preprocessing.image import ImageDataGenerator\n\nWIDTH, HEIGHT = 150, 150\nbatch_size = 32","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:27.167072Z","iopub.execute_input":"2024-08-10T16:14:27.167347Z","iopub.status.idle":"2024-08-10T16:14:28.039784Z","shell.execute_reply.started":"2024-08-10T16:14:27.167322Z","shell.execute_reply":"2024-08-10T16:14:28.03894Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_datagenerator = ImageDataGenerator(rotation_range=15, \n                                  rescale=1./255, \n                                  shear_range=0.1,\n                                  zoom_range=0.2,\n                                  horizontal_flip=True,\n                                  width_shift_range=0.1,\n                                  height_shift_range=0.1)\n\ntraining_data = train_datagenerator.flow_from_dataframe(dataframe=train_set, \n                                                        directory='./train',\n                                                       x_col='filename',\n                                                       y_col='label',\n                                                       target_size=(WIDTH, HEIGHT),\n                                                       class_mode='categorical',\n                                                       batch_size=batch_size)","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:28.040964Z","iopub.execute_input":"2024-08-10T16:14:28.041273Z","iopub.status.idle":"2024-08-10T16:14:28.280848Z","shell.execute_reply.started":"2024-08-10T16:14:28.041247Z","shell.execute_reply":"2024-08-10T16:14:28.279799Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"training_data.class_indices","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:28.282289Z","iopub.execute_input":"2024-08-10T16:14:28.282724Z","iopub.status.idle":"2024-08-10T16:14:28.289672Z","shell.execute_reply.started":"2024-08-10T16:14:28.282686Z","shell.execute_reply":"2024-08-10T16:14:28.288632Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"training_data.filenames[:10]","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:28.290899Z","iopub.execute_input":"2024-08-10T16:14:28.291197Z","iopub.status.idle":"2024-08-10T16:14:28.301469Z","shell.execute_reply.started":"2024-08-10T16:14:28.29117Z","shell.execute_reply":"2024-08-10T16:14:28.300504Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# new_dict={}\n# for key, value in training_data.class_indices.items():\n#     new_dict[value]=key ","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:28.302708Z","iopub.execute_input":"2024-08-10T16:14:28.30299Z","iopub.status.idle":"2024-08-10T16:14:28.311588Z","shell.execute_reply.started":"2024-08-10T16:14:28.302965Z","shell.execute_reply":"2024-08-10T16:14:28.310762Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(len(training_data.filenames)):\n    image, label = training_data.next()\n\n    # display the image from the iterator\n    plt.imshow(image[0])\n#     print(new_dict[label[0]])\n    plt.show()\n    if i >5:\n        break","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:28.312708Z","iopub.execute_input":"2024-08-10T16:14:28.313048Z","iopub.status.idle":"2024-08-10T16:14:31.577156Z","shell.execute_reply.started":"2024-08-10T16:14:28.313022Z","shell.execute_reply":"2024-08-10T16:14:31.576213Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"valid_datagenerator = ImageDataGenerator(rescale=1./255)\nvalidation_data = valid_datagenerator.flow_from_dataframe(dataframe=valid_set,\n                                                         directory='./train',\n                                                         x_col='filename',\n                                                         y_col='label',\n                                                         target_size=(WIDTH,HEIGHT),\n                                                         class_mode='categorical',\n                                                         batch_size=batch_size)","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:31.578575Z","iopub.execute_input":"2024-08-10T16:14:31.578928Z","iopub.status.idle":"2024-08-10T16:14:31.649456Z","shell.execute_reply.started":"2024-08-10T16:14:31.578893Z","shell.execute_reply":"2024-08-10T16:14:31.648488Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Making CNN Model","metadata":{}},{"cell_type":"code","source":"from tensorflow.keras.layers import *\nfrom functools import partial\n\nDefaultConv2D = partial(keras.layers.Conv2D, kernel_size=3, activation='relu', padding=\"SAME\")\n\nmodel = keras.models.Sequential()\n\nmodel.add(DefaultConv2D(filters=32, kernel_size=5, input_shape=(WIDTH, HEIGHT, 3)))\nmodel.add(MaxPooling2D(pool_size=2))\n\nmodel.add(DefaultConv2D(filters=64))\nmodel.add(DefaultConv2D(filters=64))\nmodel.add(MaxPooling2D(pool_size=2))\n\nmodel.add(DefaultConv2D(filters=128))\nmodel.add(DefaultConv2D(filters=128))\nmodel.add(MaxPooling2D(pool_size=2))\n\nmodel.add(Flatten())\nmodel.add(Dense(64, activation='relu'))\nmodel.add(Dropout(0.2))\n\nmodel.add(Dense(32, activation='relu'))\nmodel.add(Dropout(0.2))\n\nmodel.add(Dense(2, activation='softmax'))","metadata":{"_kg_hide-output":true,"execution":{"iopub.status.busy":"2024-08-10T16:14:31.65049Z","iopub.execute_input":"2024-08-10T16:14:31.650772Z","iopub.status.idle":"2024-08-10T16:14:34.326271Z","shell.execute_reply.started":"2024-08-10T16:14:31.650733Z","shell.execute_reply":"2024-08-10T16:14:34.325454Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.summary()","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:34.327347Z","iopub.execute_input":"2024-08-10T16:14:34.327632Z","iopub.status.idle":"2024-08-10T16:14:34.334812Z","shell.execute_reply.started":"2024-08-10T16:14:34.327607Z","shell.execute_reply":"2024-08-10T16:14:34.333807Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Callbacks","metadata":{}},{"cell_type":"code","source":"from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint, ReduceLROnPlateau\nimport datetime\nearlystop_cb = EarlyStopping(patience=10, restore_best_weights=True)\nreduce_lr_cb = ReduceLROnPlateau(factor=0.5, patience=5, monitor='val_loss', min_lr=0.00001)\ncheckpoint_cb = ModelCheckpoint('model.h5', save_best_only=True)\n# Tensorboard Setup\n# -- Define Logging Directory & TimeStamp --\nlog_dir = \"logs/fit/\" + datetime.datetime.now().strftime(\"%d%m%Y-%H%M\")\n\n# --TensorBoard CallBack --\ntensorBoard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)\n\n\ncallbacks = [earlystop_cb, reduce_lr_cb, checkpoint_cb,tensorBoard_callback]","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:34.336245Z","iopub.execute_input":"2024-08-10T16:14:34.336535Z","iopub.status.idle":"2024-08-10T16:14:34.752917Z","shell.execute_reply.started":"2024-08-10T16:14:34.336507Z","shell.execute_reply":"2024-08-10T16:14:34.752068Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"markdown","source":"# Train the Model","metadata":{}},{"cell_type":"code","source":"opt = keras.optimizers.SGD(learning_rate=0.01, momentum=0.9)\nmodel.compile(loss=\"categorical_crossentropy\", optimizer=opt, metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:34.754059Z","iopub.execute_input":"2024-08-10T16:14:34.754343Z","iopub.status.idle":"2024-08-10T16:14:34.768389Z","shell.execute_reply.started":"2024-08-10T16:14:34.754318Z","shell.execute_reply":"2024-08-10T16:14:34.767484Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!kill 654","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:34.769805Z","iopub.execute_input":"2024-08-10T16:14:34.770138Z","iopub.status.idle":"2024-08-10T16:14:35.819416Z","shell.execute_reply.started":"2024-08-10T16:14:34.770111Z","shell.execute_reply":"2024-08-10T16:14:35.817954Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # %load_ext tensorboard\n# %reload_ext tensorboard\n# # %tensorboard --logdir logs/fit\n","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:14:35.821333Z","iopub.execute_input":"2024-08-10T16:14:35.822351Z","iopub.status.idle":"2024-08-10T16:14:35.827489Z","shell.execute_reply.started":"2024-08-10T16:14:35.822284Z","shell.execute_reply":"2024-08-10T16:14:35.826492Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit(training_data,\n                   epochs=10,\n                   validation_data=validation_data,\n#                    validation_steps=valid_set.shape[0]//batch_size,\n#                    steps_per_epoch=train_set.shape[0]//batch_size, \n                     validation_steps=10,\n                     steps_per_epoch=10, \n                    \n                   callbacks=callbacks)","metadata":{"_kg_hide-output":true,"execution":{"iopub.status.busy":"2024-08-10T16:14:35.828679Z","iopub.execute_input":"2024-08-10T16:14:35.829009Z","iopub.status.idle":"2024-08-10T16:15:22.877331Z","shell.execute_reply.started":"2024-08-10T16:14:35.828982Z","shell.execute_reply":"2024-08-10T16:15:22.876496Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"acc = history.history['accuracy']\nval_acc = history.history['val_accuracy']\nloss = history.history['loss']\nval_loss = history.history['val_loss']\n\nepochs = range(len(acc))\n\nplt.figure(figsize=(15,5))\nplt.subplot(1,2,1)\nplt.plot(epochs, acc, 'bo', label='Training accuracy')\nplt.plot(epochs, val_acc, 'b', label='Validation accuracy')\nplt.title('Training and validation accuracy')\nplt.legend()\n\n\nplt.subplot(1,2,2)\nplt.plot(epochs, loss, 'go', label='Training Loss')\nplt.plot(epochs, val_loss, 'g', label='Validation Loss')\nplt.title('Training and validation loss')\nplt.legend()\n\nplt.show()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-08-10T16:15:22.878674Z","iopub.execute_input":"2024-08-10T16:15:22.878972Z","iopub.status.idle":"2024-08-10T16:15:23.22582Z","shell.execute_reply.started":"2024-08-10T16:15:22.878946Z","shell.execute_reply":"2024-08-10T16:15:23.224807Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"![image.png](attachment:65c589d8-a104-4e76-b44d-c0d6e013cf93.png)","metadata":{},"attachments":{"65c589d8-a104-4e76-b44d-c0d6e013cf93.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAA2oAAAE/CAYAAAA39zBmAAAgAElEQVR4AeydB3hVVfb23yTU0ASJ0hMEREAQBPuoIBYYRexSHLFNxLFhGfUb7MrYFQvqxL8FFUEcK4KgYEccKVJERBBCExBQQAglJOd73lOSk5tzbstNcsu7nyees9cuZ+/fvnLuumvttQElERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABDwIfARjmIfcSRVLXq31VyfIBnFwJDzMAtLf7fR7AHUGe4a4bpJpn0VAAH3uWSCgCIiACIpAoBCJ5Z0ZStzrnr/erN/3eANZ6F0kqAiKQagR2AHD+igHscuX5JT/VU1W8SEIxDldRywHAujVCdahyERABERCBSifgvFt51fu1PG69X8szoUSKmjcXSV0E9EXPBSPJb+u75sd/NK8AMN0lc275mdjnZHQVgWomoM9jNS+AHi8CIhCSgN6vIRGpggiIQDQE0qNppDZJRcD5RedWABsAvAygMYAPAWwC8Id938o1689tRY+iSwB8DeBRu+5KAP2jrNsWwJcA/rSVyDEAXnf15b4NZ4z3AZhp90e3wKauDv4GYBWALQBGuuSBt0fZXDJcBWcDWGjnjwQwC8BWAOsBPAOglquu+/YVAPe7BP+02/wK4DKXnLenA/gewHYAawDc7SonIyY+k7/gHuNaB7sIxwKYDWCbfWXeSVy/YGyceryG4tzE/sxwDvysvOdqPBDAfHsOvwDoZ5cF/rrKuTnr7FgLLwewGsCndpu37HXgfDj/Lq7n1AXwmL2eLOfnkbLJAK511eMt143rpyQCIiAClU1A71e9XwO/ewT7zHUCwPcz3+2LAZzpqvxXAD/a32fWAbjZLuP3Gn5fY5vfAXwFQN/tXeAS/VaLmegrGJvxNwPAL9zZAHLt/8mpsDHfxnaTpALil6jMLLUVoYcBvAggzadysLpvAPgOwP62YkJlyi/xsxtqjEMAXArgAFt5cv5h6wzgOQDsv4X9PLci6n7m/wDsBHCSS8h+OVamIgA32HOn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NQrILLsf2sxTriQCIiACIiACqUqA+9RmrZmFXYW7IkLgF/nRTx5R56osAiIgAtVAQIpalNDp9ti6NdCtW3QdDB0K5OUB2dnWPjdemadcSQREQAREQARSlQD3qe0p2oNZa2dFhEARISPCpcoiIAIJQECKWhSLxAOuP/7YivbIYCLRJipl+flAcbF1lZIWLUm1EwEREAERSBYCx2cfj4y0jIj3qYWKCJksfDQPERCB1CEgRS2Ktf7iC2DnzvDC8uustCgAq4kIiIAIiEDKEmhYuyF6tegV1T41v4iQKQtTExcBEUhoAlLUolg+uj3WrQv06RO8sc5KC85HpSIgAiIgAiLgRYD71Biif8feHV7FkomACIhAShCQohbhMhsGQEXtlFMsZS1Yc52VFoyOykRABERABETAmwD3qe0r3oeZq2d6V5BUBERABFKAgBS1CBd58WJrP1k40R79zkTzk0c4FFUXAREQAREQgaQkcFyb41AzvSY+XflpUs5PkxIBERCBcAhIUQuHkqsOrWlMf/2rS+hz63cmmp/cpxuJRUAEREAERCClCGTWzMTRrY7GZ/mfpdS8NVkREAERcBOQouamEcY9FbXDDwdatgxdWWelhWakGiIgAiIgAiLgRYD71OaunwsdWO1FRzIREIFUICBFLYJV3rwZmDULGDAgvEY6Ky08TqolAiIgAiIgAoEELutxGWpl1MJt028LLFJeBERABFKCgBS1CJb5o4+sM8/C2Z/mdKuz0hwSuoqACIiACIhA+ATaNGqDfx77T4z/YTy+WfNN+A1VUwREQASShIAUtQgWkm6PzZpZro8RNFNVERABERABERCBKAjcctwtaNGgBW6YdgOKjeIoelATERABEUhcAlLUwly7vXuBqVOtQ67TRS1MaqomAiIgAiIgAtETqF+rPh7o+4B5ptq4heOi7wjAuEXjkDM6B+n3pJtX5pVEQAREIJ4JSOUIc3V++AHYvt06Py3MJqomAiIgAiIgAiJQQQIXdbsIR7Q4ArfNuA079+6MqjcqZbmTcrFq2yoYMMwr81LWosKpRiIgAlVEQIpamKCXLbMqduoUZgNVEwEREAEREAERqDCB9LR0jO43Gr/++SsenvlwVP2NnDESBYUFZdoyT7mSCIiACMQrASlqYa7Mzz9bFdu1C7OBqomACIiACIiACMSEwLGtj8WgQwfh4W8e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"}}},{"cell_type":"markdown","source":"# Evaluate Model","metadata":{}},{"cell_type":"code","source":"model1 = keras.models.load_model('model.h5')","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:15:23.227058Z","iopub.execute_input":"2024-08-10T16:15:23.227369Z","iopub.status.idle":"2024-08-10T16:15:23.384752Z","shell.execute_reply.started":"2024-08-10T16:15:23.227341Z","shell.execute_reply":"2024-08-10T16:15:23.383885Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_loss, test_acc = model1.evaluate(validation_data, steps=len(validation_data), verbose=1)\nprint('Loss: %.3f' % (test_loss))\nprint('Accuracy: %.3f' % (test_acc * 100.0)) ","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:15:23.386023Z","iopub.execute_input":"2024-08-10T16:15:23.386706Z","iopub.status.idle":"2024-08-10T16:15:37.08913Z","shell.execute_reply.started":"2024-08-10T16:15:23.386665Z","shell.execute_reply":"2024-08-10T16:15:37.08824Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"### The VGG Architecture works well on the data\n### So the next we'll going to train VGG16 architecture (transfer learning)","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:15:37.090616Z","iopub.execute_input":"2024-08-10T16:15:37.091313Z","iopub.status.idle":"2024-08-10T16:15:37.095566Z","shell.execute_reply.started":"2024-08-10T16:15:37.09127Z","shell.execute_reply":"2024-08-10T16:15:37.094635Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Transfer Learning","metadata":{}},{"cell_type":"code","source":"weights = r\"D:\\vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5\"","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:15:37.096831Z","iopub.execute_input":"2024-08-10T16:15:37.097115Z","iopub.status.idle":"2024-08-10T16:15:37.108363Z","shell.execute_reply.started":"2024-08-10T16:15:37.097088Z","shell.execute_reply":"2024-08-10T16:15:37.107439Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"base_model = keras.applications.vgg16.VGG16(weights=\"imagenet\", include_top=False, input_shape=(WIDTH,HEIGHT,3))\nbase_model.trainable = False ## Not trainable weights","metadata":{"_kg_hide-output":true,"execution":{"iopub.status.busy":"2024-08-10T16:29:48.701042Z","iopub.execute_input":"2024-08-10T16:29:48.701514Z","iopub.status.idle":"2024-08-10T16:30:08.892748Z","shell.execute_reply.started":"2024-08-10T16:29:48.701469Z","shell.execute_reply":"2024-08-10T16:30:08.891146Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"base_model.summary()","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:15:57.64287Z","iopub.status.idle":"2024-08-10T16:15:57.643233Z","shell.execute_reply.started":"2024-08-10T16:15:57.643053Z","shell.execute_reply":"2024-08-10T16:15:57.64307Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.layers import *\n\nmodel = keras.models.Sequential()\nmodel.add(base_model)\nmodel.add(Flatten())\nmodel.add(Dense(128, activation='relu'))\nmodel.add(Dropout(0.2))\nmodel.add(Dense(2, activation='softmax'))","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:15:57.644692Z","iopub.status.idle":"2024-08-10T16:15:57.645066Z","shell.execute_reply.started":"2024-08-10T16:15:57.644879Z","shell.execute_reply":"2024-08-10T16:15:57.644897Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"opt = keras.optimizers.SGD(learning_rate=0.01, momentum=0.9)\nmodel.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:15:57.646773Z","iopub.status.idle":"2024-08-10T16:15:57.647112Z","shell.execute_reply.started":"2024-08-10T16:15:57.646939Z","shell.execute_reply":"2024-08-10T16:15:57.646955Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit(training_data,\n            epochs=4,\n            validation_data=validation_data,\n#             validation_steps=valid_set.shape[0]//batch_size,\n#             steps_per_epoch=train_set.shape[0]//batch_size, \n                     validation_steps=10,\n                     steps_per_epoch=10, \n            )","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:15:57.648705Z","iopub.status.idle":"2024-08-10T16:15:57.64904Z","shell.execute_reply.started":"2024-08-10T16:15:57.648871Z","shell.execute_reply":"2024-08-10T16:15:57.648887Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_loss, test_acc = model.evaluate(validation_data, steps=len(validation_data), verbose=1)\nprint('Loss: %.3f' % (test_loss))\nprint('Accuracy: %.3f' % (test_acc * 100.0)) ","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:15:57.650712Z","iopub.status.idle":"2024-08-10T16:15:57.651052Z","shell.execute_reply.started":"2024-08-10T16:15:57.650877Z","shell.execute_reply":"2024-08-10T16:15:57.650893Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.layers[0].trainable=True","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:15:57.653221Z","iopub.status.idle":"2024-08-10T16:15:57.65383Z","shell.execute_reply.started":"2024-08-10T16:15:57.653553Z","shell.execute_reply":"2024-08-10T16:15:57.653581Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.summary()","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:15:57.655778Z","iopub.status.idle":"2024-08-10T16:15:57.656493Z","shell.execute_reply.started":"2024-08-10T16:15:57.656201Z","shell.execute_reply":"2024-08-10T16:15:57.656227Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"checkpoint_cb = keras.callbacks.ModelCheckpoint('model1.h5',save_best_only=True)\nearlystop_cb = keras.callbacks.EarlyStopping(patience=5, restore_best_weights=True)\n\nopt = keras.optimizers.SGD(learning_rate=0.001, momentum=0.9)\nmodel.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])\n\nhistory = model.fit(training_data,\n            epochs=5,\n            validation_data=validation_data,\n#             validation_steps=valid_set.shape[0]//batch_size,\n#             steps_per_epoch=train_set.shape[0]//batch_size, \n                     validation_steps=10,\n                     steps_per_epoch=10, \n            callbacks=[checkpoint_cb, earlystop_cb])","metadata":{"_kg_hide-output":true,"execution":{"iopub.status.busy":"2024-08-10T16:15:57.657861Z","iopub.status.idle":"2024-08-10T16:15:57.658342Z","shell.execute_reply.started":"2024-08-10T16:15:57.658091Z","shell.execute_reply":"2024-08-10T16:15:57.658115Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"acc = history.history['accuracy']\nval_acc = history.history['val_accuracy']\nloss = history.history['loss']\nval_loss = history.history['val_loss']\n\nepochs = range(len(acc))\n\nplt.figure(figsize=(15,5))\nplt.subplot(1,2,1)\nplt.plot(epochs, acc, 'bo', label='Training accuracy')\nplt.plot(epochs, val_acc, 'b', label='Validation accuracy')\nplt.title('Training and validation accuracy')\nplt.legend()\n\n\nplt.subplot(1,2,2)\nplt.plot(epochs, loss, 'go', label='Training Loss')\nplt.plot(epochs, val_loss, 'g', label='Validation Loss')\nplt.title('Training and validation loss')\nplt.legend()\n\nplt.show()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-08-10T16:15:57.659411Z","iopub.status.idle":"2024-08-10T16:15:57.660126Z","shell.execute_reply.started":"2024-08-10T16:15:57.659625Z","shell.execute_reply":"2024-08-10T16:15:57.659643Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model2 = keras.models.load_model('model1.h5')","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:15:57.661935Z","iopub.status.idle":"2024-08-10T16:15:57.662303Z","shell.execute_reply.started":"2024-08-10T16:15:57.66211Z","shell.execute_reply":"2024-08-10T16:15:57.662127Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_loss, test_acc = model2.evaluate(validation_data, steps=len(validation_data), verbose=1)\nprint('Loss: %.3f' % (test_loss))\nprint('Accuracy: %.3f' % (test_acc * 100.0))","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:15:57.664204Z","iopub.status.idle":"2024-08-10T16:15:57.664598Z","shell.execute_reply.started":"2024-08-10T16:15:57.664384Z","shell.execute_reply":"2024-08-10T16:15:57.664401Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Nothing better than this....","metadata":{}},{"cell_type":"markdown","source":"# Make Predictions","metadata":{}},{"cell_type":"code","source":"sampleSubmission = pd.read_csv('../input/dogs-vs-cats/sampleSubmission.csv')\ntest_df = sampleSubmission.copy()\ntest_df['id'] = test_df['id'].apply(lambda x : str(x)+'.jpg')","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:15:57.665683Z","iopub.status.idle":"2024-08-10T16:15:57.666014Z","shell.execute_reply.started":"2024-08-10T16:15:57.665847Z","shell.execute_reply":"2024-08-10T16:15:57.665863Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_gen = ImageDataGenerator(rescale=1./255)\ntest_generator = test_gen.flow_from_dataframe(test_df, \n                                                \"./test1/\", \n                                                x_col='id',\n                                                y_col=None,\n                                                class_mode=None,\n                                                target_size=(WIDTH,HEIGHT),\n                                                batch_size=batch_size,\n                                                shuffle=False)","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:15:57.667898Z","iopub.status.idle":"2024-08-10T16:15:57.668233Z","shell.execute_reply.started":"2024-08-10T16:15:57.668061Z","shell.execute_reply":"2024-08-10T16:15:57.668077Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predict = model1.predict(test_generator, steps=np.ceil(test_df.shape[0]/batch_size))","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:15:57.669424Z","iopub.status.idle":"2024-08-10T16:15:57.669804Z","shell.execute_reply.started":"2024-08-10T16:15:57.669621Z","shell.execute_reply":"2024-08-10T16:15:57.669638Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sampleSubmission['label'] = np.argmax(predict, axis=-1)\nsampleSubmission.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:15:57.670992Z","iopub.status.idle":"2024-08-10T16:15:57.671347Z","shell.execute_reply.started":"2024-08-10T16:15:57.671172Z","shell.execute_reply":"2024-08-10T16:15:57.67119Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df['label'] = sampleSubmission['label'].replace({ 1: 'dog', 0: 'cat' })","metadata":{"execution":{"iopub.status.busy":"2024-08-10T16:15:57.672471Z","iopub.status.idle":"2024-08-10T16:15:57.672841Z","shell.execute_reply.started":"2024-08-10T16:15:57.672664Z","shell.execute_reply":"2024-08-10T16:15:57.672681Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# sample_test = test_df.values[np.random.randint(0, len(test_df), 16)]\n# sample_test\n# plt.figure(figsize=(15, 17))\n# for index, row in enumerate(sample_test):\n#     filename = row[0]\n#     category = row[1]\n#     image = img.imread(\"./test1/\"+filename)\n#     plt.subplot(4, 4, index+1)\n#     plt.imshow(image)\n#     plt.xlabel('Predicted: ' + \"{}\".format(category) )\n# plt.tight_layout()\n# plt.show()","metadata":{"_kg_hide-output":true,"execution":{"iopub.status.busy":"2024-08-10T16:15:57.674566Z","iopub.status.idle":"2024-08-10T16:15:57.674907Z","shell.execute_reply.started":"2024-08-10T16:15:57.674735Z","shell.execute_reply":"2024-08-10T16:15:57.674751Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Hurrayyy\n## ALL are correctlty predicted","metadata":{}},{"cell_type":"markdown","source":"## Upvote If you like it !","metadata":{}}]}