{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import sys\nimport numpy\nimport matplotlib\nimport pandas\nimport numpy as np\nimport tensorflow as tf\nfrom tensorflow.keras import applications\nfrom tensorflow.keras.applications.resnet50 import ResNet50\nfrom tensorflow.keras.applications.mobilenet_v2 import MobileNetV2\nfrom tensorflow.keras.applications.vgg16 import VGG16\nfrom tensorflow.keras.preprocessing import image\nfrom tensorflow.keras.applications.resnet50 import preprocess_input, decode_predictions\nfrom tensorflow.keras.models import Model\nfrom tensorflow.keras.layers import Dense, Lambda\nfrom tensorflow.keras.layers import LeakyReLU\nfrom tensorflow.keras.layers import Conv2D\nfrom tensorflow.keras.layers import GlobalAveragePooling2D, GlobalMaxPooling2D, MaxPooling2D\nfrom tensorflow.keras.layers import Input, Dropout\nfrom tensorflow.keras.layers import Concatenate, Add\nfrom tensorflow.keras.layers import BatchNormalization\nfrom tensorflow.keras.regularizers import l2\nfrom tensorflow.keras.utils import convert_all_kernels_in_model\nfrom tensorflow.keras.utils import get_file\nimport tensorflow.keras.backend as K\nfrom tensorflow.keras.applications.resnet50 import preprocess_input, decode_predictions\nfrom tensorflow.keras.preprocessing import image \nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.optimizers import Adam\nfrom tensorflow.keras.callbacks import ReduceLROnPlateau, EarlyStopping, ModelCheckpoint\nimport matplotlib.pyplot as plt","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"model = VGG16(\n  weights = 'imagenet',\n  include_top = True)\n\nmodel.summary()\n\nepochs = 20\nimg_size = 336\n\ninput_tensor = Input(shape=(img_size, img_size, 3))\n\nbase_model = VGG16(\n    weights='imagenet',\n    include_top = False,\n    input_tensor = input_tensor)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"for layer in base_model.layers:\n    layer.trainable = True\n    \nbase_model.layers[0].trainable = False\nbase_model.layers[1].trainable = False","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x = base_model.output\nx = GlobalAveragePooling2D()(x)\n\n\noutput = Dense(\n    5,\n    activation='softmax')(x)\n\nmodel = Model(\n    inputs=base_model.input,\n    outputs=output)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"image_datagen = ImageDataGenerator(\n    rescale=1./255,\n    #zoom_range=0.1,\n    horizontal_flip = True,\n    vertical_flip = True,\n    validation_split = 0.2\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_generator = image_datagen.flow_from_directory(\n        '../input/cassavaldcvggdirectorybased/cassava-leaf-disease-classification-directory-based/train_images',\n        target_size=(img_size, img_size),\n        batch_size=1,\n        subset=\"training\",\n        seed=42,\n        shuffle=True,\n        class_mode=\"categorical\")\n\nvalid_generator = image_datagen.flow_from_directory(\n        '../input/cassavaldcvggdirectorybased/cassava-leaf-disease-classification-directory-based/train_images',\n        target_size=(img_size, img_size),\n        batch_size=1,\n        subset=\"validation\",\n        seed=42,\n        shuffle=True,\n        class_mode=\"categorical\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(loss='categorical_crossentropy',\n              optimizer = Adam(lr = 3e-5),\n              #optimizer = Adam(),\n              metrics = ['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"callback_sv = tf.keras.callbacks.ModelCheckpoint(\n            'fold-%i.h5', monitor='val_loss', verbose=1, save_best_only=True,\n            save_weights_only=True, mode='min', save_freq='epoch')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"callback_early_stop = tf.keras.callbacks.EarlyStopping(\n    monitor='loss', patience=3)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"callback_reduce = tf.keras.callbacks.ReduceLROnPlateau(\n    monitor='val_loss', factor=0.1, patience=10, verbose=0,\n    mode='auto', min_delta=0.0001, cooldown=0, min_lr=0,)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"history = model.fit_generator(\n                    verbose = 1,\n                    use_multiprocessing = False,\n                    generator = train_generator,\n                    #validation_steps = valid_generator.n // valid_generator.batch_size + 1,\n                    validation_steps = 1000,\n                    validation_data = valid_generator,\n                    #steps_per_epoch = train_generator.n // train_generator.batch_size + 1,\n                    steps_per_epoch = 1000,\n                    epochs = epochs,\n                    callbacks = [callback_early_stop,callback_sv,\n                                 #callback_reduce\n                                ])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.plot(history.history['loss'], label='Training LOSS')\nplt.plot(history.history['val_loss'], label='Validation LOSS')\nplt.plot(history.history['accuracy'], label='Training ACCURACY')\nplt.plot(history.history['val_accuracy'], label='Validation ACCURACY')\nplt.title('Cassava-Leaf-Disease-VGG')\nplt.ylabel('Loss & Accuracy')\nplt.xlabel('Epoch')\nplt.legend(loc=\"upper left\")\nplt.xlim([0, epochs])\nplt.ylim([0, 1])\nplt.show()","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}