{"cells":[{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"#ls /kaggle/input/dogs-vs-cats-redux-kernels-edition/train ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#ls /kaggle/input/dogs-vs-cats-redux-kernels-edition/test","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!mkdir /kaggle/output\n!mkdir /kaggle/output/train \n!mkdir /kaggle/output/train/cat\n!mkdir /kaggle/output/train/dog","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import shutil\nimport os","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_dir = '/kaggle/output/train'\ntrain_dir_cat = os.path.join(train_dir, 'cat')\ntrain_dir_dog = os.path.join(train_dir, 'dog')\nfor dirname, _, filenames in os.walk('/kaggle/input/dogs-vs-cats-redux-kernels-edition/train'):\n    for filename in filenames:\n        if 'cat.' in filename:\n            shutil.copy(os.path.join(dirname, filename), os.path.join(dirname, train_dir_cat))\n        if 'dog.' in filename:\n            shutil.copy(os.path.join(dirname, filename), os.path.join(dirname, train_dir_dog))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#!ls /kaggle/output/train/cat","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import keras\nfrom keras.preprocessing.image import ImageDataGenerator","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Data Generator\ntrain_generator = ImageDataGenerator(\n    rotation_range=30.0, \n    width_shift_range=0.1,\n    height_shift_range=0.1, \n    brightness_range=None, \n    shear_range=0.1,\n    zoom_range=0.2, \n    fill_mode='nearest', \n    horizontal_flip=True, \n    vertical_flip=True,\n    validation_split=0.1\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_iter = train_generator.flow_from_directory(\n    train_dir,\n    classes=['cat', 'dog'], \n    class_mode='categorical', \n    target_size=(331, 331),\n    batch_size=64,\n    subset='training'\n)\nvalid_iter = train_generator.flow_from_directory(\n    train_dir,\n    classes=['cat', 'dog'], \n    class_mode='categorical', \n    target_size=(331, 331),\n    batch_size=64,\n    subset='validation'\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.applications import NASNetLarge, ResNet50\nfrom keras.layers import Dense, GlobalAveragePooling2D\nfrom keras.models import Model","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"objective='categorical_crossentropy'\nmetrics=['accuracy']\noptimizer='adam'\nbase_model = ResNet50(\n    weights=\"imagenet\",\n    include_top=False,\n    pooling=None\n)\nfor layer in base_model.layers:\n    layer.trainable = False\nx = base_model.output\nx = GlobalAveragePooling2D()(x)\nx = Dense(128, activation='relu')(x)\nx = Dense(64, activation='relu')(x)\npredictions = Dense(2, activation='softmax')(x)\nmodel = Model(inputs=base_model.input, outputs=predictions)\nmodel.compile(loss=objective, optimizer=optimizer, metrics=metrics)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.callbacks import ReduceLROnPlateau, EarlyStopping\nreduce_lr = ReduceLROnPlateau(monitor='val_acc', factor=0.2, patience=2, verbose=0, mode='auto', cooldown=0, min_lr=0)\nearly_stop = EarlyStopping(monitor='val_acc', patience=3, verbose=0, mode='auto')\nhistory = model.fit_generator(\n    train_iter,\n    steps_per_epoch=len(train_iter),\n    validation_data=valid_iter,\n    validation_steps=len(valid_iter),\n    epochs=20,\n    verbose=1,\n    shuffle=True,\n    callbacks=[reduce_lr, early_stop]\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from PIL import Image\nimport numpy as np\nimport pandas as pd\nID = []\nPrediction = []\n\nfor dirname, _, filenames in os.walk('/kaggle/input/dogs-vs-cats-redux-kernels-edition/test'):\n    for filename in filenames:\n        # print('Processing: ',os.path.join(dirname, filename))\n        idx = filename.split('.jpg')[0]\n        ID.append(idx)\n        img = Image.open(os.path.join(dirname, filename))\n        img = img.resize((331,331))\n        img = img.convert('RGB')\n        img = np.array(img)\n        img = img[np.newaxis, :, :, :]\n        pred = model.predict(img)[0][1]\n        Prediction.append(pred)\n        ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(len(ID), len(Prediction))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"Result = pd.DataFrame({'id':ID,'label':Prediction})","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"Result.to_csv('submission_NASNetLarge.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":1}