{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"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 in \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 \"../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# Any results you write to the current directory are saved as output.","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import zipfile\npath = \"/kaggle/input/dogs-vs-cats/train.zip\"\nzip_ref = zipfile.ZipFile(path, 'r')\nzip_ref.extractall(\"/kaggle/working/\")\npath = \"/kaggle/input/dogs-vs-cats/test1.zip\"\nzip_ref = zipfile.ZipFile(path, 'r')\nzip_ref.extractall(\"/kaggle/working/\")\nzip_ref.close()\n","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"","_uuid":"","trusted":true},"cell_type":"markdown","source":"import pandas as pd\nsampleSubmission = pd.read_csv(\"../input/dogs-vs-cats/sampleSubmission.csv\")\nprint(sampleSubmission)"},{"metadata":{"trusted":true},"cell_type":"code","source":"import os\ndirname = '/kaggle/working/test1/dog'\nos.mkdir(dirname)\ndirname = '/kaggle/working/test1/cat'\nos.mkdir(dirname)\ndirname = '/kaggle/working/train/dog'\nos.mkdir(dirname)\ndirname = '/kaggle/working/train/cat'\nos.mkdir(dirname)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"dirname = '/kaggle/working/validation'\nos.mkdir(dirname)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"dirname = '/kaggle/working/validation/cat'\nos.mkdir(dirname)\ndirname = '/kaggle/working/validation/dog'\nos.mkdir(dirname)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"for dirname, _, filenames in os.walk('/kaggle/working/test1'):\n    print(filenames)"},{"metadata":{"trusted":true},"cell_type":"code","source":"import shutil\n\nfor dirname, _, filenames in os.walk('/kaggle/working/train'):\n    for filename in filenames:\n        if(filename[:3] == 'dog'):\n            dog_path = os.path.join(dirname, filename)\n            shutil.move(dog_path, \"/kaggle/working/train/dog/\" + filename)\n        if(filename[:3] == 'cat'):\n            cat_path = os.path.join(dirname, filename)\n            shutil.move(cat_path, \"/kaggle/working/train/cat/\" + filename)\n\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import shutil\nfor dirname, _, filenames in os.walk('/kaggle/working/train/cat/'):\n    i = 0\n    for filename in filenames:\n        if(i < 1000):\n            dog_path = os.path.join(dirname, filename)\n            shutil.move(dog_path, \"/kaggle/working/validation/cat/\" + filename)\n            i = i + 1\n            \nfor dirname, _, filenames in os.walk('/kaggle/working/train/dog/'):\n    i = 0\n    for filename in filenames:\n        if(i < 1000):\n            dog_path = os.path.join(dirname, filename)\n            shutil.move(dog_path, \"/kaggle/working/validation/dog/\" + filename)\n            i = i + 1","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"for dirname, _, filenames in os.walk('/kaggle/working/train/cat/'):\n    print(filenames)\n"},{"metadata":{},"cell_type":"markdown","source":"**Begin Algorithm**"},{"metadata":{"trusted":true},"cell_type":"code","source":"import tensorflow as tf\nimport os\nimport zipfile\nfrom os import path, getcwd, chdir","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.utils import to_categorical\nfrom keras.models import Sequential\nfrom keras.layers import Conv2D\nfrom keras.layers import MaxPooling2D\nfrom keras.layers import Dense\nfrom keras.layers import Flatten\nfrom keras.layers import Dropout\nfrom keras.layers import Activation\n\nfrom keras.optimizers import SGD\n\ninput_shape = (200, 200, 3)\ndef train_model():\n    IMAGE_SIZE = 200\n    model = Sequential()\n\n    model.add(Conv2D(32, 3, 3, border_mode='same', input_shape=input_shape, activation='relu'))\n    model.add(Conv2D(32, 3, 3, border_mode='same', activation='relu'))\n    model.add(MaxPooling2D(pool_size=(2, 2)))\n\n    model.add(Conv2D(64, 3, 3, border_mode='same', activation='relu'))\n    model.add(Conv2D(64, 3, 3, border_mode='same', activation='relu'))\n    model.add(MaxPooling2D(pool_size=(2, 2)))\n\n    model.add(Conv2D(128, 3, 3, border_mode='same', activation='relu'))\n    model.add(Conv2D(128, 3, 3, border_mode='same', activation='relu'))\n    model.add(MaxPooling2D(pool_size=(2, 2)))\n\n    model.add(Conv2D(256, 3, 3, border_mode='same', activation='relu'))\n    model.add(Conv2D(256, 3, 3, border_mode='same', activation='relu'))\n    model.add(MaxPooling2D(pool_size=(2, 2)))\n\n    model.add(Flatten())\n    model.add(Dense(256, activation='relu'))\n    model.add(Dropout(0.5))\n\n    model.add(Dense(256, activation='relu'))\n    model.add(Dropout(0.5))\n\n    model.add(Dense(1))\n    model.add(Activation('sigmoid'))\n    \n    from tensorflow.keras.optimizers import RMSprop\n    model.compile(loss='binary_crossentropy', optimizer=RMSprop(lr=0.0001), metrics=['accuracy'])        \n    from tensorflow.keras.preprocessing.image import ImageDataGenerator\n\n    train_datagen = ImageDataGenerator(rescale=1/255)\n    validation_generator = ImageDataGenerator(rescale=1/255)\n\n    train_generator = train_datagen.flow_from_directory(\n        \"/kaggle/working/train/\",\n        target_size=(IMAGE_SIZE, IMAGE_SIZE),\n        batch_size=250,\n        class_mode='binary'\n    )\n    \n    validation_generator = train_datagen.flow_from_directory(\n        \"/kaggle/working/validation/\",\n        target_size=(IMAGE_SIZE, IMAGE_SIZE),\n        batch_size=50,\n        class_mode='binary'\n    )\n\n    history = model.fit_generator(\n         train_generator,\n         epochs=100,\n         #steps_per_epoch=10,\n         validation_data=validation_generator,\n         verbose=1\n    )\n    \n    model.save(\"model_loc.h5\")\n    return history.history['accuracy'][-1]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_model()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}