{"cells":[{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"362ea099-c87d-43c5-b458-05cde0c8d1d7"},"outputs":[],"source":"%matplotlib inline\nimport pandas as pd\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.models import Model\nfrom keras.layers import Input, Convolution2D, MaxPooling2D, Dropout, Flatten, Dense\nfrom keras.callbacks import Callback, ModelCheckpoint"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"e307aa86-327c-d292-1922-576798463a08"},"outputs":[],"source":"IMG_WIDTH, IMG_HEIGHT = 150, 150\nTRAIN_DATA_DIR = '../input/train'\nVALIDATION_DATA_DIR = '../input/test'\nMODEL_WEIGHTS_FILE = 'initial-cnn.h5'\nNB_TRAIN_SAMPLES = 2000\nNB_VALIDATION_SAMPLES = 800\nNB_EPOCH = 50"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"0c0873eb-1324-2a86-8c12-b5b081ed5715"},"outputs":[],"source":"input = Input(shape=(IMG_WIDTH, IMG_HEIGHT, 3,))\nx = Convolution2D(32, 3, 3, activation='relu')(input)\nx = MaxPooling2D(pool_size=(2, 2))(x)\nx = Convolution2D(32, 3, 3, activation='relu')(x)\nx = MaxPooling2D(pool_size=(2, 2))(x)\nx = Convolution2D(64, 3, 3, activation='relu')(x)\nx = MaxPooling2D(pool_size=(2, 2))(x)\nx = Flatten()(x)\nx = Dense(64, activation='relu')(x)\nx = Dropout(0.5)(x)\nx = Dense(2, activation='softmax')(x)\nmodel = Model(input=input, output=x)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"9130efd7-6302-11bc-6d64-64deb303c9c6"},"outputs":[],"source":"model.summary()"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"3ceeda3c-f10a-421b-f952-79afdef0a0ca"},"outputs":[],"source":"model.compile(loss='categorical_crossentropy',\n              optimizer='rmsprop',\n              metrics=['accuracy'])"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"3022e00b-4804-de70-a89a-82a1b1540383"},"outputs":[],"source":"train_datagen = ImageDataGenerator(\n        rescale=1./255,\n        shear_range=0.2,\n        zoom_range=0.2,\n        horizontal_flip=True)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"680d5273-d9aa-6643-c02d-ee32e279c0e9"},"outputs":[],"source":"test_datagen = ImageDataGenerator(rescale=1./255)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"4addc8cc-f74c-015f-cf0c-12731df0ce9e"},"outputs":[],"source":"train_generator = train_datagen.flow_from_directory(\n        TRAIN_DATA_DIR,\n        target_size=(IMG_WIDTH, IMG_HEIGHT),\n        batch_size=32,\n        class_mode='categorical')"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"92641e98-d749-4f42-2fb6-d842012b601e"},"outputs":[],"source":"validation_generator = test_datagen.flow_from_directory(\n        VALIDATION_DATA_DIR,\n        target_size=(IMG_WIDTH, IMG_HEIGHT),\n        batch_size=32,\n        class_mode='categorical')\n"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"5ba1d118-9348-ded8-ddae-cec6dc892202"},"outputs":[],"source":"callbacks = [ModelCheckpoint(MODEL_WEIGHTS_FILE, monitor='val_acc', save_best_only=True)]\nhistory = model.fit_generator(\n        train_generator,\n        callbacks = callbacks,\n        samples_per_epoch=NB_TRAIN_SAMPLES,\n        nb_epoch=NB_EPOCH,\n        validation_data=validation_generator,\n        nb_val_samples=NB_VALIDATION_SAMPLES)\n"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"452f0f29-2c6e-ab9c-f73d-36e48149e93e"},"outputs":[],"source":""}],"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}