{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import os\nos.chdir('../input')","execution_count":null,"outputs":[]},{"metadata":{"id":"6ewhHg509Bc6","colab_type":"code","outputId":"89dddc5b-4e4d-4469-9b52-c1090fd7a5b7","colab":{"base_uri":"https://localhost:8080/","height":34},"trusted":true},"cell_type":"code","source":"get_ipython().system_raw(\"../input/train.zip\")\nget_ipython().system_raw(\"../input/test.zip\")","execution_count":null,"outputs":[]},{"metadata":{"id":"xzvkca9A954z","colab_type":"code","outputId":"8de2143b-e0a4-4ca4-d9e1-b337093c12ef","colab":{"base_uri":"https://localhost:8080/","height":204},"trusted":true},"cell_type":"code","source":"os.listdir()","execution_count":null,"outputs":[]},{"metadata":{"id":"y7rzBaUJ9Rsl","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"import numpy as np\nimport matplotlib.pyplot as plt\nimport cv2\nfrom tqdm import tqdm","execution_count":null,"outputs":[]},{"metadata":{"id":"RKD86Q0LOIZc","colab_type":"text"},"cell_type":"markdown","source":"**Creating Data to Process**"},{"metadata":{"id":"v2qh0bkdG0_2","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"mapping_label = {0:'cat',1:'dog'}","execution_count":null,"outputs":[]},{"metadata":{"id":"U1zHRRcDqdl1","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"def img_label(img):\n    word_label=img.split('.')[0]\n    if word_label=='cat':\n        return 0\n    elif word_label=='dog':\n        return 1","execution_count":null,"outputs":[]},{"metadata":{"id":"QZeg9VoUqpMS","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"def create_train_data(path):\n    X,Y=[],[]\n    my_dir = os.listdir(path)\n    for img in tqdm(my_dir):\n        label=img_label(img)\n        img_data = cv2.imread('./'+ path +'/'+img)\n        interpolate = cv2.INTER_AREA\n        if(img_data.shape[0]<80 or img_data.shape[1]<80):\n            interpolate = cv2.INTER_LINEAR\n        img_data = cv2.resize(img_data, (80, 80),interpolation=interpolate)\n        X.append(img_data)\n        Y.append(label)\n    return X,Y","execution_count":null,"outputs":[]},{"metadata":{"id":"lr0C5YVEsMDJ","colab_type":"code","outputId":"34e69b88-036f-4bfb-d0a1-eb9551329e46","colab":{"base_uri":"https://localhost:8080/","height":34},"trusted":true},"cell_type":"code","source":"X_train,Y_train=create_train_data('train')","execution_count":null,"outputs":[]},{"metadata":{"id":"ErB93gAT743U","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"X_train  = np.asarray(X_train)\nY_train = np.asarray(Y_train)","execution_count":null,"outputs":[]},{"metadata":{"id":"XjZIDUC4J8ma","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"def create_test_data(path):\n    X=[]\n    my_dir = sorted(list(map(lambda x:int(x[:-4]),os.listdir(path))))\n    for img in tqdm(my_dir):\n        img_data = cv2.imread('./'+ path +'/'+ str(img) + '.jpg')\n        interpolate = cv2.INTER_AREA\n        if(img_data.shape[0]<80 or img_data.shape[1]<80):\n            interpolate = cv2.INTER_LINEAR\n        img_data = cv2.resize(img_data, (80, 80),interpolation=interpolate)\n        X.append(img_data)\n    return X","execution_count":null,"outputs":[]},{"metadata":{"id":"abthThdnKO_K","colab_type":"code","outputId":"4526fe67-bae8-4a8f-aa51-1826e4f48ba0","colab":{"base_uri":"https://localhost:8080/","height":34},"trusted":true},"cell_type":"code","source":"X_test = create_test_data('test')","execution_count":null,"outputs":[]},{"metadata":{"id":"8w7RDcj7KX3P","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"X_test = np.asarray(X_test)","execution_count":null,"outputs":[]},{"metadata":{"id":"X3MP1zKhYBie","colab_type":"code","outputId":"59bd7349-df8d-48a9-e0d4-602a3e09d879","colab":{"base_uri":"https://localhost:8080/","height":34},"trusted":true},"cell_type":"code","source":"X_test.shape","execution_count":null,"outputs":[]},{"metadata":{"id":"9wbKIrCgOBTf","colab_type":"text"},"cell_type":"markdown","source":"**Loading Data and Preprocessing it and dividing it in test, train, validation set**"},{"metadata":{"id":"CIH6DOd1HkJW","colab_type":"code","outputId":"178e7213-261f-4518-aed6-b0b0521d5b3b","colab":{"base_uri":"https://localhost:8080/","height":679},"trusted":true},"cell_type":"code","source":"plt.imshow(X_train[100])\nplt.show()\nplt.imshow(X_test[150])\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"id":"kbUL8I7ZAww5","colab_type":"code","outputId":"89d778be-8a6a-4836-a7f2-2deb6c97db88","colab":{"base_uri":"https://localhost:8080/","height":34},"trusted":true},"cell_type":"code","source":"from keras.utils import to_categorical\nY_train = to_categorical(Y_train)","execution_count":null,"outputs":[]},{"metadata":{"id":"ne6FO5tpA4KY","colab_type":"code","outputId":"0f5079d9-204f-45b0-bb88-600aa869b32f","colab":{"base_uri":"https://localhost:8080/","height":34},"trusted":true},"cell_type":"code","source":"X_train.shape,Y_train.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.utils.class_weight import compute_class_weight\nweights = compute_class_weight('balanced',[0,1],np.argmax(Y_train,axis=1))\nprint(weights)","execution_count":null,"outputs":[]},{"metadata":{"id":"dMMgSQY3D3uZ","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"from keras.utils import normalize\nX_train = normalize(X_train,axis=1)\nX_test = normalize(X_test,axis=1)","execution_count":null,"outputs":[]},{"metadata":{"id":"HI2usZqZA7R-","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nfrom sklearn.utils import shuffle\nX_train,Y_train = shuffle(X_train,Y_train,random_state = 2)\nX_train,X_val,Y_train,Y_val = train_test_split(X_train,Y_train,test_size=0.2,random_state = 2)","execution_count":null,"outputs":[]},{"metadata":{"id":"RGbl5NNYBQ4c","colab_type":"code","outputId":"03c047e9-e76a-44a3-c4a5-9dd7073f4013","colab":{"base_uri":"https://localhost:8080/","height":34},"trusted":true},"cell_type":"code","source":"X_train.shape,Y_train.shape,X_val.shape,Y_val.shape","execution_count":null,"outputs":[]},{"metadata":{"id":"d50muflsQFd5","colab_type":"text"},"cell_type":"markdown","source":"**Proposed Models and training data on it**"},{"metadata":{"id":"GUAzJaS_BYO5","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"from keras.models import Sequential,Model\nfrom keras.layers import Conv2D, MaxPooling2D, Dropout, Dense, Flatten, regularizers, BatchNormalization, Input\nimport keras.optimizers as optimizers\nimport keras.callbacks as callbacks\nfrom sklearn import metrics","execution_count":null,"outputs":[]},{"metadata":{"id":"eoqcZ3U5io9p","colab_type":"code","outputId":"db51d079-a0a4-464a-b079-09269ebf41ea","colab":{"base_uri":"https://localhost:8080/","height":680},"trusted":true},"cell_type":"code","source":"input_= Input((80,80,3))\nconv1  = Conv2D(64,3,padding='same',activation='relu')(input_)\npool1 = MaxPooling2D()(conv1)\nnorm1 = BatchNormalization()(pool1)\nconv2  = Conv2D(64,3,padding='same',activation='relu')(norm1)\npool2 = MaxPooling2D()(conv2)\nnorm2 = BatchNormalization()(pool2)\nconv3  = Conv2D(128,3,padding='same',activation='relu')(norm2)\npool3 = MaxPooling2D()(conv3)\nnorm3 = BatchNormalization()(pool3)\nconv4  = Conv2D(256,3,padding='same',activation='relu')(norm3)\nconv5  = Conv2D(256,3,padding='same',activation='relu')(conv4)\npool6 = MaxPooling2D()(conv5)\nflat7 = Flatten()(pool6)\ndrop8 = Dropout(0.05)(flat7)\ndense9 = Dense(128,activation='relu')(drop8)\ndense10 = Dense(64,activation='relu')(dense9)\ndense11 = Dense(2,activation='sigmoid')(dense10)\n\nmodel = Model(inputs=input_,outputs=dense11)\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"id":"cQS2uMSkC8tF","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"sgd = optimizers.SGD(lr = 0.001 ,momentum = 0.9, nesterov = False)\nmodel.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])\nlr_reduce = callbacks.ReduceLROnPlateau(monitor='val_loss',factor=0.1,patience=5)","execution_count":null,"outputs":[]},{"metadata":{"id":"YgX0-thtFt3q","colab_type":"code","outputId":"0c15dfaf-3141-4a43-e84b-d580c6e68f61","colab":{"base_uri":"https://localhost:8080/","height":714},"trusted":true},"cell_type":"code","source":"history = model.fit(X_train,Y_train,epochs=25,batch_size=250,validation_data=(X_val,Y_val),callbacks=[lr_reduce])","execution_count":null,"outputs":[]},{"metadata":{"id":"FInm0gKaGFyV","colab_type":"code","outputId":"8379b17c-e4ff-40d4-e0fe-ccd8b22ca8b5","colab":{"base_uri":"https://localhost:8080/","height":347},"trusted":true},"cell_type":"code","source":"fig, ax = plt.subplots(2,1)\nax[0].plot(history.history['loss'], color='b', label=\"Training loss\")\nax[0].plot(history.history['val_loss'], color='r', label=\"validation loss\",axes =ax[0])\nlegend = ax[0].legend(loc='best', shadow=True)\n\nax[1].plot(history.history['acc'], color='b', label=\"Training accuracy\")\nax[1].plot(history.history['val_acc'], color='r',label=\"Validation accuracy\")\nlegend = ax[1].legend(loc='best', shadow=True)","execution_count":null,"outputs":[]},{"metadata":{"id":"k-8xwoOH6_u7","colab_type":"code","outputId":"eaac3a49-5b69-4df5-dbb3-a19c549db016","colab":{"base_uri":"https://localhost:8080/","height":102},"trusted":true},"cell_type":"code","source":"pred = model.predict(X_val)\nY_pred = np.argmax(pred,axis=1)\nprint(metrics.accuracy_score(np.argmax(Y_val,axis=1),Y_pred))\nprint(metrics.f1_score(np.argmax(Y_val,axis=1),Y_pred))\nprint(metrics.confusion_matrix(np.argmax(Y_val,axis=1),Y_pred))\nprint(metrics.log_loss(np.argmax(Y_val,axis=1),Y_pred))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pre = model.predict(X_test)   \nY_pre = np.argmax(pre,axis=1) ","execution_count":null,"outputs":[]},{"metadata":{"id":"1rG9QGOWykFF","colab_type":"code","outputId":"2454cf52-1778-4fed-b922-3a63e3eb5f52","colab":{"base_uri":"https://localhost:8080/","height":19157},"trusted":true},"cell_type":"code","source":"for i in range(55):\n    plt.imshow(X_test[i])\n    print(mapping_label[Y_pre[i]],pre[i],i)\n    plt.show()","execution_count":null,"outputs":[]}],"metadata":{"colab":{"name":"CatvsDog.ipynb","version":"0.3.2","provenance":[],"collapsed_sections":[]},"kernelspec":{"name":"python3","display_name":"Python 3"},"accelerator":"GPU"},"nbformat":4,"nbformat_minor":1}