{"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 zipfile\nimport os\nimport cv2\nimport matplotlib.pyplot as plt\nimport tensorflow as tf\nimport pandas as pd\nimport numpy as np\nimport shutil","metadata":{"execution":{"iopub.status.busy":"2021-11-29T16:46:04.764357Z","iopub.execute_input":"2021-11-29T16:46:04.76499Z","iopub.status.idle":"2021-11-29T16:46:08.879872Z","shell.execute_reply.started":"2021-11-29T16:46:04.764892Z","shell.execute_reply":"2021-11-29T16:46:08.879102Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"with zipfile.ZipFile(\"../input/dogs-vs-cats-redux-kernels-edition/train.zip\",\"r\") as z:\n    z.extractall(\".\")","metadata":{"execution":{"iopub.status.busy":"2021-11-29T16:46:08.881535Z","iopub.execute_input":"2021-11-29T16:46:08.881771Z","iopub.status.idle":"2021-11-29T16:46:23.629991Z","shell.execute_reply.started":"2021-11-29T16:46:08.881738Z","shell.execute_reply":"2021-11-29T16:46:23.629121Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_dir = \"./train\"\n\nfig = plt.figure(figsize=(16,8))\ni = 1\ncols = 3\nrows = 3\nfor img in os.listdir(data_dir):\n    if(i == 10):\n        break\n    img_arr = cv2.imread(os.path.join(data_dir,img))\n    fig.add_subplot(rows,cols,i)\n    plt.imshow(img_arr)\n    plt.title(img.split(sep=\".\")[0])\n    i+=1\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2021-11-29T16:46:23.631424Z","iopub.execute_input":"2021-11-29T16:46:23.631689Z","iopub.status.idle":"2021-11-29T16:46:24.897719Z","shell.execute_reply.started":"2021-11-29T16:46:23.631655Z","shell.execute_reply":"2021-11-29T16:46:24.894306Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"new_shape = 224\nnew_arr = cv2.resize(img_arr, (new_shape,new_shape))\nplt.imshow(new_arr)\nplt.show()\nnew_arr.shape","metadata":{"execution":{"iopub.status.busy":"2021-11-29T16:46:24.899625Z","iopub.execute_input":"2021-11-29T16:46:24.89986Z","iopub.status.idle":"2021-11-29T16:46:25.133252Z","shell.execute_reply.started":"2021-11-29T16:46:24.89983Z","shell.execute_reply":"2021-11-29T16:46:25.132621Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"os.mkdir('data')\nos.mkdir('./data/dogs')\nos.mkdir('./data/cats')\nos.mkdir('val')\nos.mkdir('./val/dogs')\nos.mkdir('./val/cats')\n\n\npath2d = \"./data/dogs\"\npath2c = \"./data/cats\"\npath2dval = \"./val/dogs\"\npath2cval = \"./val/cats\"","metadata":{"execution":{"iopub.status.busy":"2021-11-29T16:46:25.139702Z","iopub.execute_input":"2021-11-29T16:46:25.140192Z","iopub.status.idle":"2021-11-29T16:46:25.146227Z","shell.execute_reply.started":"2021-11-29T16:46:25.140155Z","shell.execute_reply":"2021-11-29T16:46:25.145248Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"i = 0;\nfor img in os.listdir(data_dir):\n    if(img.split(\".\")[0] == 'cat'):\n        if(i<20000):\n            shutil.move(os.path.join(data_dir,img), os.path.join(path2c,img))\n        else:\n            shutil.move(os.path.join(data_dir,img), os.path.join(path2cval,img))\n            \n    else:\n        if(i<20000):\n            shutil.move(os.path.join(data_dir,img), os.path.join(path2d,img))\n        else:\n            shutil.move(os.path.join(data_dir,img), os.path.join(path2dval,img))\n    i+=1","metadata":{"execution":{"iopub.status.busy":"2021-11-29T16:46:25.150195Z","iopub.execute_input":"2021-11-29T16:46:25.151191Z","iopub.status.idle":"2021-11-29T16:46:25.86872Z","shell.execute_reply.started":"2021-11-29T16:46:25.151149Z","shell.execute_reply":"2021-11-29T16:46:25.867961Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cats_dir = [img.split(\".\")[0] for img in os.listdir(path2c)]\ndogs_dir = [img.split(\".\")[0] for img in os.listdir(path2d)]\ncats_dir_val = [img.split(\".\")[0] for img in os.listdir(path2cval)]\ndogs_dir_val = [img.split(\".\")[0] for img in os.listdir(path2dval)]\nprint(\"cats \",cats_dir[:5],\" \",len(cats_dir))\nprint(\"dogs \",dogs_dir[:5],\" \",len(dogs_dir))\nprint(\"cats val\",cats_dir_val[:5],\" \",len(cats_dir_val))\nprint(\"dogs val\",dogs_dir_val[:5],\" \",len(dogs_dir_val))","metadata":{"execution":{"iopub.status.busy":"2021-11-28T14:13:58.167925Z","iopub.execute_input":"2021-11-28T14:13:58.168216Z","iopub.status.idle":"2021-11-28T14:13:58.199948Z","shell.execute_reply.started":"2021-11-28T14:13:58.168169Z","shell.execute_reply":"2021-11-28T14:13:58.199312Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dataset = tf.keras.preprocessing.image.ImageDataGenerator(\n    preprocessing_function = tf.keras.applications.vgg16.preprocess_input,\n    rescale=1.0/255.0,\n    horizontal_flip=True,\n).flow_from_directory(\n    './data', target_size=(new_shape, new_shape), color_mode='rgb', classes=['cats','dogs'],\n    class_mode='binary', batch_size=20, shuffle=True)\n\nvalset = tf.keras.preprocessing.image.ImageDataGenerator(\n    preprocessing_function = tf.keras.applications.vgg16.preprocess_input,\n    rescale=1.0/255.0,\n    horizontal_flip=True,\n).flow_from_directory(\n    './val', target_size=(new_shape, new_shape), color_mode='rgb', classes=['cats','dogs'],\n    class_mode='binary', batch_size=20, shuffle=True)\n\n\ndataset.class_indices\nvalset.class_indices\n","metadata":{"execution":{"iopub.status.busy":"2021-11-29T16:46:25.872965Z","iopub.execute_input":"2021-11-29T16:46:25.873538Z","iopub.status.idle":"2021-11-29T16:46:28.135975Z","shell.execute_reply.started":"2021-11-29T16:46:25.873505Z","shell.execute_reply":"2021-11-29T16:46:28.135203Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img, label = next(dataset)\n\nfig = plt.figure(figsize=(20,10))\nrows = 2\ncols = 10\ni = 1\n\nfor j in range(20):\n    fig.add_subplot(rows,cols,i)\n    plt.imshow(img[j])\n    plt.title(label[j])\n    i+=1\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2021-11-29T16:46:28.137674Z","iopub.execute_input":"2021-11-29T16:46:28.1384Z","iopub.status.idle":"2021-11-29T16:46:30.334671Z","shell.execute_reply.started":"2021-11-29T16:46:28.138355Z","shell.execute_reply":"2021-11-29T16:46:30.333666Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img, label = next(valset)\n\nfig = plt.figure(figsize=(20,10))\nrows = 2\ncols = 10\ni = 1\n\nfor j in range(20):\n    fig.add_subplot(rows,cols,i)\n    plt.imshow(img[j])\n    plt.title(label[j])\n    i+=1\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2021-11-29T16:46:30.336058Z","iopub.execute_input":"2021-11-29T16:46:30.336506Z","iopub.status.idle":"2021-11-29T16:46:32.524171Z","shell.execute_reply.started":"2021-11-29T16:46:30.336471Z","shell.execute_reply":"2021-11-29T16:46:32.523519Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPool2D\nfrom tensorflow.keras import activations\n\nmodel = tf.keras.models.Sequential()\n\nmodel.add(Conv2D(64, (3,3), activation=\"relu\" ,input_shape=(new_shape,new_shape,3),padding='same'))\nmodel.add(Conv2D(64, (3,3), activation=\"relu\",padding='same'))\nmodel.add(MaxPool2D(pool_size=(2,2),strides=2))\n\nmodel.add(Conv2D(128, (3,3), activation=\"relu\",padding='same'))\nmodel.add(Conv2D(128, (3,3), activation=\"relu\",padding='same'))\nmodel.add(MaxPool2D(pool_size=(2,2),strides=2))\n\nmodel.add(Conv2D(256, (3,3), activation=\"relu\",padding='same'))\nmodel.add(Conv2D(256, (3,3), activation=\"relu\",padding='same'))\nmodel.add(Conv2D(256, (3,3), activation=\"relu\",padding='same'))\nmodel.add(MaxPool2D(pool_size=(2,2),strides=2))\n\nmodel.add(Conv2D(512, (3,3), activation=\"relu\",padding='same'))\nmodel.add(Conv2D(512, (3,3), activation=\"relu\",padding='same'))\nmodel.add(Conv2D(512, (3,3), activation=\"relu\",padding='same'))\nmodel.add(MaxPool2D(pool_size=(2,2),strides=2))\n\nmodel.add(Conv2D(512, (3,3), activation=\"relu\",padding='same'))\nmodel.add(Conv2D(512, (3,3), activation=\"relu\",padding='same'))\nmodel.add(Conv2D(512, (3,3), activation=\"relu\",padding='same'))\nmodel.add(MaxPool2D(pool_size=(2,2),strides=2))\n\n\nmodel.add(Flatten())\nmodel.add(Dense(4096, activation=\"relu\"))\nmodel.add(Dense(4096, activation=\"relu\"))\nmodel.add(Dense(1, activation=\"sigmoid\"))\n\nmodel.compile(optimizer=tf.keras.optimizers.RMSprop(), #learning_rate=0.001 is base\n             loss=tf.keras.losses.BinaryCrossentropy(),\n             metrics=['accuracy', 'Precision', 'Recall'])","metadata":{"execution":{"iopub.status.busy":"2021-11-29T16:46:32.525394Z","iopub.execute_input":"2021-11-29T16:46:32.52649Z","iopub.status.idle":"2021-11-29T16:46:35.097543Z","shell.execute_reply.started":"2021-11-29T16:46:32.52645Z","shell.execute_reply":"2021-11-29T16:46:35.096816Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.summary()","metadata":{"execution":{"iopub.status.busy":"2021-11-29T16:46:35.099588Z","iopub.execute_input":"2021-11-29T16:46:35.100378Z","iopub.status.idle":"2021-11-29T16:46:35.11982Z","shell.execute_reply.started":"2021-11-29T16:46:35.10034Z","shell.execute_reply":"2021-11-29T16:46:35.119017Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit(dataset, epochs=40, validation_data=valset, validation_steps=20)","metadata":{"execution":{"iopub.status.busy":"2021-11-29T16:46:35.120974Z","iopub.execute_input":"2021-11-29T16:46:35.12128Z","iopub.status.idle":"2021-11-29T16:49:58.886174Z","shell.execute_reply.started":"2021-11-29T16:46:35.121244Z","shell.execute_reply":"2021-11-29T16:49:58.885387Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pd.DataFrame(history.history).plot()\npd.DataFrame(history.history['loss']).plot()\npd.DataFrame(history.history['accuracy']).plot()\npd.DataFrame(history.history['precision']).plot()\npd.DataFrame(history.history['recall']).plot()","metadata":{"execution":{"iopub.status.busy":"2021-11-29T16:49:58.88755Z","iopub.execute_input":"2021-11-29T16:49:58.887807Z","iopub.status.idle":"2021-11-29T16:50:00.108313Z","shell.execute_reply.started":"2021-11-29T16:49:58.887775Z","shell.execute_reply":"2021-11-29T16:50:00.107508Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"os.mkdir('./test')\nwith zipfile.ZipFile(\"../input/dogs-vs-cats-redux-kernels-edition/test.zip\",\"r\") as z:\n    z.extractall(\"./test\")","metadata":{"execution":{"iopub.status.busy":"2021-11-29T16:50:00.110478Z","iopub.execute_input":"2021-11-29T16:50:00.11082Z","iopub.status.idle":"2021-11-29T16:50:08.265061Z","shell.execute_reply.started":"2021-11-29T16:50:00.110782Z","shell.execute_reply":"2021-11-29T16:50:08.264261Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"testset = tf.keras.preprocessing.image.ImageDataGenerator(\n    preprocessing_function = tf.keras.applications.vgg16.preprocess_input,\n    rescale=1.0/255.0,\n).flow_from_directory(\n    './test', target_size=(new_shape, new_shape), color_mode='rgb',\n    class_mode=None, batch_size=20, shuffle=True)","metadata":{"execution":{"iopub.status.busy":"2021-11-29T16:52:02.005305Z","iopub.execute_input":"2021-11-29T16:52:02.006146Z","iopub.status.idle":"2021-11-29T16:52:02.433692Z","shell.execute_reply.started":"2021-11-29T16:52:02.006092Z","shell.execute_reply":"2021-11-29T16:52:02.43293Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predictions = model.predict(testset)","metadata":{"execution":{"iopub.status.busy":"2021-11-29T17:02:43.072959Z","iopub.execute_input":"2021-11-29T17:02:43.07322Z","iopub.status.idle":"2021-11-29T17:03:25.923104Z","shell.execute_reply.started":"2021-11-29T17:02:43.07319Z","shell.execute_reply":"2021-11-29T17:03:25.922235Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"d = pd.DataFrame(np.round(predictions))\nd.index +=1\nd.columns = ['label']\nd.index.names = ['id']\nd.to_csv('submission.csv')","metadata":{"execution":{"iopub.status.busy":"2021-11-29T17:13:42.047128Z","iopub.execute_input":"2021-11-29T17:13:42.048028Z","iopub.status.idle":"2021-11-29T17:13:42.097025Z","shell.execute_reply.started":"2021-11-29T17:13:42.047986Z","shell.execute_reply":"2021-11-29T17:13:42.09627Z"},"trusted":true},"execution_count":null,"outputs":[]}]}