{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"!unzip ../input/dogs-vs-cats/train.zip\n!unzip ../input/dogs-vs-cats/test1.zip\n\n!mkdir /kaggle/working/train/cats\n!mkdir /kaggle/working/train/dogs","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import os\nimport shutil\nimport numpy as np\nfrom glob import glob\nimport matplotlib.pyplot as plt\n\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras.optimizers import Adam\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def sort_files(path):\n    \n    dset_list = glob(path+'/*')\n    \n    for file_name in dset_list:\n        \n        if 'cat' in file_name:\n            shutil.move(file_name, os.path.join(path, 'cats'))\n        else:\n            shutil.move(file_name, os.path.join(path, 'dogs'))\n            \n    return","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true,"collapsed":true},"cell_type":"code","source":"train_dset_path = '/kaggle/working/train'\ntest_dset_path = '/kaggle/working/test1'\n\nsort_files(train_dset_path)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"data_loader = ImageDataGenerator(validation_split = 0.2, \n                                 rescale=1./255.,\n                                 shear_range=0.2,\n                                 rotation_range=40,\n                                 width_shift_range=0.2,\n                                 height_shift_range=0.2 )\n\ntrn_loader = data_loader.flow_from_directory(train_dset_path,\n                                             target_size=(128,128),\n                                             class_mode='binary',\n                                             subset = 'training',\n                                             batch_size=32)\n\nval_loader = data_loader.flow_from_directory(train_dset_path,\n                                             target_size=(128,128),\n                                             class_mode='binary',\n                                             subset = 'validation',\n                                             batch_size=32)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = keras.models.Sequential([keras.layers.Conv2D(16, (5,5), strides=2, activation='relu', \n                                                     input_shape=(128,128,3)),\n                                 keras.layers.MaxPool2D(2,2),\n                                 keras.layers.Conv2D(32, (3,3), activation='relu'),\n                                 keras.layers.MaxPool2D(2,2),\n                                 keras.layers.Conv2D(64, (3,3), activation='relu'),\n                                 keras.layers.MaxPool2D(2,2),\n                                 keras.layers.Flatten(),\n                                 keras.layers.Dense(256, activation='relu'),\n                                 keras.layers.Dense(1, activation='sigmoid') ])\n\nmodel.compile(  optimizer=Adam(),\n                loss='binary_crossentropy',\n                metrics=['acc'] )\n\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class AccChk(keras.callbacks.Callback):\n    \n    def on_epoch_end(self, epoch, logs={}):\n        \n        if logs.get('acc') > 0.98:\n            print('Reached 98% accuracy')\n            self.model.stop_training = True","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"chk = AccChk()\n\nmodel.fit_generator(  loader,\n                      epochs=100,\n                      verbose=1,\n                      validation_data=val_loader,\n                      callbacks=[chk] )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"os.listdir('./test1/')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"data_loader = ImageDataGenerator(rescale=1./255.)\n\ntest_loader = data_loader.flow_from_directory('./',\n                                              target_size=(128,128),\n                                              classes=['test'],                                              \n                                              batch_size=32 )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.predict()","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}