{"cells":[{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import os\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom sklearn.model_selection import train_test_split\nfrom tensorflow.keras.applications import VGG16\nfrom tensorflow.keras import models, layers, optimizers\nfrom tensorflow.keras import callbacks\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"len(os.listdir('../input/dogs-vs-cats/train/train'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_dir = \"../input/dogs-vs-cats/train/train\"\ntest_dir = \"../input/dogs-vs-cats/test1/test1\"\n\ntrain_images = os.listdir(train_dir)\ntrain_labels = []\nfor image in train_images:\n    label = image.split('.')[0]\n    train_labels.append(label)\ndf = pd.DataFrame({\n    'id': train_images,\n    'label': train_labels\n})","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_set, val_set = train_test_split(df, test_size=0.2)\n\ntrain_gen = ImageDataGenerator(rescale=1./255,\n                               horizontal_flip=True,\n                               rotation_range=45,\n                               zoom_range=0.2,\n                               shear_range=0.2,\n                               height_shift_range=0.2,\n                               width_shift_range=0.2,\n                               fill_mode='nearest')\nval_gen = ImageDataGenerator(rescale=1./255)\n\ntrain_data = train_gen.flow_from_dataframe(\n    train_set, \n    train_dir, \n    x_col='id',\n    y_col='label',\n    target_size=(150, 150),\n    class_mode='binary',\n    batch_size=100)\n\nval_data = val_gen.flow_from_dataframe(\n    val_set, \n    train_dir, \n    x_col='id',\n    y_col='label',\n    target_size=(150, 150),\n    class_mode='binary',\n    batch_size=100)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = models.Sequential([layers.Conv2D(16, (3, 3), activation='relu', input_shape=(150, 150, 3)),\n                           layers.Conv2D(16, (3, 3), activation='relu'),\n                           layers.BatchNormalization(),\n                           layers.MaxPooling2D(2, 2),\n                           \n                           layers.Conv2D(32, (3, 3), activation='relu'),\n                           layers.Conv2D(32, (3, 3), activation='relu'),\n                           layers.BatchNormalization(),\n                           layers.MaxPooling2D(2, 2),\n                           \n                           layers.Dropout(0.2),\n                           \n                           layers.Conv2D(64, (3, 3), activation='relu'),\n                           layers.Conv2D(64, (3, 3), activation='relu'),\n                           layers.BatchNormalization(),\n                           layers.MaxPooling2D(2, 2),\n                           \n                           layers.Flatten(),\n                           layers.Dense(256, activation='relu'),\n                           layers.Dense(1, activation='sigmoid')])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(loss='binary_crossentropy',\n             optimizer=optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999),\n             metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"history = model.fit_generator(train_data,\n                             steps_per_epoch=200,\n                             epochs=10,\n                             validation_data=val_data,\n                             validation_steps=50)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.save('model.h5')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def plot_history(history):\n    acc = history.history['accuracy']\n    val_acc = history.history['val_accuracy']\n    loss = history.history['loss']\n    val_loss = history.history['val_loss']\n    epochs = range(1, len(acc)+1)\n    \n    plt.plot(epochs, acc, 'b--', label='acc')\n    plt.plot(epochs, val_acc, 'r--', label='val_acc')\n    plt.xlabel('epochs')\n    plt.ylabel('accuracy')\n    plt.legend()\n    plt.grid()\n    \n    plt.figure()\n    plt.plot(epochs, loss, 'b--', label='loss')\n    plt.plot(epochs, val_loss, 'r--', label='val_loss')\n    plt.xlabel('epochs')\n    plt.ylabel('accuracy')\n    plt.legend()\n    plt.grid()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_images = os.listdir(test_dir)\nsubmission = pd.DataFrame({\n    'id': test_images\n})\n\n\ntest_gen = ImageDataGenerator(rescale=1./255)\n\ntest_data = test_gen.flow_from_dataframe(\n    submission, \n    test_dir, \n    x_col='id',\n    y_col=None,\n    class_mode=None,\n    target_size=(150, 150),\n    batch_size=100,\n    shuffle=False\n)\n\npredictions = model.predict_generator(test_data, steps=125)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"predictions = [1 if pred > 0.5 else 0 for pred in predictions]\n\nsubmission['label'] = predictions\n\nlabel_maps = dict((i, j) for j, i in train_data.class_indices.items())\nsubmission['label'] = submission['label'].replace(label_maps)\n\n\nsubmission['label'] = submission['label'].replace({ 'dog': 1, 'cat': 0 })\n\nsubmission.to_csv('submission.csv', index=False)\n\nsubmission.head()","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":1}