{"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":{"trusted":true},"cell_type":"code","source":"import zipfile\n\nzip = zipfile.ZipFile('../input/dogs-vs-cats/train.zip')\nzip.extractall('/kaggle/temp')\ntestzip = zipfile.ZipFile('../input/dogs-vs-cats/test1.zip')\ntestzip.extractall('/kaggle/temp')\nlen(os.listdir('/kaggle/temp/train')), len(os.listdir('/kaggle/temp/test1'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from tensorflow.keras.applications.xception import Xception\nfrom tensorflow.keras.applications.xception import preprocess_input\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense, Flatten, GlobalAveragePooling2D\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nimport tensorflow.keras.preprocessing.image as image\nimport matplotlib.pyplot as plt\nimport tensorflow as tf","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_dir = '/kaggle/temp/train'\ntest_dir = '/kaggle/temp/test1'\n\ntrain_dogs_dir = os.path.join(train_dir, 'dogs')\ntrain_cats_dir = os.path.join(train_dir, 'cats')\nif not os.path.exists(train_dogs_dir):\n    os.mkdir(train_dogs_dir)\nif not os.path.exists(train_cats_dir):\n    os.mkdir(train_cats_dir)\n\nfilenames = [name for name in os.listdir(train_dir) if name.endswith('.jpg')]\nfor filename in filenames:\n    category = 'dogs' if filename.split('.')[0] == 'dog' else 'cats'\n    os.rename(os.path.join(train_dir, filename), os.path.join(train_dir, category, filename))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"my_model = Sequential()\nmy_model.add(Xception(include_top=False, pooling='avg'))\n# my_model.add(ResNet50(include_top=False, pooling='avg'))\nmy_model.add(Dense(2, activation='softmax'))\nmy_model.layers[0].trainable = False","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"my_model.compile(optimizer='sgd', loss='categorical_crossentropy', metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"data_generator = ImageDataGenerator(preprocessing_function=preprocess_input, validation_split=0.2)\n# data_generator = ImageDataGenerator(preprocessing_function=preprocess_input, validation_split=0.2)\n\ntrain_generator = data_generator.flow_from_directory(\n        train_dir,\n        subset='training',\n        class_mode='categorical')\n\nvalidation_generator = data_generator.flow_from_directory(\n        train_dir,\n        subset='validation',\n        class_mode='categorical')\n\nmy_model.fit_generator(train_generator, steps_per_epoch=3, epochs=7, validation_data=validation_generator, validation_steps=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"filenames = os.listdir(test_dir)\n\ndf = pd.DataFrame({'filename': filenames})\n\ntest_datagen = ImageDataGenerator(preprocessing_function=preprocess_input)\n\ntest_generator = test_datagen.flow_from_dataframe(df, directory=test_dir, x_col='filename', y_col=None, class_mode=None, shuffle=False)\n\nx = test_generator.next()\n\n# plt.figure(figsize=(20, 10))\n# for i in range(0, 10):\n#     plt.subplot(2, 5, i+1)\n#     plt.imshow(x[i])\n# plt.show()\n\npreds = my_model.predict_generator(test_generator)\n\nscore = np.argmax(preds, axis=1)\n\nid = df['filename'].str.split('.').str[0]\ndf['id'] = id.astype('int')\ndf['label'] = score\n\ndf = df.drop(['filename'], axis=1)\ndf = df.sort_values('id')\n\ndf.to_csv('/kaggle/working/submission.csv', index=False)","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}