{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"collapsed":true},"cell_type":"code","source":"import time\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom keras.callbacks import TensorBoard\n\nimport numpy as np\nimport PIL\nimport os\nimport matplotlib.pyplot as plt","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","collapsed":true,"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"def set_trainable(model, flag = False):\n    for layer in model.layers:\n        layer.trainable = flag","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"d11e6ef22c8be5ede8c297de5e588f9249584c97"},"cell_type":"code","source":"def path_join(dirname, filenames):\n    return[os.path.join(dirname,filename) for filename in filenames]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c33b1305bc221f7eb5ae94de921c25fa70a23847"},"cell_type":"code","source":"!ls ../input/final/final/","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"e4ab8a02da7492cbccfeaf1160736e590d5e120e"},"cell_type":"code","source":"batch_size = 20\nnum_classes = 3\nepochs = 50","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"13594766854989988a1d410a2c582f54408cd5ea"},"cell_type":"code","source":"train_dir = '../input/final/final/train'\nval_dir = '../input/final/final/valid'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"be67a27c4a44afcfe54b598fcd24a87f0a9f370f"},"cell_type":"code","source":"input_shape = (300,300)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"91c9639c8bc87ba69ae9ecd2d9d5382ce743ebdf"},"cell_type":"code","source":"data_gen_train = keras.preprocessing.image.ImageDataGenerator(rescale=1./255, rotation_range=180, zoom_range=[0.9,1.3])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"9ce7ed228097639c918004de0c0024857b50191b"},"cell_type":"code","source":"data_gen_val = keras.preprocessing.image.ImageDataGenerator(rescale=1./255)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c0aa584fe3d1e611eedb5ad5de33b454d922ad94"},"cell_type":"code","source":"generator_train = data_gen_train.flow_from_directory(directory=train_dir, target_size=input_shape, batch_size=70, shuffle=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4a45e28881eb419a2d19b70707c7c781f75bd591"},"cell_type":"code","source":"generator_val = data_gen_val.flow_from_directory(directory=val_dir, target_size=input_shape, batch_size=10, shuffle=True)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"711abcdaa7ac7ee5f6bfe46bae7de9ba01418059"},"cell_type":"markdown","source":"**MODEL CREATION**\n"},{"metadata":{"trusted":true,"_uuid":"a791ffb05d372fdb5d13a599c39b5546588d719c"},"cell_type":"code","source":"pre_model = keras.applications.vgg19.VGG19(include_top=False, weights='imagenet', input_shape=(300,300,3))\npre_model.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"75071e47e0e76bc648bc0185ffc1a343efae81a0"},"cell_type":"code","source":"last_pre_layers = ['block5_pool']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fc9f4105482444c1fcb751702e99cf5131bd1d2d","scrolled":true},"cell_type":"code","source":"for pre_layer in last_pre_layers:\n    \n    pre_layer_output = pre_model.get_layer(pre_layer)\n    ref_model = keras.models.Model(inputs=pre_model.input, outputs=pre_layer_output.output)\n    \n    set_trainable(ref_model, flag=False)\n    \n    dense_values = [1024]\n    \n    for dense_val in dense_values:\n        \n        NAME = \"x-lr-05-ep-200-retro-pre_layer-{}-dense-{}-time-{}\".format(pre_layer, dense_val, int(time.time()))\n        tensorboard = TensorBoard(log_dir='logs/{}'.format(NAME))\n#         transfer_model.add(tf.layers.batch_normalization(input=ref_model))\n        transfer_model = keras.models.Sequential()\n        transfer_model.add(ref_model)\n        transfer_model.add(keras.layers.Flatten())\n        transfer_model.add(keras.layers.Dense(1024, activation='relu'))\n        transfer_model.add(keras.layers.Dense(512, activation='relu'))\n        transfer_model.add(keras.layers.Dense(256, activation='relu'))\n        transfer_model.add(keras.layers.Dense(128, activation='relu'))\n        transfer_model.add(keras.layers.Dense(64, activation='relu'))\n        transfer_model.add(keras.layers.Dense(3, activation='softmax'))\n        optimizer = keras.optimizers.Adam(lr=0.00001)\n        loss = 'categorical_crossentropy'\n        metrics = ['accuracy']\n        transfer_model.compile(optimizer=optimizer, loss = loss, metrics=metrics)\n\n        history = transfer_model.fit_generator(generator=generator_train, epochs=epochs, steps_per_epoch=5, validation_data=generator_val, validation_steps=3)\n#         transfer_model.fit(train_dataset, epochs=200, steps_per_epoch=10, validation_data=val_dataset, validation_steps=10, callbacks=[tensorboard])\n#         keras.models.save_model(transfer_model, filepath='models/{}.model'.format(NAME))\n        ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1e0be1bb4f6ebc6fc1bf80c7e1d9eb9ad7a6f336"},"cell_type":"code","source":"acc = history.history['acc']\nval_acc = history.history['val_acc']\n\nloss = history.history['loss']\nval_loss = history.history['val_loss']\n\nepochs_range = range(epochs)\n\nplt.figure(figsize=(8, 8))\nplt.subplot(1, 2, 1)\nplt.plot(epochs_range, acc, label='Training Accuracy')\nplt.plot(epochs_range, val_acc, label='Validation Accuracy')\nplt.legend(loc='lower right')\nplt.title('Training and Validation Accuracy')\n\nplt.subplot(1, 2, 2)\nplt.plot(epochs_range, loss, label='Training Loss')\nplt.plot(epochs_range, val_loss, label='Validation Loss')\nplt.legend(loc='upper right')\nplt.title('Training and Validation Loss')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"b20136fc8e017efb7a3989101014edfc772d6c8c"},"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}