{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import cv2\nimport numpy as np\nimport os\nfrom random import shuffle\nfrom tqdm import tqdm\nimport pandas as pd\nfrom keras.preprocessing.image import ImageDataGenerator, load_img\nfrom keras.models import Sequential\nfrom keras.layers import Conv2D, MaxPooling2D, Dropout, Flatten, Dense, Activation, BatchNormalization\nimport matplotlib.pyplot as plt\nfrom PIL import Image\nfrom keras import layers, models, optimizers\nfrom keras.callbacks import EarlyStopping,ReduceLROnPlateau\nfrom keras.optimizers import rmsprop\n\nprint('Imports done')\nprint(os.listdir(\"../input\"))\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8c5a209af03e79e2500a38cfa87107f609024cf1"},"cell_type":"code","source":"train_dir = os.listdir(\"../input/train/train\")\n\ncategories = []\nfor filename in train_dir:\n    category = filename.split('.')[0]\n    if category == 'dog':\n        categories.append(1)\n    else:\n        categories.append(0)\n        \n\nLR=1e-4\nearlystop = EarlyStopping(monitor='val_loss', patience=2)\ncallbacks=[earlystop]\n\nrms=rmsprop(lr=LR, rho=0.9, epsilon=None, decay=0.0)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"#Create test dataframe        \ntest_dir=os.listdir(\"../input/test1/test1/\")\ntest_data=pd.DataFrame(test_dir,columns=['filename'])\n\n#Create training dataframe\ntrain_data = pd.DataFrame({\n    'filename': train_dir,\n    'category': categories\n})\n\ntrain_data.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b289bb06473d28e131b3a9afd4538b915aaf3371"},"cell_type":"code","source":"sample = train_data['filename'][0]\nimage = load_img(\"../input/train/train/\"+sample)\nplt.imshow(image)\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ae61dcb0eab3085147fb35982d2504fec162d450"},"cell_type":"code","source":"datagen=ImageDataGenerator(rescale=1./255.,validation_split=0.3)\n\ntrain_generator = datagen.flow_from_dataframe(\n    train_data, \n    \"../input/train/train/\", \n    x_col='filename',\n    y_col='category',\n    target_size=(128,128),\n    class_mode='binary',\n    batch_size=15\n)\n\nvalidation_generator=datagen.flow_from_dataframe(\n    train_data, \n    \"../input/train/train/\", \n    x_col='filename',\n    y_col='category',\n    target_size=(128,128),\n    class_mode='binary',\n    subset='validation',\nbatch_size=15)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c3b2dbbeedb9391ef00032b6a2b6257c845705b8"},"cell_type":"code","source":"plt.figure(figsize=(10, 10))\n\nx,y=validation_generator[0]\n\nfor i in range(0,3):\n    plt.subplot(3,3,i+1)\n    image = x[i]\n    if y[i]==0:\n        plt.title('It\\'s a cat!')\n    else:\n        plt.title('It\\'s a dog!')\n    plt.imshow(image)\n    \nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2fa67696f600c2474e229941e4c8b30998ab0e61","scrolled":false},"cell_type":"code","source":"#Build CNN\nmodel = Sequential()\n\nmodel.add(Conv2D(32, 3, 3, border_mode='same', input_shape=(128,128,3), activation='relu'))\nmodel.add(Conv2D(32, 3, 3, border_mode='same', activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\n\nmodel.add(Conv2D(64, 3, 3, border_mode='same', activation='relu'))\nmodel.add(Conv2D(64, 3, 3, border_mode='same', activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\n\nmodel.add(Conv2D(128, 3, 3, border_mode='same', activation='relu'))\nmodel.add(Conv2D(128, 3, 3, border_mode='same', activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\n\nmodel.add(Conv2D(256, 3, 3, border_mode='same', activation='relu'))\nmodel.add(Conv2D(256, 3, 3, border_mode='same', activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\n\nmodel.add(Flatten())\nmodel.add(Dense(256, activation='relu'))\nmodel.add(Dropout(0.5))\n\nmodel.add(Dense(256, activation='relu'))\nmodel.add(Dropout(0.5))\n\nmodel.add(Dense(1))\nmodel.add(Activation('sigmoid'))\n    \nmodel.compile(loss='binary_crossentropy',\n            optimizer=rms,\n            metrics=['accuracy'])\n\nmodel.summary()\n\nhistory = model.fit_generator(\n    train_generator, \n    epochs=20,\n    validation_data=validation_generator,\ncallbacks=callbacks)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"6138c3e7d68c155c43c24abb8c24d36e79612150"},"cell_type":"code","source":"fig, ax = plt.subplots(figsize=(12, 12))\n\nax.plot(history.history['acc'], color='b', label=\"Training accuracy\")\nax.plot(history.history['val_acc'], color='r',label=\"Validation accuracy\")\nax.set_xticks(np.arange(1, 10, 1))\n\nlegend = plt.legend(loc='best',shadow=False)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c0b3bc0f9ee2510be4c397fd17cfefe3f4069bf8"},"cell_type":"code","source":"test_gen = ImageDataGenerator(rescale=1./255)\ntest_generator = test_gen.flow_from_dataframe(\n    test_data, \n    '../input/test1/test1/', \n    x_col='filename',\n    y_col=None,\n    class_mode=None,\n    target_size=(128,128),\n    batch_size=50\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"597b99c8acc7980c74153c8342481b71ae75d992"},"cell_type":"code","source":"predictions=model.predict_generator(test_generator)\nprint('done!')\nprint(predictions)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f6db8da8c103a791f09c59d6dea954c4b1bcaff2"},"cell_type":"code","source":"\nthreshold = 0.5\ntest_data['probability'] = predictions\ntest_data['category'] = np.where(test_data['probability'] > threshold, 1,0)\n\n\ntest_data.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"scrolled":true,"_uuid":"7a62ca1cbe0272816cef2a45a15bf501d0592aea"},"cell_type":"code","source":"plt.figure(figsize=(30, 30))\n\ndirectory=\"../input/test1/test1/\"\n\nfor i in range(0,9):\n    plt.subplot(3,3,i+1)\n    image = load_img(directory+test_data['filename'][i])\n    if test_data['category'][i]==0:\n        plt.title('I am sure this is a cat!')\n    else:\n        plt.title('I am sure this is a dog!')\n    plt.imshow(image)\nplt.show()\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ace498cbf6b6b0cb9e09fc1f04c31f6790f939c6"},"cell_type":"code","source":"submission_df = test_data.copy()\nsubmission_df['id'] = submission_df['filename'].str.split('.').str[0]\nsubmission_df['label'] = submission_df['probability']\nsubmission_df.drop(['filename', 'probability'], axis=1, inplace=True)\nsubmission_df.to_csv('submission.csv', index=False)\n\nprint('done')","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}