{"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\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 read-only \"../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# You can write up to 5GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import os \nimport shutil\nimport random\nimport zipfile","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"to_extract = ['train', 'test1']\n\nfor file in to_extract:\n    with zipfile.ZipFile(\"/kaggle/input/dogs-vs-cats/\"+file+\".zip\", 'r') as z:\n        z.extractall(\".\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(len(os.listdir('train/')))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"os.mkdir('train/cats')\nos.mkdir('train/dogs')\nos.mkdir('test1/cats')\nos.mkdir('test1/dogs')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"file_list = os.listdir(\"train/\")\nfor file_name in file_list:\n    if(file_name.startswith(\"cat\")):\n        shutil.move(\"train/\"+file_name, \"train/cats\")\n    elif(file_name.startswith(\"dog\")):\n        shutil.move(\"train/\"+file_name, \"train/dogs\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(len(os.listdir('train/cats/')))\nprint(len(os.listdir('train/dogs')))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"os.mkdir('train1/')\nos.mkdir('train1/cats')\nos.mkdir('train1/dogs')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def split_data(SOURCE, TRAINING, TESTING, SPLIT_SIZE):    \n    dataset = []\n    for unitData in os.listdir(SOURCE):\n        data = SOURCE + unitData\n        if(os.path.getsize(data) > 0):\n            dataset.append(unitData)\n        else:\n            print(\"skipped\" + unitData)\n    train_data_length = int(len(dataset) * split_size)\n    test_data_length = int(len(dataset) - train_data_length)\n    shuffled_set = random.sample(dataset, len(dataset))\n    train_set = shuffled_set[0:train_data_length]\n    test_set = shuffled_set[-test_data_length:]\n    \n    for unitData in train_set:\n        temp_train_data = SOURCE + unitData\n        final_train_data = TRAINING + unitData\n        shutil.copyfile(temp_train_data, final_train_data)\n    \n    for unitData in test_set:\n        temp_test_data = SOURCE + unitData\n        final_test_data = TESTING + unitData\n        shutil.copyfile(temp_train_data, final_test_data)\n\nCAT_SOURCE_DIR = \"train/cats/\"\nTRAINING_CATS_DIR = \"train1/cats/\"\nTESTING_CATS_DIR = \"test1/cats/\"\nDOG_SOURCE_DIR = \"train/dogs/\"\nTRAINING_DOGS_DIR = \"train1/dogs/\"\nTESTING_DOGS_DIR = \"test1/dogs/\"\n\nsplit_size = .9\nsplit_data(CAT_SOURCE_DIR, TRAINING_CATS_DIR, TESTING_CATS_DIR, split_size)\nsplit_data(DOG_SOURCE_DIR, TRAINING_DOGS_DIR, TESTING_DOGS_DIR, split_size)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(len(os.listdir('train/cats/')))\nprint(len(os.listdir('train/dogs/')))\nprint(len(os.listdir('train1/cats/')))\nprint(len(os.listdir('train1/dogs/')))\nprint(len(os.listdir('test1/cats/')))\nprint(len(os.listdir('test1/cats/')))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import tensorflow as tf\nfrom keras.layers import Dense, Flatten, Convolution2D, MaxPooling2D\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.models import Sequential\nfrom keras.optimizers import RMSprop\nfrom keras.preprocessing import image\nimport numpy as np\nfrom PIL import Image","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = Sequential([\n    Convolution2D(16, (3, 3), activation='relu', input_shape=(300, 300, 3)),\n    MaxPooling2D(2, 2),\n    \n    Convolution2D(32, (3, 3), activation='relu'),\n    MaxPooling2D(2, 2),\n    \n    Convolution2D(64, (3, 3), activation='relu'),\n    MaxPooling2D(2, 2),\n    \n    Flatten(),\n    Dense(512, activation='relu'),\n    Dense(1, activation='sigmoid')\n])\n\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(optimizer=RMSprop(lr=0.001), loss='binary_crossentropy', metrics=['acc'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class cust_callback(tf.keras.callbacks.Callback):\n    def on_epoch_end(self, epoch, logs={}):\n        if(logs.get('acc') > .98 and logs.get('val_acc') > .98):\n            print(\"Training stopped, reached max accuracy\")\n            self.model.stop_training=True","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"callback = cust_callback()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_dir = 'train1/'\ntest_dir = 'test1/'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_datagen = ImageDataGenerator(rescale=1./255)\ntrain_generator = train_datagen.flow_from_directory(train_dir, \n                                                    target_size=(300, 300), \n                                                    batch_size = 250,\n                                                    class_mode = 'binary'\n                                                   )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_datagen = ImageDataGenerator(rescale=1./255)\ntest_generator = test_datagen.flow_from_directory(test_dir, \n                                                    target_size=(300, 300), \n                                                    batch_size = 250,\n                                                    class_mode = 'binary'\n                                                   )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"history = model.fit_generator(test_generator, steps_per_epoch=45, epochs=10, validation_data=test_generator,callbacks=[callback], verbose=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.save_weights('cats_dogs_model.h5')\nmodel.save('c&dmodel.h5')\n ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","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}