{"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 numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport zipfile\nimport tensorflow as tf\nimport matplotlib.pyplot as plt\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"with zipfile.ZipFile(\"/kaggle/input/dogs-vs-cats/train.zip\",\"r\") as zip_ref:\n    zip_ref.extractall(\"dogs-vs-cats\")\n    \nwith zipfile.ZipFile(\"/kaggle/input/dogs-vs-cats/test1.zip\",\"r\") as zip_ref:\n    zip_ref.extractall(\"dogs-vs-cats\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"files = os.listdir('/kaggle/working/dogs-vs-cats/train')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"category = []\nfor file in files:\n    if file.split('.')[0] == 'dog':\n        category.append('dog')\n    else:\n        category.append('cat')\n    \ntrain_df = pd.DataFrame({'file': files,\n                        'label': category})","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.label.value_counts()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img_generator_train = tf.keras.preprocessing.image.ImageDataGenerator(rescale = 1./255, validation_split = 0.3,\n                                                                     rotation_range = 20, width_shift_range = 0.1,\n                                                                     height_shift_range = 0.1, horizontal_flip = True\n                                                                     )\nimg_generator_test = tf.keras.preprocessing.image.ImageDataGenerator(rescale = 1./255)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_set = img_generator_train.flow_from_dataframe(dataframe=train_df, directory=\"/kaggle/working/dogs-vs-cats/train\",\n                                                    x_col=\"file\", y_col='label', batch_size=32, class_mode = 'binary',\n                                                    seed=42, shuffle=False, target_size=(256,256), subset=\"training\")\nval_set = img_generator_train.flow_from_dataframe(dataframe=train_df, directory=\"/kaggle/working/dogs-vs-cats/train\",\n                                                    x_col=\"file\", y_col='label', batch_size=32, class_mode = 'binary',\n                                                    seed=42, shuffle=False, target_size=(256,256), subset=\"validation\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def plotImages(images_arr):\n  fig, axes = plt.subplots(1, 5, figsize=(20,20))\n  axes = axes.flatten()\n  for img, ax in zip(images_arr, axes):\n    ax.imshow(img)\n  plt.tight_layout()\n  plt.show()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plotImages([train_set[0][0][1] for i in range(0,5)])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df = pd.DataFrame({'file':os.listdir('/kaggle/working/dogs-vs-cats/test1')})\ntest = img_generator_test.flow_from_dataframe(dataframe=test_df, directory= '/kaggle/working/dogs-vs-cats/test1',\n                                              x_col=\"file\", y_col=None, target_size=(256, 256), color_mode='rgb', \n                                              batch_size=32, class_mode=None)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = tf.keras.Sequential([\n#    tf.keras.layers.Conv2D(64,3,activation = 'relu'),\n#    tf.keras.layers.Conv2D(64,3,activation = 'relu'),\n#    tf.keras.layers.MaxPool2D(3),\n    tf.keras.layers.Conv2D(32,3,activation = 'relu'),\n    tf.keras.layers.Conv2D(32,3,activation = 'relu'),\n    tf.keras.layers.MaxPool2D(3),\n    tf.keras.layers.Conv2D(16,3,activation = 'relu'),\n    tf.keras.layers.Conv2D(16,3,activation = 'relu'),\n    tf.keras.layers.MaxPool2D(3),\n    tf.keras.layers.Flatten(),\n    tf.keras.layers.Dense(64,activation = 'relu'),\n    tf.keras.layers.Dropout(0.2),\n    tf.keras.layers.Dense(32,activation = 'relu'),\n    tf.keras.layers.Dropout(0.2),\n    tf.keras.layers.Dense(1, activation = 'sigmoid'),\n])\nmodel.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics = ['accuracy'])\nhistory = model.fit(train_set,epochs = 15, batch_size = 200, validation_data = val_set)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize = (10,6))\nplt.plot(np.arange(1,16), history.history['accuracy'])\nplt.plot(np.arange(1,16), history.history['val_accuracy'])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predict = model.predict(test)\npredict = predict.reshape(-1)\npredict[predict > 0.5] = 1\npredict[predict < 0.5] = 0","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"subm = pd.DataFrame({'id': np.arange(1,predict.shape[0]+1), 'label': predict.astype(int)})\nsubm.to_csv('submission.csv', index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}