{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Dogs v/s Cats Classification"},{"metadata":{},"cell_type":"markdown","source":"This is a classification problem which consists of 25000 images of dogs and cats in jpeg format. Our task is to correctly classify them as dogs and cats using convolutional neural networks."},{"metadata":{},"cell_type":"markdown","source":"## Importing Libraries"},{"metadata":{},"cell_type":"markdown","source":"We will be using keras framework for implementing our model"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import keras\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport numpy as np\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Dropout, Conv2D, Flatten, MaxPooling2D\nfrom keras.utils import to_categorical\nfrom keras.applications import MobileNetV2\nfrom sklearn.metrics import classification_report\nimport cv2\nfrom tqdm import tqdm","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"import os\nimage_ids = os.listdir('../input/train/train/')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"As the data consists of images named as \"dog.1.jpg\", so we will store the image information in the x_train list and the category into y_train list."},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train = []\ny_train = []\nfor i in tqdm(image_ids):\n    category = i.split(\".\")[0]\n    if category == \"dog\":\n        y_train.append(1)\n    else:\n        y_train.append(0)\n        \n    img_arr = cv2.imread(\"../input/train/train/\"+i, cv2.IMREAD_GRAYSCALE)\n    #img_arr = cv2.imread(\"../input/train/train/\"+i)\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\n#x_train = x_train.reshape(-1, 128, 128, 3)\nx_train = x_train.reshape(-1, 128, 128, 1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import pickle\nf = open(\"x_train.pickle\", \"wb\")\npickle.dump(x_train, f)\nf.close()\nf = open(\"y_train.pickle\", \"wb\")\npickle.dump(y_train,f)\nf.close()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Defining our model"},{"metadata":{"trusted":true},"cell_type":"code","source":"model = Sequential()\nmodel.add(Conv2D(4,(3,3),strides=1, padding='valid', activation = 'relu', input_shape = x_train.shape[1:]))\nmodel.add(MaxPooling2D(pool_size = (2,2), strides=2))\n\nmodel.add(Conv2D(16,(3,3), activation = 'relu', strides=1, padding=\"valid\"))\nmodel.add(MaxPooling2D(pool_size = (2,2), strides=2))\n\nmodel.add(Conv2D(32, (3,3), activation=\"relu\", strides=1, padding=\"valid\"))\nmodel.add(MaxPooling2D(pool_size=(2,2), strides=2))\n\nmodel.add(Conv2D(64, (3,3), activation=\"relu\", strides=1, padding=\"valid\"))\nmodel.add(MaxPooling2D(pool_size=(2,2), strides=2))\n\nmodel.add(Flatten())\nmodel.add(Dense(512, activation=\"relu\"))\nmodel.add(Dense(128, activation='relu'))\nmodel.add(Dense(64, activation='sigmoid'))\n\nmodel.add(Dense(1, activation='sigmoid'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#base_model = MobileNetV2(input_shape=(128,128,3),\n #                        include_top=False, \n  #                       weights='imagenet')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#model = Sequential([base_model,\n #                   MaxPooling2D(),\n  #                  Flatten(),\n   #                 Dense(1, activation='sigmoid')])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(optimizer=\"adam\",\n              loss='binary_crossentropy',\n              metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.fit(x_train, y_train, epochs=1, batch_size=32, validation_split=0.2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"f = open(\"model.pickle\", \"wb\")\npickle.dump(model, f)\nf.close()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_test = []\ntest_files = os.listdir(\"../input/test1/test1/\")\nfor i in tqdm(test_files):    \n    img_arr = cv2.imread(\"../input/test1/test1/\"+i, 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)/255\nx_test = x_test.reshape(-1, 128, 128, 1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_test.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"predictions = model.predict(x_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"results = []\nfor i in predictions:\n    if(i>0.5):\n        results.append(1)\n    else:\n        results.append(0)","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 for p in results]})","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.to_csv(\"submission.csv\",index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"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.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}