{"cells":[{"metadata":{"_uuid":"0c729c976e3f13b766039ad5ff76be1e9e29c697","trusted":true},"cell_type":"code","source":"import numpy as np\nimport matplotlib.pyplot as plt\nimport cv2\nimport os\nimport keras\nimport pandas as pd\nimport pickle\nfrom keras import regularizers","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"229bb7388db9507c90b7840936e6e71577ad8831"},"cell_type":"markdown","source":"Cat = 0; Dog = 1"},{"metadata":{"_uuid":"fb5e893a095275ffbb4b9ef112c7fbe46b4e0fe6","trusted":true},"cell_type":"code","source":"DIR = '../input'","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"9f9e6a5382f0a84d30a3dc507b4d1037f38b41d7","trusted":true},"cell_type":"code","source":"training_dir = os.path.join(DIR, 'train')\ntest_path = os.path.join(DIR, 'test')\ncategories = [training_dir, test_path]","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"46824a627774d824de3e358736d80c1bb5e72eed","trusted":true},"cell_type":"code","source":"def CreateXY(categories, img_size):\n#categories: a list with training and testing directories; training first; example: categories[0] -> 'C:/Users/Leo/Desktop/all\\\\train'\n    X_train = []\n    y_train = []\n    test_set = []\n    \n    train_cat_dir = []\n    train_dog_dir = []\n    test_dir = []\n\n    #training\n    for img in os.listdir(categories[0]):\n        if img.startswith('cat'):\n            train_cat_dir.append(os.path.join(categories[0], img))\n        else:\n            train_dog_dir.append(os.path.join(categories[0], img))\n            \n    for img in train_cat_dir:\n        cat = cv2.imread(img, 0)\n        cat = cv2.resize(cat, (img_size,img_size))\n        cat = np.divide(cat,255)\n        X_train.append(cat)\n        y_train.append(0)\n        \n    for img in train_dog_dir:\n        dog = cv2.imread(img, 0)\n        dog = cv2.resize(dog, (img_size,img_size))\n        dog = np.divide(dog,255)\n        X_train.append(dog)\n        y_train.append(1)\n        \n    for img in os.listdir(categories[1]):\n        test_dir.append(os.path.join(categories[1], img))\n        \n    for img in test_dir:\n        und = cv2.imread(img, 0)\n        und = cv2.resize(und, (img_size,img_size))\n        und = np.divide(und,255)\n        test_set.append(und)\n        \n    return X_train, y_train, test_set","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"df195fe57c212b7a5c7cb03512159823a8526cc8","trusted":true},"cell_type":"code","source":"X_train, y_train, test_set = CreateXY(categories, 50)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"93c38d2d27f174cc96b2cc7c7491973e5a101575"},"cell_type":"code","source":"len(X_train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"11fe2f85ac7e4d753d872cd55cb831f114a2cba5"},"cell_type":"code","source":"len(y_train)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"56b7d3307b44f49df892b77f84be3f5cba2f8251"},"cell_type":"markdown","source":"Shuffling the data #https://stackoverflow.com/questions/11765061/better-way-to-shuffle-two-related-lists/39556412"},{"metadata":{"trusted":true,"_uuid":"b0b9cafa1b21e8c0cb9b1d41c1e8eb3f6c496496"},"cell_type":"code","source":"X_train_shuff = []\ny_train_shuff = []\nindex_shuf = [val for val in range(len(X_train))]\nnp.random.shuffle(index_shuf)\nfor i in index_shuf:\n    X_train_shuff.append(X_train[i])\n    y_train_shuff.append(y_train[i])\nX_train = np.array(X_train_shuff)\ny_train = np.array(y_train_shuff)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"766e5e2367222bff8ad03cc3fae629771637b5d8"},"cell_type":"markdown","source":"I didn't shuffle the test set because would made no sense"},{"metadata":{"trusted":true,"_uuid":"6a592346e35fe1af874beeabb5647257c558b609"},"cell_type":"code","source":"test_set = np.array(test_set)","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-output":false,"_kg_hide-input":false,"trusted":true,"_uuid":"89a0c2d246c04df64fba1e9d7bb89fccd41cc618"},"cell_type":"code","source":"#I'm doing it 'cause I saw in an answer that it should help\nX_train = X_train.reshape(-1,50,50,1)\ntest_set = test_set.reshape(-1,50,50,1)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"09e8e14c165ca377ee40ceef12df2f14fe4fbcc2","trusted":true},"cell_type":"code","source":"#I've created my own architecture, maybe that's the reason of the acc. problem\nmodel = keras.models.Sequential()\n#Input shape problems\nmodel.add(keras.layers.Conv2D(32, kernel_size=(5,5), input_shape=X_train.shape[1:]))\nmodel.add(keras.layers.MaxPooling2D(pool_size=2))\nmodel.add(keras.layers.Conv2D(32, kernel_size=(5,5)))\nmodel.add(keras.layers.MaxPooling2D(pool_size=2))\nmodel.add(keras.layers.Flatten())\nmodel.add(keras.layers.Dense(32, activation='relu'))\n#added dropout and l2 regularization\nmodel.add(keras.layers.Dropout(0.5))\nmodel.add(keras.layers.Dense(64, activation='relu', kernel_regularizer=regularizers.l2(0.01)))\nmodel.add(keras.layers.Dense(1, activation='sigmoid'))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"1ca9f3146648262ec675f7d2558f0f529f8c2aa5","trusted":true},"cell_type":"code","source":"model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"de16d0094636f49cd602594998bf0b8916813d07"},"cell_type":"code","source":"model.fit(X_train, y_train, epochs=150)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"094fd29a1e37b0d38008fd136c6976de40a03e30"},"cell_type":"code","source":"preds = model.predict_classes(test_set)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"601b08e40a9225c579e30a103b6e5d02717fd690"},"cell_type":"code","source":"preds = [val[0] for val in preds]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e389d0e2c5edb184fa3176d60d4ccd592a3a7422"},"cell_type":"code","source":"test_names = [int(val.split('.')[0]) for val in os.listdir(categories[1])]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"aa2fa1626d7087c35be43e9a72cc7c84c2d03fea"},"cell_type":"code","source":"id_series = pd.Series(data=test_names, name='id')\nlabel_series = pd.Series(data=preds, name='label')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3d77c31119e0fc8255c6234bd71874bb6ee70118"},"cell_type":"code","source":"df = pd.DataFrame({'id':id_series, 'label':label_series})","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9e02f7a3ed9a6c091cbc04ae0170ec0d454a5371"},"cell_type":"code","source":"df.to_csv('submission.csv', index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"64ea3fd97b259928745a452285fdaae0c8c3f20b"},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d74e956ad4dc92570a03afae0a8eab0d993e908f"},"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}