{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"<br>\n<h1 style = \"font-size:40px; font-family:Garamond ; font-weight : normal; background-color: #C66363 ; color : #E8D6D8; text-align: center; border-radius: 100px 100px;\">CONTENT </h1>\n<br>\n\n* [Add Libaries](#1)\n* [Preproccess](#2)\n* [Prepare And Run Model](#3)\n* [Visualize Model Results](#4)","metadata":{}},{"cell_type":"markdown","source":"<a id=\"1\"> </a>\n# Add Libaries\n","metadata":{}},{"cell_type":"code","source":"import numpy as np \nimport pandas as pd \nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport tensorflow_addons as tfa\n\nfrom collections import Counter\nfrom tensorflow import keras\nfrom keras.models import Sequential,load_model\nfrom keras.layers import Dense,GlobalAveragePooling2D,Flatten,Conv2D,BatchNormalization,Dropout,MaxPooling2D,Activation\nfrom keras.preprocessing import image\nfrom keras.preprocessing.image import ImageDataGenerator as Imgen\nfrom sklearn.metrics import f1_score\nfrom tensorflow.keras.callbacks import EarlyStopping\nfrom keras.preprocessing.image import ImageDataGenerator\n\nfrom PIL import Image\nfrom sklearn.metrics import confusion_matrix,classification_report\nimport cv2\nimport os\n\nimport warnings\nwarnings.filterwarnings(\"ignore\")","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-04-06T12:49:54.532334Z","iopub.execute_input":"2022-04-06T12:49:54.532648Z","iopub.status.idle":"2022-04-06T12:49:54.539173Z","shell.execute_reply.started":"2022-04-06T12:49:54.532619Z","shell.execute_reply":"2022-04-06T12:49:54.538188Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"2\"> </a>\n# Preproccess\n","metadata":{}},{"cell_type":"code","source":"train_df = pd.read_csv(\"../input/plant-pathology-2021-fgvc8/train.csv\")\ntrain_path = \"../input/plant-pathology-2021-fgvc8/train_images\"\ntest_path=\"../input/plant-pathology-2021-fgvc8/sample_submission.csv\"\ntest = pd.read_csv(test_path)\ntest","metadata":{"execution":{"iopub.status.busy":"2022-04-06T12:49:54.570690Z","iopub.execute_input":"2022-04-06T12:49:54.571012Z","iopub.status.idle":"2022-04-06T12:49:54.598493Z","shell.execute_reply.started":"2022-04-06T12:49:54.570988Z","shell.execute_reply":"2022-04-06T12:49:54.597593Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(15,30))\ni=1\nfor idx,s in train_df.head(9).iterrows():\n    img_path = os.path.join(train_path,s['image'])\n    img=cv2.imread(img_path)\n    img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)\n    \n    fig=plt.subplot(9,3,i)\n    fig.imshow(img)\n    fig.set_title(s['labels'])\n    i+=1","metadata":{"execution":{"iopub.status.busy":"2022-04-06T12:49:54.599859Z","iopub.execute_input":"2022-04-06T12:49:54.600322Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.head(9)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.info()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"labels = train_df[\"labels\"].value_counts().index\ndata = train_df[\"labels\"].value_counts().values","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(labels)\nprint(data)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class_num = len(train_df[\"labels\"].value_counts())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"datagen = ImageDataGenerator(rescale=1/255.0,\n                            rotation_range=5,\n                            zoom_range=0.1,\n                            shear_range=0.05,\n                            horizontal_flip=True,\n                            validation_split=0.2)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_ds = datagen.flow_from_dataframe(\n    train_df,\n    directory='../input/resized-plant2021/img_sz_256',\n    subset='training',\n    x_col='image',\n    y_col='labels',\n    target_size=(224,224),\n    color_mode='rgb',\n    class_mode='categorical',\n    batch_size=32,\n    shuffle=True,\n    seed=444\n    )\n#'../input/plant-pathology-2021-fgvc8/train_images'\nvalid_ds = datagen.flow_from_dataframe(\n    train_df,\n    directory='../input/resized-plant2021/img_sz_256',\n    subset='validation',\n    x_col='image',\n    y_col='labels',\n    target_size=(224,224),\n    color_mode='rgb',\n    class_mode='categorical',\n    batch_size=32,\n    shuffle=True,\n    seed=444\n    )\n\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x,y = next(train_ds)\nx.shape","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"3\"> </a>\n# Prepare And Run Model","metadata":{}},{"cell_type":"code","source":"from tensorflow.keras.applications.vgg16 import VGG16","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"vgg = VGG16()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Sequential()\nvgg_layers = vgg.layers\n\nfor i in range(len(vgg_layers)-1):\n    model.add(vgg_layers[i])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for l in vgg_layers:\n    l.trainable = False","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.add(Dense(class_num , activation = \"softmax\"))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.summary()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow_addons as tfa\nimport keras as keras\n\nf1 = tfa.metrics.F1Score(num_classes=6,average='macro')\n\nmetrics = [\n    keras.metrics.CategoricalAccuracy(name='accuracy'),\n    keras.metrics.Precision(name='precision'),\n    keras.metrics.Recall(name='recall')\n    ] \n\nmodel.compile(optimizer='adam', loss='binary_crossentropy',metrics=[metrics])\nbatch_size = 32\n\nes=EarlyStopping(patience=4, monitor=f1, mode='max',restore_best_weights=True)\nhist = model.fit_generator(generator=train_ds,\n                           validation_data=valid_ds,\n                           epochs=200,\n                           steps_per_epoch=train_ds.samples//128,\n                           validation_steps=valid_ds.samples//128,\n                           callbacks=[es])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data = datagen.flow_from_dataframe(\n    test,\n    directory='../input/plant-pathology-2021-fgvc8/test_images',\n    x_col='image',\n    y_col=None,\n    color_mode='rgb',\n    target_size=(224,224),\n    class_mode=None,\n    shuffle=False\n)\npredictions = model.predict(test_data)\nprint(predictions)\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"4\"> </a>\n# Visualize Model Results","metadata":{}},{"cell_type":"code","source":"print(hist.history.keys())\n\nprint(hist.history['accuracy'])\nprint(hist.history['loss'])\nprint(hist.history['recall'])\nprint(hist.history['precision'])\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%matplotlib inline\nplt.rc('font', size=20)\nplt.figure(figsize=(15,12))\nepoch_list = list(range(1, len(hist.history['accuracy']) + 1))\nplt.plot(epoch_list, hist.history['accuracy'],label='accuracy')\nplt.legend()\nplt.show()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%matplotlib inline\nplt.rc('font', size=20)\nplt.figure(figsize=(15,12))\nepoch_list = list(range(1, len(hist.history['loss']) + 1))\nplt.plot(epoch_list, hist.history['loss'],label='loss')\nplt.legend()\nplt.show()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%matplotlib inline\nplt.rc('font', size=20)\nplt.figure(figsize=(15,12))\nepoch_list = list(range(1, len(hist.history['recall']) + 1))\nplt.plot(epoch_list, hist.history['recall'],label='recall')\nplt.legend()\nplt.show()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%matplotlib inline\nplt.rc('font', size=20)\nplt.figure(figsize=(15,12))\nepoch_list = list(range(1, len(hist.history['precision']) + 1))\nplt.plot(epoch_list, hist.history['precision'],label='precision')\nplt.legend()\nplt.show()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#f1_score\n\"\"\"plt.figure(figsize=(15,6))\nepoch_list = list(range(1,len(hist.history['f1_score'])+1))\nplt.plot(epoch_list, hist.history['f1_score'],label='f1_score')\nplt.plot(epoch_list, hist.history['val_f1_score'],label='val_f1_score')\nplt.xlabel('epoches')\nplt.ylabel('f1')\nplt.legend()\nplt.show()\"\"\"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#av\n''''arr1 = hist.history['loss']\nresult1 = sum(arr1)\nprint(f\"loss_av : {result1 / len(arr1)}\")\n\narr2 = hist.history['accuracy']\nresult2 = sum(arr2)\nprint(f\"accuracy_av : {result2 / len(arr2)}\")\n\narr3 = hist.history['val_loss']\nresult3 = sum(arr3)\nprint(f\"val_loss_av : {result3 / len(arr3)}\")\n\narr4 = hist.history['val_accuracy']\nresult4 = sum(arr4)\nprint(f\"val_accuracy_av : {result4 / len(arr4)}\")'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}