{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np \nimport pandas as pd \nimport os\nimport tensorflow as tf\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport keras\nfrom keras.preprocessing import image\nfrom keras.models import Sequential\nfrom keras.layers import Conv2D, MaxPool2D, Flatten,Dense,Dropout,BatchNormalization\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.applications import VGG16, InceptionResNetV2, ResNet50, Xception\nimport cv2\nfrom PIL import Image","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"path = '../input/plant-pathology-2021-fgvc8/'\ntrain_dir = path + 'train_images/'\ntest_dir = path + 'test_images/'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df = pd.read_csv('../input/plant-pathology-2021-fgvc8/train.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.labels.value_counts()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df['labels'].unique()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df['labels'] = df['labels'].astype(str)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(8,5))\nsns.countplot(data = df,y='labels')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def plot_examples(label):\n    fig, ax = plt.subplots(1, 5, figsize=(25, 15))\n    ax = ax.ravel()\n    for i in range(5):\n        idx = df[df['labels']==label].index[i]\n        image = cv2.imread(train_dir+df.loc[idx, 'image'])\n        \n        image =cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n        ax[i].imshow(image)\n        ax[i].set_title(label)\n        ax[i].set_xticklabels([])\n        ax[i].set_yticklabels([])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"for labels in list(df['labels'].unique()):\n    plot_examples(labels)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_datagen  = ImageDataGenerator(rotation_range = 180,\n                                   width_shift_range = 0.1,\n                                   height_shift_range = 0.1,\n                                   horizontal_flip = True,\n                                   rescale = 1./255,\n                                   zoom_range = 0.2,\n                                   validation_split = 0.2)\ntest_datagen  = ImageDataGenerator(rescale = 1./255,\n                                   validation_split = 0.2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_generator = train_datagen.flow_from_dataframe(dataframe = df,\n                                                   directory = train_dir,\n                                                   target_size = (150,150),\n                                                   x_col = 'image',\n                                                   y_col = 'labels',\n                                                   batch_size = 256,\n                                                   color_mode = 'rgb',\n                                                   class_mode = 'categorical',\n                                                   subset = 'training')\n\ntest_generator = test_datagen.flow_from_dataframe(dataframe = df,\n                                                 directory = train_dir,\n                                                 target_size = (150,150),\n                                                 x_col = 'image',\n                                                 y_col = 'labels',\n                                                 batch_size = 256,\n                                                 color_mode = 'rgb',\n                                                 class_mode = 'categorical',\n                                                 subset = 'validation')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\"\"\"model = tf.keras.models.Sequential([\n    tf.keras.layers.Conv2D(64, (3,3), activation = 'relu', padding = 'Same',input_shape = [150,150,3]),\n    tf.keras.layers.MaxPooling2D(2, 2),\n    tf.keras.layers.Dropout(0.25),\n    \n    tf.keras.layers.Conv2D(128, (3,3), activation = 'relu',padding = 'Same'),\n    tf.keras.layers.MaxPooling2D(2,2),\n    tf.keras.layers.Dropout(0.25),\n    \n    tf.keras.layers.Conv2D(128, (3,3), activation = 'relu',padding = 'Same'),\n    tf.keras.layers.MaxPooling2D(2,2),\n    tf.keras.layers.Dropout(0.25),\n    \n    tf.keras.layers.Conv2D(128, (3,3), activation = 'relu',padding = 'Same'),\n    tf.keras.layers.MaxPooling2D(2,2),\n    tf.keras.layers.Dropout(0.25),\n    \n    tf.keras.layers.Conv2D(256, (3,3), activation = 'relu',padding = 'Same'),\n    tf.keras.layers.MaxPooling2D(2,2),\n    tf.keras.layers.Dropout(0.25),\n    \n    \n    tf.keras.layers.Flatten(),\n    tf.keras.layers.Dense(1024,activation = 'relu'),\n    tf.keras.layers.Dense(12, activation = 'softmax')\n])\"\"\"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = tf.keras.Sequential()\nmodel.add(VGG16(include_top = False,weights = '../input/keras-pretrained-models/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5',input_shape= (150,150,3)))\nmodel.add(MaxPool2D(padding = 'same'))\nmodel.add(BatchNormalization(axis=-1))\nmodel.add(Flatten())\nmodel.add(Dense(12,activation = 'softmax'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from tensorflow.keras.optimizers import RMSprop,Adam\nepochs = 10\nbatch_size = 256\noptimizer = Adam(lr = 0.001)\nmodel.compile(loss = 'categorical_crossentropy',\n              optimizer = optimizer,\n             metrics = ['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"history = model.fit_generator(train_generator,epochs = epochs,validation_data = test_generator)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","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}