{"cells":[{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nfrom tensorflow.keras.layers import Dense, Dropout,Activation, Conv2D, MaxPooling2D, Flatten\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.models import Sequential\nfrom keras.callbacks import EarlyStopping\nimport tensorflow as tf\nfrom PIL import Image \nimport os\nimport matplotlib.pyplot as plt\nfrom tensorflow.keras.applications.vgg16 import VGG16\nfrom tensorflow.keras.preprocessing import image\n#from tensorflow.keras.applications.VGG import preprocess_input\n\nfrom tensorflow.keras.optimizers import Adam","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Loading Dataset"},{"metadata":{"trusted":true},"cell_type":"code","source":"\ntrain = pd.read_csv('../input/cassava-leaf-disease-classification/train.csv')\ntrain['label'] = train['label'].astype('string')\ntrain.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"names_of_disease = pd.read_json('../input/cassava-leaf-disease-classification/label_num_to_disease_map.json', typ='series')\nnames_of_disease","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(17, 12))\nfor i in range(8):\n    plt.subplot(4, 4, i + 1)\n    image = Image.open('../input/cassava-leaf-disease-classification/train_images/'+ train.iloc[i]['image_id'])\n    array = np.array(image)\n    plt.imshow(array)\n    label=train.iloc[i]['label']\n    plt.title(f'{names_of_disease[int(label)]}')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sizes = []\nfor i in range(1, len(train), 250):\n    image = Image.open('../input/cassava-leaf-disease-classification/train_images/' + train.iloc[i]['image_id'])\n    array = np.array(image)\n    sizes.append(array.shape)\nprint('Picture size', set(sizes))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Data Augmentation"},{"metadata":{},"cell_type":"markdown","source":"### data splitting 0.2"},{"metadata":{"trusted":true},"cell_type":"code","source":"datagen = ImageDataGenerator(validation_split=0.2,\n                             vertical_flip=True,\n                             rotation_range=90,\n                             width_shift_range=0.2,\n                             height_shift_range=0.2,\n                             horizontal_flip=True)\ntrain_datagen_flow = datagen.flow_from_dataframe(\n    dataframe=train,\n    directory='../input/cassava-leaf-disease-classification/train_images',\n    x_col='image_id',\n    y_col='label',\n    target_size=(300, 300),\n    batch_size=20,\n    subset='training',\n    seed=0)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"valid_datagen_flow = datagen.flow_from_dataframe(\n    dataframe=train,\n    directory='../input/cassava-leaf-disease-classification/train_images',\n    x_col='image_id',\n    y_col='label',\n    target_size=(300, 300),\n    batch_size=20,    \n    subset='validation',\n    seed=0)\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Training with vgg16"},{"metadata":{},"cell_type":"markdown","source":"### Optimizer: Adam"},{"metadata":{},"cell_type":"markdown","source":"### learning rate=0.0002"},{"metadata":{"trusted":true},"cell_type":"code","source":"import h5py\nmodel=Sequential()\n\noptimizer = Adam(lr=0.0002)\nbackbone = VGG16(weights='../input/vgg16-weights/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5', include_top=False,  pooling='max')\n\n                        \nmodel.add(backbone)\nmodel.add(Dense(5, activation='softmax'))\nmodel.compile(loss=\"categorical_crossentropy\", \n              optimizer=optimizer, \n              metrics=[\"accuracy\"])\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\nmodel.fit_generator(train_datagen_flow,\n                    validation_data=valid_datagen_flow, \n                    epochs=10, \n                    verbose=1,shuffle=False)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Submission"},{"metadata":{"trusted":true},"cell_type":"code","source":"submission = pd.DataFrame(columns=['image_id','label'])\nfor image_name in os.listdir('../input/cassava-leaf-disease-classification/train_images'):\n    image_path = os.path.join('../input/cassava-leaf-disease-classification/train_images', image_name)\n    image = tf.keras.preprocessing.image.load_img(image_path)\n    resized_image = image.resize((300,300))\n    numpied_image = np.expand_dims(resized_image, 0)\n    tensored_image = tf.cast(numpied_image, tf.float32)\n    submission = submission.append(pd.DataFrame({'image_id': image_name,\n                                                 'label': model.predict_classes(tensored_image)}))\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission.to_csv('/kaggle/working/submission.csv', index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission.head()","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}