{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n\nimport os\nprint(os.listdir(\"../input\"))\n\n# Any results you write to the current directory are saved as output.","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"cd67459d2dc2347eb3e0b7eb38502129d93179c3"},"cell_type":"code","source":"from 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\n#import pydot\nfrom IPython.display import SVG\nfrom keras.utils.vis_utils import model_to_dot\nfrom keras.utils import plot_model\nfrom keras.callbacks import LearningRateScheduler\nimport matplotlib.pyplot as plt\nfrom math import *","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f49e7a2cc15ea02edd056a16518e48349d7d71c5"},"cell_type":"code","source":"import cv2\nfrom random import shuffle\nfrom tqdm import tqdm\nfrom keras.optimizers import RMSprop","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"TRAIN_DIR = \"../input/train\"\nTEST_DIR = \"../input/test\"\nROWS = 64\nCOLS = 64\nCHANNELS = 3\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"646852eb46b97e2968765452dc3ac402a2ac0707"},"cell_type":"code","source":"def label_img(img):\n    word_label = img.split(\".\")[-3]\n    if word_label == 'cat': return 0\n    elif word_label == 'dog': return 1","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fd7ed3bc5befd4e802936e7f35627d0912eddbe7"},"cell_type":"code","source":"def create_train_data():\n    traning_data = []\n    \n    for img in tqdm(os.listdir(TRAIN_DIR)):\n        label = label_img(img)\n        label = np.asarray(label)\n        path = os.path.join(TRAIN_DIR,img)\n        img = cv2.imread(path)\n        img = np.asarray(img)\n        img = cv2.resize(img,(ROWS,COLS))\n        traning_data.append([img,label])\n    shuffle(traning_data)\n    return traning_data    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5919c781f2a4dbcb1ed7535cccf23a26a3fadbae"},"cell_type":"code","source":"def create_test_data():\n    test_data = []\n    \n    for img in tqdm(os.listdir(TEST_DIR)):\n        path = os.path.join(TEST_DIR,img)\n        img_num = img.split('.')[0]\n        img = cv2.imread(path)\n        img = np.asarray(img)\n        img = cv2.resize(img,(ROWS,COLS))\n        test_data.append([img,img_num])\n    shuffle(test_data)\n    return test_data ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9a99c01a22f6da551df67ed2006c728511a0231d"},"cell_type":"code","source":"train_data = create_train_data()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f014cc8dcbf508f1029b473e0dfa9f088fd757f3"},"cell_type":"code","source":"train_data = np.asarray(train_data)\nprint(train_data.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b0dc4f7939fc342b52faa4a30d72435c68f8db47"},"cell_type":"code","source":"optimizer = RMSprop(lr=1e-4)\nobjective = 'binary_crossentropy'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fa6867816a65b78337f45a1aeb75f5e9e72546b8"},"cell_type":"code","source":"def catdog():\n    \n    model = Sequential()\n\n    model.add(Convolution2D(32, 3, 3, border_mode='same', input_shape=( ROWS, COLS,3), 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=(2, 2)))\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=(2, 2)))\n    \n    model.add(Convolution2D(256, 3, 3, border_mode='same', activation='relu'))\n    model.add(Convolution2D(256, 3, 3, border_mode='same', activation='relu'))\n#     model.add(Convolution2D(256, 3, 3, border_mode='same', activation='relu'))\n    model.add(MaxPooling2D(pool_size=(2, 2)))\n\n#     model.add(Convolution2D(256, 3, 3, border_mode='same', activation='relu'))\n#     model.add(Convolution2D(256, 3, 3, border_mode='same', activation='relu'))\n#     model.add(Convolution2D(256, 3, 3, border_mode='same', activation='relu'))\n#     model.add(MaxPooling2D(pool_size=(2, 2)))\n\n    model.add(Flatten())\n    model.add(Dense(256, activation='relu'))\n    model.add(Dropout(0.5))\n    \n    model.add(Dense(256, activation='relu'))\n    model.add(Dropout(0.5))\n\n    model.add(Dense(1))\n    model.add(Activation('sigmoid'))\n\n    print(model.summary())\n    #model.compile(loss=objective, optimizer=optimizer, metrics=['accuracy'])\n    \n    return model","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"bd5376a8abea63265322c963afff2bfff08c01d2"},"cell_type":"code","source":"my_model = catdog()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"211dff231ce1f3d978cc9beaa45e4d9cde10d5bf"},"cell_type":"code","source":"my_model.compile(loss = objective,optimizer = optimizer, metrics = ['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e4673b95bdbbe68d569f1a95dcc0a712c452c411"},"cell_type":"code","source":"class LossHistory(Callback):\n    def on_train_begin(self,logs={}):\n        self.losses=[]\n        self.lr = []\n        \n    def on_epoch_end(self,batch,logs={}):\n        self.losses.append(logs.get('loss'))\n        self.lr.append(exp_decay(len(self.losses)))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8fd16b34851997c7b963c780f306f9e667d2cd55"},"cell_type":"code","source":"class PlotLearning(Callback):\n    def on_train_begin(self, logs={}):\n        self.i = 0\n        self.x = []\n        self.losses = []\n        self.val_losses = []\n        self.acc = []\n        self.val_acc = []\n        self.fig = plt.figure()\n        \n        self.logs = []\n\n    def on_epoch_end(self, epoch, logs={}):\n        \n        self.logs.append(logs)\n        self.x.append(self.i)\n        self.losses.append(logs.get('loss'))\n        self.val_losses.append(logs.get('val_loss'))\n        self.acc.append(logs.get('acc'))\n        self.val_acc.append(logs.get('val_acc'))\n        self.i += 1\n        f, (ax1, ax2) = plt.subplots(1, 2, sharex=True)\n        \n        clear_output(wait=True)\n        \n        ax1.set_yscale('log')\n        ax1.plot(self.x, self.losses, label=\"loss\")\n        ax1.plot(self.x, self.val_losses, label=\"val_loss\")\n        ax1.legend()\n        \n        ax2.plot(self.x, self.acc, label=\"accuracy\")\n        ax2.plot(self.x, self.val_acc, label=\"validation accuracy\")\n        ax2.legend()\n        \n        plt.show();\n        \nplot = PlotLearning()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8365dc20f12d9e7754fd16df4e9fc47d4d2c12ca"},"cell_type":"code","source":"def exp_decay(epoch):\n    initial_lrate = 0.01\n    k = 0.1\n    lrate = initial_lrate * exp(-k*epoch)\n    return lrate\n\nlrate = LearningRateScheduler(exp_decay)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"48d8bf3d40e5f0037788cb7e778569934cb873ba"},"cell_type":"code","source":"loss_history = LossHistory()\n#callbacks_list = [loss_history,lrate,plot]\ncallbacks_list = [loss_history,plot]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"bf01e9213a05c9c871208d42226b4ca3b00c6537"},"cell_type":"code","source":"X = np.asarray([i[0] for i in train_data]).reshape(-1,ROWS,COLS,3)\nY = np.asarray([i[1] for i in train_data])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"eeb92a27c83fec699d88c9760297bafd34d140f7"},"cell_type":"code","source":"print(X.shape)\nprint(Y[:10])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"aff737f498af507ade820afaf79ac5b7ce7ce0f4"},"cell_type":"code","source":"batch_size = 16","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3baab25cc1442631c51bcde3d8ea2c3c0aa834f5"},"cell_type":"code","source":"import numpy as np\nfrom keras import layers\nfrom keras.layers import Input, Dense, Activation, ZeroPadding2D, BatchNormalization, Flatten, Conv2D,Lambda\nfrom keras.layers import AveragePooling2D, MaxPooling2D, Dropout, GlobalMaxPooling2D, GlobalAveragePooling2D,UpSampling2D,Concatenate,Conv2DTranspose\nfrom keras.models import Model\nfrom keras.preprocessing import image\nfrom keras.utils import layer_utils\nfrom keras.utils.data_utils import get_file\nfrom keras.applications.imagenet_utils import preprocess_input\nfrom keras.models import load_model\n#import pydot\nfrom IPython.display import SVG\nfrom keras.utils.vis_utils import model_to_dot\nfrom keras.utils import plot_model\nfrom keras.callbacks import LearningRateScheduler,Callback\nfrom keras.optimizers import RMSprop\nimport glob\nimport cv2\nimport os\nfrom math import *\nfrom keras.applications.vgg16 import VGG16 \nimport keras.backend as K\nK.set_image_data_format('channels_last')\nimport matplotlib.pyplot as plt\nfrom matplotlib.pyplot import imshow\nimport h5py\nfrom keras.utils import to_categorical\nfrom IPython.display import clear_output\nfrom sklearn.model_selection import train_test_split\nfrom sklearn import datasets\nfrom sklearn import svm\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom skimage import measure\n%matplotlib inline","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4f5ff7094aaac69707dbe216a7eee43c698a6273"},"cell_type":"code","source":"my_model.fit(X,Y,validation_split = 0.2,epochs=5,callbacks=callbacks_list,batch_size=batch_size)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b5d9b15a1a129ee5c3490bcdcafb19233c2f62a3"},"cell_type":"code","source":"plt.imshow(train_data[1000][0])\nprint(train_data[1000][1])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c0d2f0d57a2398d1e1326a720214c36af4d3a009"},"cell_type":"code","source":"print(test_data.shape)\ntest_x = np.asarray([i[0] for i in test_data]).reshape(-1,ROWS,COLS,3)\nprint(test_x.shape)\ntest_num = np.asarray([i[1] for i in test_data])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"322d2097fb29cabf0d880fa5c42967fcb0573f48"},"cell_type":"code","source":"print(test_num)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fddd63ad49c9c9c5f010a0ad456b2b26b7a9918b"},"cell_type":"code","source":"predictions = my_model.predict(test_x)\nprint(predictions)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"874bb22e70385fb37afcce0b9244595a5a0cce58"},"cell_type":"code","source":"test_data = create_test_data()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"84695b4d6e207c5864b2f89ef54de0557f33fd60"},"cell_type":"code","source":"with open('submission_file.csv','w') as f:\n    f.write('id,label\\n')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5b7bf696ef7b7799840aab455341590d84c8cfa1"},"cell_type":"code","source":"predictions = np.asarray(predictions)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8c7fc8d21129111eab62ecf573bf4e2eafed494c"},"cell_type":"code","source":"print(predictions)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d407093cd88fc9f015314e4c6a7b4dff71228a58"},"cell_type":"code","source":"j = 0\nwith open('submission_file.csv','a') as f:\n    for data in tqdm(test_num):\n        img_num = data\n        result = predictions[j][0]\n        f.write('{},{}\\n'.format(img_num,result))\n        j = j + 1","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4f973562c7848d85006583bbe2c8237ab931aa05"},"cell_type":"code","source":"","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}