{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"collapsed":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":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true,"collapsed":true},"cell_type":"code","source":"import os, cv2, re, random\nimport numpy as np\nimport pandas as pd\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.preprocessing.image import img_to_array, load_img\nfrom keras import layers, models, optimizers\nfrom keras import backend as K\nfrom sklearn.model_selection import train_test_split","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"1a77a57df89effda274227a23bee0722e787e3fe"},"cell_type":"code","source":"img_width = 150\nimg_height = 150\nTRAIN_DIR = '../input/train/'\nTEST_DIR = '../input/test/'\ntrain_images_dogs_cats = [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR)]\ntrain_dogs =   [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'dog' in i]\ntrain_cats =   [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'cat' in i]\ntrain_images = train_dogs[:2000] + train_cats[:2000]\ntest_images_dogs_cats = [TEST_DIR+i for i in os.listdir(TEST_DIR)]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"93a5e804e971e343542a8438111fd1c4959ea78d"},"cell_type":"code","source":"def prepare_data(list_of_images):\n    \"\"\"\n    Returns two arrays: \n        x is an array of resized images\n        y is an array of labels\n    \"\"\"\n    x = [] # images as arrays\n    y = [] # labels\n    \n    for image in list_of_images:\n        x.append(cv2.resize(cv2.imread(image), (img_width,img_height), interpolation=cv2.INTER_CUBIC))\n    \n    for i in list_of_images:\n        if 'dog' in i:\n            y.append(1)\n        elif 'cat' in i:\n            y.append(0)\n        #else:\n            #print('neither cat nor dog name present in images')\n            \n    return x, y","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ca34703e90b1d6d8cbb914b916058c4473737e72","collapsed":true},"cell_type":"code","source":"X, Y = prepare_data(train_images)\nprint(K.image_data_format())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f10ad1420a261f7f7a3cdb150321c6eb0ec4aa1b","collapsed":true},"cell_type":"code","source":"X_train, X_val, Y_train, Y_val = train_test_split(X,Y, test_size=0.2, random_state=1)\nnb_train_samples = len(X_train)\nnb_validation_samples = len(X_val)\nbatch_size = 32\nprint(\"X_train shape\",len(X_train))\nprint(\"X_val shape\", len(X_val))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"25ab772f7a34a607230c7b0f3e8149864cdc3459","collapsed":true},"cell_type":"code","source":"model = models.Sequential()\n\nmodel.add(layers.Conv2D(32, (3, 3), padding='same',input_shape=(img_width, img_height, 3),activation='relu'))\nmodel.add(layers.Conv2D(32, (3, 3), padding='same',activation='relu'))\nmodel.add(layers.MaxPooling2D(pool_size=(2, 2)))\n\nmodel.add(layers.Conv2D(64, (3, 3), padding='same',activation='relu'))\nmodel.add(layers.Conv2D(64, (3, 3), padding='same',activation='relu'))\nmodel.add(layers.MaxPooling2D(pool_size=(2, 2)))\n\nmodel.add(layers.Conv2D(128, (3, 3), padding='same',activation='relu'))\nmodel.add(layers.Conv2D(128, (3, 3), padding='same',activation='relu'))\nmodel.add(layers.MaxPooling2D(pool_size=(2, 2)))\n\nmodel.add(layers.Conv2D(256, (3, 3), padding='same',activation='relu'))\nmodel.add(layers.Conv2D(256, (3, 3), padding='same',activation='relu'))\nmodel.add(layers.MaxPooling2D(pool_size=(2, 2)))\n\nmodel.add(layers.Flatten())\n\nmodel.add(layers.Dense(256,activation='relu'))\nmodel.add(layers.Dropout(0.5))\n\nmodel.add(layers.Dense(256,activation='relu'))\nmodel.add(layers.Dropout(0.5))\n\nmodel.add(layers.Dense(1))\nmodel.add(layers.Activation('sigmoid'))\n\nmodel.compile(loss='binary_crossentropy',\n              optimizer=optimizers.RMSprop(lr=1e-4),\n              metrics=['accuracy'])\n\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"1fc23609df9b85fe0ad676c766629162be982648"},"cell_type":"code","source":"train_datagen = ImageDataGenerator(\n    rescale=1. / 255,\n    shear_range=0.2,\n    zoom_range=0.2,\n    horizontal_flip=True)\n\nval_datagen = ImageDataGenerator(\n    rescale=1. / 255,\n    shear_range=0.2,\n    zoom_range=0.2,\n    horizontal_flip=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"3a7a31e0a99a1d977668709943a165c277ea499f"},"cell_type":"code","source":"train_generator = train_datagen.flow(np.array(X_train), Y_train, batch_size=batch_size)\nvalidation_generator = val_datagen.flow(np.array(X_val), Y_val, batch_size=batch_size)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d5635b0b7aae004503b6df6adb252f5d2f12be43","collapsed":true},"cell_type":"code","source":"history = model.fit_generator(\n    train_generator, \n    steps_per_epoch=nb_train_samples // batch_size,\n    epochs=30,\n    validation_data=validation_generator,\n    validation_steps=nb_validation_samples // batch_size\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"438c6c6873102bb980079834cc82f8ce47414c3f","collapsed":true},"cell_type":"code","source":"import matplotlib.pyplot as plt\nfig = plt.figure(figsize=(15, 5))\nplt.plot(history.history['loss'], 'g', label=\"train losses\")\nplt.plot(history.history['val_loss'], 'r', label=\"val losses\")\nplt.grid(True)\nplt.title('Training loss vs. Validation loss')\nplt.xlabel('Epochs')\nplt.ylabel('Loss')\nplt.legend()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"32a77c957292f2a566c1e31aa9beb935720e7519","collapsed":true},"cell_type":"code","source":"fig = plt.figure(figsize=(15, 5))\nplt.plot(history.history['acc'], 'g', label=\"accuracy on train set\")\nplt.plot(history.history['val_acc'], 'r', label=\"accuracy on validation set\")\nplt.grid(True)\nplt.title('Training Accuracy vs. Validation Accuracy')\nplt.xlabel('Epochs')\nplt.ylabel('Loss')\nplt.legend()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"2217af25bc60ddc912b0f4b520c734e9e8b75124"},"cell_type":"code","source":"model.save_weights('model_wieghts.h5')\nmodel.save('model_keras.h5')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"97b53d5b787cd4a020a27000732941d3e6fca384"},"cell_type":"code","source":"X_test, Y_test = prepare_data(test_images_dogs_cats) #Y_test in this case will be []","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"132e57c6f67ebc1a8763499e08a83deaa1edbf3d"},"cell_type":"code","source":"test_datagen = ImageDataGenerator(rescale=1. / 255)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"77088ff7814e4a6d7124ef87c0382775e5deb3d1","collapsed":true},"cell_type":"code","source":"test_generator = val_datagen.flow(np.array(X_test), batch_size=batch_size)\nprediction_probabilities = model.predict_generator(test_generator, verbose=1)","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-output":true,"trusted":true,"collapsed":true,"_uuid":"5f4a5cd2c6282d7a8ad8e6fc6e90efabdad4298a"},"cell_type":"code","source":"counter = range(1, len(test_images_dogs_cats) + 1)\nsolution = pd.DataFrame({\"id\": counter, \"label\":list(prediction_probabilities)})\ncols = ['label']\n\nfor col in cols:\n    solution[col] = solution[col].map(lambda x: str(x).lstrip('[').rstrip(']')).astype(float)\n\nsolution.to_csv(\"dogsVScats.csv\", index = False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"a90b8f38ebc5d626b86d2c2973521b090318f012"},"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}