{"cells":[{"cell_type":"markdown","metadata":{"_cell_guid":"4906c3a6-b6a1-4925-9c08-4237b61eb1f7"},"source":"# All ConvNet"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"db439b97-f98e-ea37-bde4-a84359e768e0"},"outputs":[],"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\nfrom subprocess import check_output\nprint(check_output([\"ls\", \"../input\"]).decode(\"utf8\"))\n\n# Any results you write to the current directory are saved as output."},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"29b7a9b6-c89b-056e-2833-d2b32d684669"},"outputs":[],"source":"print (check_output([\"ls\", \"../input/train\"]))\n"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"15646ef7-7e35-0995-a4b2-7014664aa2fd"},"outputs":[],"source":"import keras"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"f863d287-d160-1475-b4ca-100694d743c7"},"outputs":[],"source":"import cv2\n\nimport numpy as np\nimport os\nfrom random import shuffle\n\nfrom tqdm import tqdm\n\ntrain_dir = '../input/train'\ntest_dir = '../input/test'\nimage_size = 50\n\nmodel_name = 'dog-vs-cat.model'"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"ca0e3c68-8170-5b67-539c-dc4d29627574"},"outputs":[],"source":"def label_img(img):\n    word_label = img.split('.')[-3]\n    \n    if word_label == 'cat':\n        return [1, 0]\n    elif word_label == 'dog':\n        return [0, 1]"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"0ead1e61-7cf9-c31c-efee-a67a128aeb10"},"outputs":[],"source":"def create_train_data(image_size=50, gray=True):\n    train_data = []\n    for img in tqdm(os.listdir(train_dir)):\n        label = label_img(img)\n        path = os.path.join(train_dir,img)\n        if gray:\n            img = cv2.imread(path, cv2.IMREAD_GRAYSCALE)\n        img = cv2.resize(img, (image_size, image_size))\n        train_data.append([np.array(img), np.array(label)])\n    \n    shuffle(train_data)\n    np.save('train_data.npy', train_data)\n    return train_data"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"a0ff1e9a-1864-e2dc-96a0-a2f97e3a9b42"},"outputs":[],"source":"def process_test_data(image_size=50, gray=True):\n    train_data = []\n    for img in tqdm(os.listdir(test_dir)):\n        label = label_img(img)\n        path = os.path.join(test,img)\n        img_num = img.split('.')[0]\n        if gray:\n            img = cv2.imread(path, cv.IMREAD_GRAYSCALE)\n        img = cv2.resize(img, (image_size, image_size))\n        train_data.append([np.array(img), np.array(label)])\n    \n    shuffle(train_data)\n    np.save('train_data.npy', train_data)\n    return train_data"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"d7ca55e5-1ece-cf18-196b-ff7be6842257"},"outputs":[],"source":"train_data = create_train_data()"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"6fccc4c4-e229-f1f8-4c77-c4dd27573482"},"outputs":[],"source":"import keras\nfrom keras.models import Sequential\nimport keras.backend as K\n"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"9330d6ba-78ed-e8cf-6f8b-d8386967f96d"},"outputs":[],"source":"from keras.layers import Dense, Activation, Dropout, Flatten\nfrom keras.layers.convolutional import Conv2D\nfrom keras.layers.pooling import GlobalAveragePooling2D, MaxPooling2D\n\nK.clear_session()\nmodel = Sequential()\n\nmodel.add(Conv2D(32, 5, padding='same',input_shape=(image_size,image_size,1)))\nmodel.add(Activation('relu'))\nmodel.add(MaxPooling2D(pool_size=(5,5), padding='same'))\n\nmodel.add(Conv2D(64, 5, padding='same'))\nmodel.add(Activation('relu'))\nmodel.add(MaxPooling2D(pool_size=(5,5), padding='same'))\nmodel.add(Flatten())\n\nmodel.add(Dense(units=1024))\nmodel.add(Dropout(0.2))\n\nmodel.add(Dense(units=2))\nmodel.add(Activation('softmax'))"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"2e656274-41a7-9890-d7b6-8d5d7608f78b"},"outputs":[],"source":"model.compile(loss='categorical_crossentropy', optimizer='adam',\n             metrics=['accuracy'])"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"13ae2b43-28e8-81ec-022c-2d8e70dd4349"},"outputs":[],"source":"train = train_data[:-500]\ntest = train_data[-500:]"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"3ca56bd6-94d9-55f7-700a-cdc793826ed0"},"outputs":[],"source":"X = np.array([i[0] for i in train]).reshape((-1,image_size,image_size,1))\ny = [i[1] for i in train]\ny = np.vstack(y)\n\ntest_X = np.array([i[0] for i in test]).reshape((-1,image_size,image_size,1))\ntest_y = [i[1] for i in test]\ntest_y = np.vstack(test_y)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"dcf014a1-e3ce-3098-a44e-fcb26f752897"},"outputs":[],"source":"model.fit(X, y, batch_size=128, epochs=5)"}],"metadata":{"_change_revision":0,"_is_fork":false,"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.0"}},"nbformat":4,"nbformat_minor":0}