{"cells":[{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"f821c4ca-531d-6498-57ac-532457ad5751"},"outputs":[],"source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport glob\nimport os\nimport cv2\n%matplotlib inline \n\nfrom keras.models import Sequential\nfrom keras.layers import Input, Dropout, Flatten, Convolution2D, MaxPooling2D, Dense, Activation\nfrom keras.optimizers import RMSprop\nfrom keras.callbacks import ModelCheckpoint, Callback, EarlyStopping\nfrom keras.preprocessing import image\nfrom keras.utils import np_utils\nfrom keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img\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":"516d3e19-b455-a2a6-826d-95d11d288f52"},"outputs":[],"source":"#https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html \n#https://keras.io/preprocessing/image/\nTRAIN_DIR = '../input/train/'\nTEST_DIR = '../input/test/'\n\nROWS = 150\nCOLS = 150\nCHANNELS = 3\n\ndef read_image(file_path):\n    img = cv2.imread(file_path, cv2.IMREAD_COLOR) #cv2.IMREAD_GRAYSCALE\n    return cv2.resize(img, (ROWS, COLS), interpolation=cv2.INTER_CUBIC)\n\n\ndef prep_data(images):\n    count = len(images)\n    data = np.ndarray((count, ROWS, COLS, CHANNELS), dtype=np.uint8)\n\n    for i, image_file in enumerate(images):\n        image = read_image(image_file)\n        data[i] = image.T.reshape((150, 150, 3))\n        #if i%250 == 0: print('Processed {} of {}'.format(i, count))\n    \n    return data\n\ntrain_cats = sorted(glob.glob(os.path.join(TRAIN_DIR, 'cat*.jpg')))\ntrain_dogs = sorted(glob.glob(os.path.join(TRAIN_DIR, 'dog*.jpg')))\ntrain_all = train_cats + train_dogs\n\ntest_cats = sorted(glob.glob(os.path.join(TEST_DIR, 'cat*.jpg')))\ntest_all = sorted(glob.glob(os.path.join(TEST_DIR, '*.jpg')))\n\nY_train = np.array([[1.] if 'dog' in name else [0.] for name in train_all[:]])\nY_test = np.array([[1.] if 'dog' in name else [0.] for name in test_all[:]])\n\nX_train = prep_data(train_all[:32])\nX_test = prep_data(test_all[:32])\n\nprint (X_train.shape)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"20b0b277-9bac-035b-6b2f-1add1fcd52c4"},"outputs":[],"source":"# this is the augmentation configuration we will use for training\ntrain_datagen = ImageDataGenerator(\n        rescale=1./255,\n        shear_range=0.2,\n        zoom_range=0.2,\n        horizontal_flip=True)\n\n# this is the augmentation configuration we will use for testing:\n# only rescaling\ntest_datagen = ImageDataGenerator(rescale=1./255)\n\n# this is a generator that will read pictures found in\n# subfolers of 'data/train', and indefinitely generate\n# batches of augmented image data\ntrain_generator = train_datagen.flow(X_train, Y_train, batch_size=32)\n\n# this is a similar generator, for validation data\ntest_generator = test_datagen.flow(X_test, Y_test, batch_size=32)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"2c1ad5ca-86ca-546c-88e7-e158e2ae8b06"},"outputs":[],"source":"model = Sequential()\nmodel.add(Convolution2D(32, 3, 3, input_shape=(150, 150,3)))\nmodel.add(Activation('relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\n\nmodel.add(Convolution2D(32, 3, 3))\nmodel.add(Activation('relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\n\nmodel.add(Convolution2D(64, 3, 3))\nmodel.add(Activation('relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\n\nmodel.add(Flatten())  # this converts our 3D feature maps to 1D feature vectors\nmodel.add(Dense(64))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(1))\nmodel.add(Activation('sigmoid'))\n\nmodel.compile(loss='binary_crossentropy',\n              optimizer='rmsprop',\n              metrics=['accuracy'])\n\n#model.fit_generator(train_generator,samples_per_epoch=2000,    nb_epoch=50)\nmodel.fit(X_train, Y_train, batch_size=32, nb_epoch=10,validation_split=0.05, verbose=10, shuffle=True)\na = model.predict_proba(X_test)\nprint (a)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"1d386e1e-2d24-4173-d3a2-b8ae18777b48"},"outputs":[],"source":"print model.predict(X_test)"}],"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.5.2"}},"nbformat":4,"nbformat_minor":0}