{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nos.environ['KAGGLE_USERNAME'] = 'talibilat'                                     # username from the json file\nos.environ['KAGGLE_KEY'] = '503e89f55d139912655d5eee68534a10'                   # key from the json file\n!kaggle competitions download -c dogs-vs-cats-redux-kernels-edition","metadata":{"id":"ZNfzbXO7EUQg","outputId":"05092d6f-f282-4ba7-8854-87d661ef95c0","execution":{"iopub.status.busy":"2022-09-16T21:46:30.456558Z","iopub.execute_input":"2022-09-16T21:46:30.457510Z","iopub.status.idle":"2022-09-16T21:46:32.444827Z","shell.execute_reply.started":"2022-09-16T21:46:30.457467Z","shell.execute_reply":"2022-09-16T21:46:32.443621Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from zipfile import ZipFile\ndef unzip(filename):\n  with ZipFile(filename, 'r') as zip:\n    zip.extractall()\n    print('Done')","metadata":{"id":"4VhrMOXqLhWa","execution":{"iopub.status.busy":"2022-09-16T21:46:35.705740Z","iopub.execute_input":"2022-09-16T21:46:35.706833Z","iopub.status.idle":"2022-09-16T21:46:35.713100Z","shell.execute_reply.started":"2022-09-16T21:46:35.706766Z","shell.execute_reply":"2022-09-16T21:46:35.712010Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"unzip('dogs-vs-cats-redux-kernels-edition.zip')","metadata":{"id":"It0D1XGVL5hx","outputId":"56fe3734-6f05-4c39-b0f3-1d4125284b7a","execution":{"iopub.status.busy":"2022-09-16T21:47:28.334675Z","iopub.execute_input":"2022-09-16T21:47:28.335576Z","iopub.status.idle":"2022-09-16T21:47:32.308905Z","shell.execute_reply.started":"2022-09-16T21:47:28.335540Z","shell.execute_reply":"2022-09-16T21:47:32.307844Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"unzip('test.zip')\nunzip('train.zip')","metadata":{"id":"tnKCwXSaMYm-","outputId":"af431eee-e93f-42f3-c2ad-c812ec46092d","execution":{"iopub.status.busy":"2022-09-16T21:47:33.361163Z","iopub.execute_input":"2022-09-16T21:47:33.361550Z","iopub.status.idle":"2022-09-16T21:47:44.426764Z","shell.execute_reply.started":"2022-09-16T21:47:33.361517Z","shell.execute_reply":"2022-09-16T21:47:44.425754Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pwd","metadata":{"execution":{"iopub.status.busy":"2022-09-16T21:25:29.229791Z","iopub.execute_input":"2022-09-16T21:25:29.230250Z","iopub.status.idle":"2022-09-16T21:25:29.241562Z","shell.execute_reply.started":"2022-09-16T21:25:29.230210Z","shell.execute_reply":"2022-09-16T21:25:29.240373Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ls","metadata":{"execution":{"iopub.status.busy":"2022-09-16T21:29:05.551178Z","iopub.execute_input":"2022-09-16T21:29:05.551610Z","iopub.status.idle":"2022-09-16T21:29:06.661230Z","shell.execute_reply.started":"2022-09-16T21:29:05.551573Z","shell.execute_reply":"2022-09-16T21:29:06.659732Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_dir_list = os.listdir('train')\n\npath, dirs, files = next(os.walk('./train'))\nfile_count = len(files)\nprint(file_count)\n\noriginal_dataset_dir = './train'\nbase_dir = './cats_and_dogs_small'\nos.mkdir(base_dir)","metadata":{"id":"CNcuSvS9MtiC","outputId":"949d7753-d857-494a-b34b-7e2b88974661","execution":{"iopub.status.busy":"2022-09-16T21:47:59.565615Z","iopub.execute_input":"2022-09-16T21:47:59.566298Z","iopub.status.idle":"2022-09-16T21:47:59.613481Z","shell.execute_reply.started":"2022-09-16T21:47:59.566260Z","shell.execute_reply":"2022-09-16T21:47:59.612285Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Creating Individial directories for Train, Test and Validation","metadata":{"id":"60s2MUWmjc32"}},{"cell_type":"code","source":"# Creating Train, Test and Validaiton directory\ntrain_dir = os.path.join(base_dir, 'train')\nos.mkdir(train_dir)\nvalidation_dir = os.path.join(base_dir, 'validation')\nos.mkdir(validation_dir)\ntest_dir = os.path.join(base_dir, 'test')\nos.mkdir(test_dir)\n\n# Training directory for Cats and Dogs\ntrain_cats_dir = os.path.join(train_dir, 'cats')\nos.mkdir(train_cats_dir)\ntrain_dogs_dir = os.path.join(train_dir, 'dogs')\nos.mkdir(train_dogs_dir)\n\n# Validation directory for Cats and Dogs\nvalidation_cats_dir = os.path.join(validation_dir, 'cats')\nos.mkdir(validation_cats_dir)\nvalidation_dogs_dir = os.path.join(validation_dir, 'dogs')\nos.mkdir(validation_dogs_dir)\n\n# Test directory for Cats and Dogs\ntest_cats_dir = os.path.join(test_dir, 'cats')\nos.mkdir(test_cats_dir)\ntest_dogs_dir = os.path.join(test_dir, 'dogs')\nos.mkdir(test_dogs_dir)\n","metadata":{"id":"bgi4XCqVN1Sf","execution":{"iopub.status.busy":"2022-09-16T21:49:31.049245Z","iopub.execute_input":"2022-09-16T21:49:31.049610Z","iopub.status.idle":"2022-09-16T21:49:31.059723Z","shell.execute_reply.started":"2022-09-16T21:49:31.049578Z","shell.execute_reply":"2022-09-16T21:49:31.058467Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ls -ltr","metadata":{"execution":{"iopub.status.busy":"2022-09-16T21:53:32.794283Z","iopub.execute_input":"2022-09-16T21:53:32.794690Z","iopub.status.idle":"2022-09-16T21:53:33.739825Z","shell.execute_reply.started":"2022-09-16T21:53:32.794657Z","shell.execute_reply":"2022-09-16T21:53:33.738301Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cd ..","metadata":{"execution":{"iopub.status.busy":"2022-09-16T21:38:27.473995Z","iopub.execute_input":"2022-09-16T21:38:27.474866Z","iopub.status.idle":"2022-09-16T21:38:27.482819Z","shell.execute_reply.started":"2022-09-16T21:38:27.474816Z","shell.execute_reply":"2022-09-16T21:38:27.481433Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ls -ltr","metadata":{"execution":{"iopub.status.busy":"2022-09-16T21:38:28.441156Z","iopub.execute_input":"2022-09-16T21:38:28.441588Z","iopub.status.idle":"2022-09-16T21:38:29.531985Z","shell.execute_reply.started":"2022-09-16T21:38:28.441536Z","shell.execute_reply":"2022-09-16T21:38:29.530565Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Creating a function which will copy our data from original directory to small directory\n","metadata":{"id":"IafDBiplezP1"}},{"cell_type":"code","source":"import shutil\n\ndef copyfiles(a,b,c,d): \n  fnames = [a.format(i) for i in range(b,c)]\n  for fname in fnames:\n    src = os.path.join(original_dataset_dir,fname)\n    dst = os.path.join(d, fname)\n    shutil.copyfile(src,dst)\n","metadata":{"id":"nPriicK3Smm0","execution":{"iopub.status.busy":"2022-09-16T21:53:44.858106Z","iopub.execute_input":"2022-09-16T21:53:44.858488Z","iopub.status.idle":"2022-09-16T21:53:44.865656Z","shell.execute_reply.started":"2022-09-16T21:53:44.858454Z","shell.execute_reply":"2022-09-16T21:53:44.864682Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Transferring all the subset data to the designated folder","metadata":{"id":"SxnWk1pje1qv"}},{"cell_type":"code","source":"copyfiles('cat.{}.jpg',0,9000,train_cats_dir)\ncopyfiles('cat.{}.jpg',9000,11500,validation_cats_dir)\ncopyfiles('cat.{}.jpg',11500,12500,test_cats_dir)\ncopyfiles('dog.{}.jpg',0,9000,train_dogs_dir)\ncopyfiles('dog.{}.jpg',9000,11500,validation_dogs_dir)\ncopyfiles('dog.{}.jpg',11500,12500,test_dogs_dir)","metadata":{"id":"SoxM3TDUTg9F","execution":{"iopub.status.busy":"2022-09-16T21:53:48.396253Z","iopub.execute_input":"2022-09-16T21:53:48.396934Z","iopub.status.idle":"2022-09-16T21:53:50.818323Z","shell.execute_reply.started":"2022-09-16T21:53:48.396897Z","shell.execute_reply":"2022-09-16T21:53:50.817284Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Printing total number of Images","metadata":{"id":"nLFuv4hfjV3b"}},{"cell_type":"code","source":"import pandas as pd\nd = {'Cat Images' : [len(os.listdir(train_cats_dir)),len(os.listdir(test_cats_dir)),len(os.listdir(validation_cats_dir))],\n     'Dog Images' : [len(os.listdir(train_dogs_dir)),len(os.listdir(test_dogs_dir)),len(os.listdir(validation_dogs_dir))]\n     }\npd.DataFrame(data=d, index=[\"Train\", \"Test\", \"Validation\"])","metadata":{"id":"GnPIlde4fmh4","outputId":"c4a9ba66-ae63-481e-a694-ccc5ec0a96e5","execution":{"iopub.status.busy":"2022-09-16T21:53:53.847140Z","iopub.execute_input":"2022-09-16T21:53:53.847535Z","iopub.status.idle":"2022-09-16T21:53:53.886391Z","shell.execute_reply.started":"2022-09-16T21:53:53.847502Z","shell.execute_reply":"2022-09-16T21:53:53.885345Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#DEEP LEARNING\nBuilding Deep Learning Model","metadata":{"id":"Oa4vzN1BkOEe"}},{"cell_type":"code","source":"from keras.layers.pooling import MaxPooling2D\nfrom keras import layers\nfrom keras import models\n\nmodel = models.Sequential()\nmodel.add(layers.Conv2D(32, (3,3), activation='relu', input_shape = (250,250,3)))\nmodel.add(layers.MaxPooling2D(2,2))\nmodel.add(layers.Conv2D(64, (3,3), activation='relu'))\nmodel.add(layers.MaxPooling2D(2,2))\nmodel.add(layers.Conv2D(128, (3,3), activation='relu'))\nmodel.add(layers.MaxPooling2D(2,2))\nmodel.add(layers.Conv2D(128, (3,3), activation='relu'))\nmodel.add(layers.MaxPooling2D(2,2))\nmodel.add(layers.Flatten())\nmodel.add(layers.Dropout(0.5))\nmodel.add(layers.Dense(512, activation = 'relu'))\nmodel.add(layers.Dense(1, activation= 'sigmoid'))\nmodel.summary()","metadata":{"id":"ksBSUEv8kbyM","outputId":"194bfc0c-9c84-4aed-9e7a-ba3149627319","execution":{"iopub.status.busy":"2022-09-16T22:03:47.372286Z","iopub.execute_input":"2022-09-16T22:03:47.372640Z","iopub.status.idle":"2022-09-16T22:03:47.447355Z","shell.execute_reply.started":"2022-09-16T22:03:47.372611Z","shell.execute_reply":"2022-09-16T22:03:47.446346Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow import keras\nmodel.compile(loss='binary_crossentropy', \n              optimizer='adam',\n              metrics=['acc'])","metadata":{"id":"548T0v_dmwlq","execution":{"iopub.status.busy":"2022-09-16T22:03:51.192675Z","iopub.execute_input":"2022-09-16T22:03:51.193375Z","iopub.status.idle":"2022-09-16T22:03:51.204332Z","shell.execute_reply.started":"2022-09-16T22:03:51.193336Z","shell.execute_reply":"2022-09-16T22:03:51.203158Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.preprocessing.image import ImageDataGenerator\n\n# train_datagen = ImageDataGenerator(rescale = 1./255)\ntrain_datagen = ImageDataGenerator(rescale= 1./255,\n                                   rotation_range= 40,\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\n\n\ntest_datagen = ImageDataGenerator(rescale= 1./255,\n                                   rotation_range= 40,\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\nt_datagen = ImageDataGenerator(rescale= 1./255)\n\n\ntrain_generator  = train_datagen.flow_from_directory(train_dir,\n                                                     target_size=(250,250),\n                                                     batch_size=32,\n                                                     class_mode='binary')\n\nvalidation_generator = test_datagen.flow_from_directory(validation_dir,\n                                                        target_size = (250,250),\n                                                        batch_size = 32,\n                                                        class_mode = 'binary')\n\n\ntest_generator = t_datagen.flow_from_directory(test_dir,\n                                               target_size = (250,250),\n                                               batch_size = 32,\n                                               class_mode = 'binary')\n\n","metadata":{"id":"YMj87UQKnk5f","outputId":"93e78cd4-adc7-4572-a0a8-e463a4a89d6f","execution":{"iopub.status.busy":"2022-09-16T22:35:43.158143Z","iopub.execute_input":"2022-09-16T22:35:43.158572Z","iopub.status.idle":"2022-09-16T22:35:44.460405Z","shell.execute_reply.started":"2022-09-16T22:35:43.158537Z","shell.execute_reply":"2022-09-16T22:35:44.457858Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit_generator(train_generator, \n                              steps_per_epoch=100,\n                              epochs=30,\n                              validation_data = validation_generator,\n                              validation_steps = 50)\n\nmodel.save('cats_and_dogs_small_1.h5')","metadata":{"id":"K2M31U_2uxkG","outputId":"6189d76c-b535-4f95-9d15-4a31cacb8d41","execution":{"iopub.status.busy":"2022-09-16T22:35:49.534517Z","iopub.execute_input":"2022-09-16T22:35:49.535457Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\n\nacc = history.history['acc']\nval_acc = history.history['val_acc']\nloss = history.history['loss']\nval_loss = history.history['val_loss']\n\nepochs = range(1, len(acc) + 1 )\nplt.plot(epochs, acc, 'bo' , label = 'Training Accuracy')\nplt.plot(epochs, val_acc, 'b', label = ' Validation Acuracy')\nplt.title('Training and Validation Accuracy')\nplt.legend()\n\nplt.figure()\nplt.plot(epochs, loss, 'bo' , label = 'Training Loss')\nplt.plot(epochs, val_loss, 'b', label = ' Validation Loss')\nplt.title('Training and Validation Loss')\nplt.legend()\n","metadata":{"id":"DQIzgsiYvZ9d","outputId":"f4709ddb-510c-4716-8f2f-65eb358554cf","execution":{"iopub.status.busy":"2022-09-16T22:16:31.957050Z","iopub.execute_input":"2022-09-16T22:16:31.957420Z","iopub.status.idle":"2022-09-16T22:16:32.379693Z","shell.execute_reply.started":"2022-09-16T22:16:31.957389Z","shell.execute_reply":"2022-09-16T22:16:32.378708Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.evaluate(test_generator)","metadata":{"execution":{"iopub.status.busy":"2022-09-16T22:20:15.428213Z","iopub.execute_input":"2022-09-16T22:20:15.428578Z","iopub.status.idle":"2022-09-16T22:20:22.951635Z","shell.execute_reply.started":"2022-09-16T22:20:15.428545Z","shell.execute_reply":"2022-09-16T22:20:22.950738Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#Taining and Testing on full dataset","metadata":{"id":"EuB2nZpj314q"}},{"cell_type":"code","source":"","metadata":{"id":"J7Sw2ev5vzxe","outputId":"4f220519-779c-481e-e60e-726a2881b66b"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"id":"jMgQojf64zZJ"},"execution_count":null,"outputs":[]}]}