{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import os\nimport cv2\nimport numpy as np\nimport pandas as pd\nimport seaborn\nfrom matplotlib import pyplot as plt\nfrom sklearn.model_selection import train_test_split\nfrom random import shuffle\nfrom keras.models import Sequential\nfrom sklearn.metrics import confusion_matrix,classification_report\nfrom keras.layers import Conv2D,MaxPooling2D,Dense,Flatten,Dropout\nfrom keras.callbacks import EarlyStopping\nfrom keras.utils import to_categorical\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.preprocessing import image","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"def plot_val_acc(history):\n    fig,axs= plt.subplots(1,2,figsize=(10,5))\n    axs[0].plot(history.history['acc'])\n    axs[0].plot(history.history['val_acc'])\n    axs[0].set_title('Model accuracy')\n    axs[0].set_ylabel('Accuracy')\n    axs[0].set_xlabel('Epoch')\n    axs[0].legend(['Train', 'Test'], loc='upper left')\n    # Plot training & validation loss values\n    axs[1].plot(history.history['loss'])\n    axs[1].plot(history.history['val_loss'])\n    axs[1].set_title('Model loss')\n    axs[1].set_ylabel('Loss')\n    axs[1].set_xlabel('Epoch')\n    axs[1].legend(['Train', 'Test'], loc='upper left')\n    plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train=[]\ny_train=[]\nfilenames = os.listdir(\"../input/dogs-vs-cats/train/train\")\nfor filename in filenames:\n    label = filename.split('.')[0]\n    if label==\"cat\":\n        y_train.append(0)\n    elif label==\"dog\":\n        y_train.append(1)\n    img_arr = cv2.imread(\"../input/dogs-vs-cats/train/train/\"+filename, cv2.IMREAD_GRAYSCALE)\n    img_arr = cv2.resize(img_arr, dsize=(128, 128))\n    X_train.append(img_arr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train = np.array(X_train)\nX_train.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train = X_train/255\nX_train = X_train.reshape(-1, 128, 128, 1)\nX_train.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train1 = to_categorical(y_train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def model_1():\n    model = Sequential()\n    model.add(Conv2D(32,(3,3),activation=\"relu\",input_shape=(128,128,1)))\n    model.add(MaxPooling2D(2,2))\n    \n    model.add(Conv2D(64,(3,3),activation=\"relu\"))\n    model.add(MaxPooling2D(2,2))\n    \n    model.add(Conv2D(128,(3,3),activation=\"relu\"))\n    model.add(MaxPooling2D(2,2))\n\n    model.add(Flatten())\n    model.add(Dense(512,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(2,activation=\"softmax\"))\n    model.compile(optimizer='Adam',loss='binary_crossentropy',metrics=['accuracy'])\n    return model","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"'''def with_aug():\n    model1 = model_1()\n    history1 = model1.fit(X_train,y_train1,batch_size=32,epochs=20,verbose=1,validation_split=0.25)\n    return history1'''","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"'''history1 = with_aug()'''","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"'''plot_val_acc(history1)'''","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"aug = ImageDataGenerator()\nprint(\"[INFO] performing 'on the fly' data augmentation\")\naug = ImageDataGenerator(\n        rotation_range=20,\n        zoom_range=0.15,\n        width_shift_range=0.2,\n        height_shift_range=0.2,\n        shear_range=0.15,\n        horizontal_flip=True,\n        fill_mode=\"nearest\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=20)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model2 = model_1()\ntrainX, testX, trainy, testy = train_test_split(X_train,y_train1,test_size=0.2,random_state=42)\nhistoty2 = model2.fit_generator(aug.flow(trainX, trainy, batch_size=24),\n                            validation_data=(testX,testy),\n                            steps_per_epoch=len(trainX) // 24,\n                            epochs=40,callbacks=[es])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plot_val_acc(histoty2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"truey =[]\nfor i in testy:\n    truey.append(0) if i[0]==1 else truey.append(1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"predict2 = model2.predict_classes(testX)\nprint(classification_report(predict2,truey))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(confusion_matrix(predict2,truey))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_test=[]\nfilenames = os.listdir(\"../input/dogs-vs-cats/test1/test1/\")\nfor filename in filenames:\n    img_arr = cv2.imread(\"../input/dogs-vs-cats/test1/test1/\"+filename, cv2.IMREAD_GRAYSCALE)\n    img_arr = cv2.resize(img_arr, dsize=(128, 128))\n    X_test.append(img_arr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_test = np.array(X_test)\nX_test = X_test/255.0\nX_test = X_test.reshape(-1, 128, 128, 1)\nX_test.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"predict = model2.predict(X_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model2.predict_classes(X_test[0].reshape(-1, 128, 128, 1))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"p = np.argmax(predict, axis=-1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model1.predict_classes(X_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df = pd.DataFrame({\"id\":[i+1 for i in range(12500)], \n                   \"lable\" : p})\ndf.to_csv(filename, index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"fig,axs = plt.subplots(1,10,figsize=(15,18),sharey=True)\nfor i,filename in enumerate(filenames[:10]):\n    img_arr = cv2.imread(\"../input/dogs-vs-cats/test1/test1/\"+filename)\n    img_arr = cv2.resize(img_arr, dsize=(128, 128))\n    axs[i].imshow(img_arr)\n    label = \"dog\" if p[i]==1 else \"cat\"\n    axs[i].set_title(label)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"'''model_json = model1.to_json()\nwith open(\"model.json\", \"w\") as json_file:\n    json_file.write(model_json)\nmodel1.save_weights(\"model.h5\")'''","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"'''from IPython.display import FileLink\nFileLink(r'model.h5')'''","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"'''model1.save(\"model.h5\")\nFileLink(r'model.h5')'''","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":1}