{
  "cells": [
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "6b6f3fc8-21f0-8ef2-8873-e040b5481084"
      },
      "outputs": [],
      "source": [
        "import os,cv2,random\n",
        "import numpy as np\n",
        "import pandas as pd\n",
        "\n",
        "import matplotlib.pyplot as plt\n",
        "from matplotlib import ticker\n",
        "import seaborn as sns\n",
        "\n",
        "from keras.models import Sequential\n",
        "from keras.layers import Input,Dropout,Flatten,Convolution2D,MaxPooling2D,Dense,Activation\n",
        "from keras.optimizers import RMSprop\n",
        "from keras.callbacks import ModelCheckpoint,Callback,EarlyStopping"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "57db63c0-b6e7-dc96-8ef1-a8f522894011"
      },
      "outputs": [],
      "source": [
        "TRAIN_DIR='../input/train/'\n",
        "TEST_DIR='../input/test/'\n",
        "\n",
        "ROWS=64\n",
        "COLS=64\n",
        "CHANNELS=3\n",
        "\n",
        "train_images=[TRAIN_DIR+i for i in os.listdir(TRAIN_DIR)]\n",
        "train_dogs=[TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'dog' in i]\n",
        "train_cats=[TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'cat' in i]\n",
        "test_images=[TEST_DIR+i for i in os.listdir(TEST_DIR)]\n",
        "\n",
        "train_images=train_dogs[:1000]+train_cats[:1000]\n",
        "random.shuffle(train_images)\n",
        "test_images=test_images[:25]\n",
        "\n",
        "def read_image(file_path):\n",
        "    img=cv2.imread(file_path,cv2.IMREAD_COLOR)\n",
        "    return cv2.resize(img,(ROWS,COLS),interpolation=cv2.INTER_CUBIC)\n",
        "\n",
        "def prep_data(images):\n",
        "    count=len(images)\n",
        "    data=np.ndarray((count,CHANNELS,ROWS,COLS),dtype=np.uint8)\n",
        "    for i,image_file in enumerate(images):\n",
        "        image=read_image(image_file)\n",
        "        data[i]=image.T\n",
        "        if i%250 == 0:\n",
        "            print('Processed {} of {}'.format(i,count))\n",
        "    return data\n",
        "train=prep_data(train_images)\n",
        "test=prep_data(test_images)\n",
        "\n",
        "print('Train shape:{}'.format(train.shape))\n",
        "print('Test shape:{}'.format(test.shape))\n",
        "     \n",
        "        \n",
        "    \n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "58991a56-74d2-3807-7090-d460c6e3cdb5"
      },
      "outputs": [],
      "source": [
        "labels=[]\n",
        "for i in train_images:\n",
        "    if 'dog' in i:\n",
        "        labels.append(1)\n",
        "    else:\n",
        "        labels.append(0)\n",
        "sns.countplot(labels)\n",
        "sns.plt.title('Cats and Dogs')"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "7e39a4bb-2d63-1671-faa9-e79ef788a267"
      },
      "outputs": [],
      "source": [
        "def show_cats_and_dogs(idx):\n",
        "    cat=read_image(train_cats[idx])\n",
        "    dog=read_image(train_dogs[idx])\n",
        "    pair=np.concatenate((cat,dog),axis=1)\n",
        "    plt.figure(figsize=(10,5))\n",
        "    plt.imshow(pair)\n",
        "    plt.show()\n",
        "for idx in range(0,5):\n",
        "    show_cats_and_dogs(idx)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "a8b2f021-ea35-624a-adfb-23d4167c79eb"
      },
      "outputs": [],
      "source": [
        "dog_avg = np.array([dog[0].T for i, dog in enumerate(train) if labels[i]==1]).mean(axis=0)\n",
        "plt.imshow(dog_avg)\n",
        "plt.title('Your Average Dog')"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "fc500505-3d90-9b64-89f3-91beae3f861c"
      },
      "outputs": [],
      "source": [
        "cat_avg = np.array([cat[0].T for i, cat in enumerate(train) if labels[i]==0]).mean(axis=0)\n",
        "plt.imshow(cat_avg)\n",
        "plt.title('Your Average Cat')"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "b6a89abd-2483-e4bf-f24b-168610bc308f"
      },
      "outputs": [],
      "source": [
        "optimizer=RMSprop(lr=1e-4)\n",
        "objective='binary_crossentropy'\n",
        "\n",
        "def catdog():\n",
        "    model=Sequential()\n",
        "    \n",
        "    model.add(Convolution2D(32,3,3,border_mode='same',input_shape=(3,ROWS,COLS),activation='relu'))\n",
        "    model.add(Convolution2D(32,3,3,border_mode='same',activation='relu'))\n",
        "    model.add(MaxPooling2D(pool_size=(2,2)))\n",
        "    \n",
        "    \n",
        "    \n",
        "    model.add(Flatten())\n",
        "    model.add(Dense(32, activation='relu'))\n",
        "    model.add(Dropout(0.5))\n",
        "    \n",
        "    model.add(Dense(32, activation='relu'))\n",
        "    model.add(Dropout(0.5))\n",
        "\n",
        "    model.add(Dense(1))\n",
        "    model.add(Activation('sigmoid'))\n",
        "\n",
        "    model.compile(loss=objective, optimizer=optimizer, metrics=['accuracy'])\n",
        "    return model\n",
        "\n",
        "model = catdog()\n",
        "    \n",
        "    "
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "569950f3-e012-0819-53ef-5d7c9ee2dd7a"
      },
      "outputs": [],
      "source": ""
    }
  ],
  "metadata": {
    "_change_revision": 0,
    "_is_fork": false,
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.6.0"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}