{"cells":[{"cell_type":"markdown","metadata":{"_cell_guid":"a3fab71e-fa93-be9a-de22-1b97d0d4b16a"},"source":""},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"1426947b-0c1e-62ca-ac7e-33ef62623ccd"},"outputs":[],"source":"import os, cv2, random, csv\nimport numpy as np\nimport pandas as pd\n\nimport matplotlib.pyplot as plt\nfrom matplotlib import ticker\nimport seaborn as sns\n%matplotlib inline \n\nfrom keras.models import Sequential\nfrom keras.layers import Input, Dropout, Flatten, Convolution2D, MaxPooling2D, Dense, Activation\nfrom keras.optimizers import RMSprop\nfrom keras.callbacks import ModelCheckpoint, Callback, EarlyStopping\nfrom keras.utils import np_utils"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"aec98ca3-f5d2-b0a5-caf9-faf31b6493ad"},"outputs":[],"source":"TRAIN_DIR = '../input/train/'\nTEST_DIR = '../input/test/'\n\nROWS = 32\nCOLS = 32\nCHANNELS = 1\n\ntrain_images = [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR)] # use this for full dataset\ntrain_dogs =   [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'dog' in i]\ntrain_cats =   [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'cat' in i]\ntest_images =  [TEST_DIR+i for i in os.listdir(TEST_DIR)]\n\ndef read_image(file_path):\n    img = cv2.imread(file_path, cv2.IMREAD_GRAYSCALE) #cv2.IMREAD_GRAYSCALE\n    return cv2.resize(img, (ROWS, COLS), interpolation=cv2.INTER_CUBIC)\n\n\ndef prep_data(images):\n    count = len(images)\n    data = np.ndarray((count, CHANNELS, ROWS, COLS), dtype=np.uint8)\n\n    for i, image_file in enumerate(images):\n        image = read_image(image_file)\n        data[i] = image.T\n        if i%250 == 0: print('Processed {} of {}'.format(i, count))\n    \n    return data\n\ntrain = prep_data(train_images)\ntest = prep_data(test_images)\n\nprint(\"Train shape: {}\".format(train.shape))\nprint(\"Test shape: {}\".format(test.shape))\n\nlabels = []\nfor i in train_images:\n    if 'dog' in i:\n        labels.append(1)\n    else:\n        labels.append(0)\n        \ntrain = train.reshape(-1, 32,32,1)\ntest = test.reshape(-1, 32,32,1)\nX_train = train.astype('float32')\nX_test = test.astype('float32')\nX_train /= 255\nX_test /= 255\nY_train=labels\n\nX_valid = X_train[:5000,:,:,:]\nY_valid =   Y_train[:5000]\nX_train = X_train[5001:25000,:,:,:]\nY_train  = Y_train[5001:25000]\n\nprint(\"Training matrix shape\", X_train.shape)\nprint(\"Testing matrix shape\", X_test.shape)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"60100746-569c-04eb-32ba-2a1395091dd1"},"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    \nfor idx in range(0,5):\n    show_cats_and_dogs(idx)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"d73f2be1-8d59-f05c-3205-30b49d79ffe0"},"outputs":[],"source":"optimizer = 'adam'\nobjective = 'binary_crossentropy'\n\n\ndef catdog():\n    \n    model = Sequential()\n\n    model.add(Convolution2D(16, 3, 3, border_mode='same', input_shape=(ROWS, COLS, CHANNELS), activation='relu'))\n    model.add(Convolution2D(16, 3, 3, border_mode='same', activation='relu'))\n    model.add(MaxPooling2D(pool_size=(2, 2)))\n\n    model.add(Convolution2D(32, 3, 3, border_mode='same', activation='relu'))\n    model.add(Convolution2D(32, 3, 3, border_mode='same', activation='relu'))\n    model.add(MaxPooling2D(pool_size=(2, 2)))\n    \n    #model.add(Convolution2D(64, 3, 3, border_mode='same', activation='relu'))\n    #model.add(Convolution2D(64, 3, 3, border_mode='same', activation='relu'))\n    #model.add(MaxPooling2D(pool_size=(1, 1)))\n    \n    #model.add(Convolution2D(128, 3, 3, border_mode='same', activation='relu'))\n    #model.add(Convolution2D(128, 3, 3, border_mode='same', activation='relu'))\n    #model.add(MaxPooling2D(pool_size=(1, 1)))\n\n    model.add(Flatten())\n    model.add(Dense(128, activation='relu'))\n    model.add(Dropout(0.5))\n    \n    model.add(Dense(128, 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\nmodel = catdog()"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"6fa0edf1-9c29-a874-7926-7910a53800b3"},"outputs":[],"source":"nb_epoch = 8\nbatch_size = 128      \n        \nmodel.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch,\n          verbose=1, validation_data=(X_valid, Y_valid))\n    \nsubmission = model.predict_proba(X_test, verbose=1)\ntest_id = range(1,12501)\npredictions_df = pd.DataFrame({'id': test_id, 'label': submission[:,0]})\n\npredictions_df.to_csv(\"submission.csv\", index=False)"}],"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}