{"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":"code","source":"import os\nimport numpy as np\nimport pandas as pd\ntrain = pd.read_csv('../input/plant-pathology-2021-fgvc8/train.csv')\ntrain.head()","metadata":{"execution":{"iopub.status.busy":"2021-07-11T15:24:14.689116Z","iopub.execute_input":"2021-07-11T15:24:14.689439Z","iopub.status.idle":"2021-07-11T15:24:14.738605Z","shell.execute_reply.started":"2021-07-11T15:24:14.689409Z","shell.execute_reply":"2021-07-11T15:24:14.737652Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.preprocessing import MultiLabelBinarizer\nmb = MultiLabelBinarizer().fit(train.labels.apply(lambda x : x.split()))\nlabels = pd.DataFrame(mb.transform(train.labels.apply(lambda x : x.split())), columns = mb.classes_)\nnew_train = pd.concat([train['image'], labels], axis=1)\nnew_train.head()","metadata":{"execution":{"iopub.status.busy":"2021-07-11T15:24:17.627698Z","iopub.execute_input":"2021-07-11T15:24:17.628017Z","iopub.status.idle":"2021-07-11T15:24:17.782744Z","shell.execute_reply.started":"2021-07-11T15:24:17.627990Z","shell.execute_reply":"2021-07-11T15:24:17.781780Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.preprocessing.image import ImageDataGenerator\npre = ImageDataGenerator(\n    rescale = 1/255.,\n    rotation_range = 15,\n    width_shift_range=0.2, \n    height_shift_range=0.2,\n    zoom_range = 0.2,\n    shear_range=0.3,\n    featurewise_center=True,\n    featurewise_std_normalization=True,\n    horizontal_flip=True,\n    vertical_flip=True,\n    validation_split= 0.2,)\npos = ImageDataGenerator(rescale = 1./255)","metadata":{"execution":{"iopub.status.busy":"2021-07-11T15:24:20.539933Z","iopub.execute_input":"2021-07-11T15:24:20.540252Z","iopub.status.idle":"2021-07-11T15:24:24.628704Z","shell.execute_reply.started":"2021-07-11T15:24:20.540222Z","shell.execute_reply":"2021-07-11T15:24:24.627845Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"seed = 88 # 88\ntarget_size = (384, 384)\nbatch_size = 16\nresize_img = '../input/resized-plant2021/img_sz_384'\ntest_img = '../input/plant-pathology-2021-fgvc8/test_images'\nsubmission = pd.read_csv('../input/plant-pathology-2021-fgvc8/sample_submission.csv')\nsubmission.head()","metadata":{"execution":{"iopub.status.busy":"2021-07-11T15:24:29.436223Z","iopub.execute_input":"2021-07-11T15:24:29.436590Z","iopub.status.idle":"2021-07-11T15:24:29.456460Z","shell.execute_reply.started":"2021-07-11T15:24:29.436541Z","shell.execute_reply":"2021-07-11T15:24:29.455483Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ntrain_generator = pre.flow_from_dataframe(\n                  new_train,\n                  directory = resize_img, \n                  x_col = 'image',\n                  y_col = new_train.columns.tolist()[1:],\n                  subset = \"training\",\n                  color_mode = \"rgb\",\n                  target_size = target_size,\n                  class_mode = \"raw\",\n                  batch_size = batch_size,\n                  shuffle = True,\n                  seed = seed,)\nvalid_generator = pre.flow_from_dataframe(\n                  new_train,\n                  directory = resize_img,\n                  x_col = 'image',\n                  y_col = new_train.columns.tolist()[1:],\n                  subset = \"validation\",\n                  color_mode = \"rgb\",\n                  target_size = target_size,\n                  class_mode = \"raw\",\n                  batch_size = batch_size,\n                  shuffle = True,\n                  seed = seed,)\ntest_generator = pos.flow_from_dataframe(\n                  submission,\n                  directory = test_img,\n                  x_col = 'image',\n                  y_col = 'labels',\n                  class_mode = None,\n                  batch_size=1,\n                  target_size = target_size,\n                  color_mode=\"rgb\",\n                  shuffle = False,\n                  seed = seed,)\n","metadata":{"execution":{"iopub.status.busy":"2021-07-11T15:24:33.973521Z","iopub.execute_input":"2021-07-11T15:24:33.973864Z","iopub.status.idle":"2021-07-11T15:24:57.808768Z","shell.execute_reply.started":"2021-07-11T15:24:33.973836Z","shell.execute_reply":"2021-07-11T15:24:57.807927Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n# import matplotlib.pyplot as plt\n# example = next(train_generator)\n# print(example[0].shape)\n# plt.imshow(example[0][0,:,:,:])\n# plt.show()\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\"\"\"\nimport matplotlib.pyplot as plt\nexample = next(test_generator)\nprint(example[0].shape)\nplt.imshow(example[0])\nplt.show()\n\"\"\"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import tensorflow as tf\n# from tensorflow import keras\n# from tensorflow.keras.applications import EfficientNetB4\n# from tensorflow.keras import layers, optimizers\n# from tensorflow.keras.layers import Dense, Dropout, GlobalAveragePooling2D, BatchNormalization\n# from keras import Model\n# base_model = EfficientNetB4(include_top=False, \n#                 weights='None',\n#                 pooling='avg', \n#                 input_shape=(384,384,3))","metadata":{"execution":{"iopub.status.busy":"2021-07-11T15:25:08.874728Z","iopub.execute_input":"2021-07-11T15:25:08.875065Z","iopub.status.idle":"2021-07-11T15:25:09.121272Z","shell.execute_reply.started":"2021-07-11T15:25:08.875037Z","shell.execute_reply":"2021-07-11T15:25:09.119722Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\"\"\"\nmodel_pre = tf.keras.Sequential([\n        base_model,\n        layers.BatchNormalization(),\n        layers.Dense(32,activation='relu'),\n        layers.Dropout(0.4),\n#         layers.Dense(12,activation='relu'),\n#         layers.Dropout(0.4),\n        layers.Dense(6,activation='sigmoid')\n])\"\"\"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\"\"\"\nfrom keras.callbacks import ModelCheckpoint, EarlyStopping\nmodel_pre.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001, decay=0.001/20),loss='binary_crossentropy',metrics=['accuracy'])\nmodel_checkpoint = ModelCheckpoint(\n            filepath=\"./B4.h5\", \n            mode='min',\n            monitor='val_loss', \n            save_best_only=True, \n            verbose=1)\nearly_stopping = EarlyStopping(\n            monitor='val_loss', \n            min_delta=0,\n            patience=5, \n            verbose=1, \n            restore_best_weights=True)\nmodel_pre = model_pre.fit(train_generator,\n            validation_data=valid_generator,\n            epochs=20, \n            callbacks=[model_checkpoint, early_stopping])\n\"\"\"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\"\"\"\nimport matplotlib.pyplot as plt\n\npre_history = model_pre.history\n\nplt.figure()\nplt.plot(pre_history['accuracy'])\nplt.plot(pre_history['val_accuracy'])\nplt.title('model accuracy')\nplt.ylabel('accuracy')\nplt.xlabel('epoch')\nplt.legend(['train', 'validation'])\nplt.savefig('accuracy')\nplt.show()\n\"\"\"\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\"\"\"\nplt.figure()\nplt.plot(pre_history['loss'])\nplt.plot(pre_history['val_loss'])\nplt.title('model loss')\nplt.ylabel('loss')\nplt.xlabel('epoch')\nplt.legend(['train', 'validation'])\nplt.savefig('loss')\nplt.show()\n\"\"\"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#\nimport keras\ndef load_model():\n    model_pre = keras.models.load_model(\"../input/384-b4h5/384_B4.h5\")\n    return model_pre\nmodel = load_model()\n","metadata":{"execution":{"iopub.status.busy":"2021-07-11T15:25:27.859039Z","iopub.execute_input":"2021-07-11T15:25:27.859364Z","iopub.status.idle":"2021-07-11T15:25:39.077532Z","shell.execute_reply.started":"2021-07-11T15:25:27.859335Z","shell.execute_reply":"2021-07-11T15:25:39.076700Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from keras.callbacks import ModelCheckpoint, EarlyStopping\n# base_model.trainable = True\n# model_checkpoint = ModelCheckpoint(\n#             filepath=\"./384_B4.h5\", \n#             mode='min',\n#             monitor='val_loss', \n#             save_best_only=True, \n#             verbose=1)\n# early_stopping = EarlyStopping(\n#             monitor='val_loss', \n#             min_delta=0,\n#             patience=5, \n#             verbose=1, \n#             restore_best_weights=True)\n\n# model.compile(\n#     optimizer=keras.optimizers.Adam(1e-5, decay=1e-5/10),\n#     loss=keras.losses.BinaryCrossentropy(from_logits=True),\n#     metrics=[\"accuracy\"])\n# model = model.fit(\n#     train_generator,\n#     validation_data=valid_generator,\n#     epochs=3,\n#     callbacks=[model_checkpoint,early_stopping])    \n\n","metadata":{"execution":{"iopub.status.busy":"2021-07-11T11:58:04.755416Z","iopub.execute_input":"2021-07-11T11:58:04.755782Z","iopub.status.idle":"2021-07-11T12:44:37.075525Z","shell.execute_reply.started":"2021-07-11T11:58:04.755752Z","shell.execute_reply":"2021-07-11T12:44:37.074369Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import matplotlib.pyplot as plt\n# model_history = model.history\n# # model.save = ('384_B4.h5')\n# plt.figure()\n# plt.plot(model_history['accuracy'])\n# plt.plot(model_history['val_accuracy'])\n# plt.title('model accuracy')\n# plt.ylabel('accuracy')\n# plt.xlabel('epoch')\n# plt.legend(['train', 'validation'])\n# plt.savefig('accuracy')\n# plt.show()\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#\nmodel = load_model()\npred = model.predict(test_generator)","metadata":{"execution":{"iopub.status.busy":"2021-07-11T15:25:45.472705Z","iopub.execute_input":"2021-07-11T15:25:45.473057Z","iopub.status.idle":"2021-07-11T15:26:05.242700Z","shell.execute_reply.started":"2021-07-11T15:25:45.473019Z","shell.execute_reply":"2021-07-11T15:26:05.241624Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"perdict = (pred>0.40)\nn_label = new_train.columns.tolist()[1:]\nanswer = []\n\nfor i in range(perdict.shape[0]):\n    temp = []\n    for j, k in enumerate(n_label):\n        if perdict[i, j]:\n            temp.append(k)\n    answer.append(temp)\n    \nanswer = [' '.join(n) for n in answer]","metadata":{"execution":{"iopub.status.busy":"2021-07-11T15:26:07.695089Z","iopub.execute_input":"2021-07-11T15:26:07.695453Z","iopub.status.idle":"2021-07-11T15:26:07.701735Z","shell.execute_reply.started":"2021-07-11T15:26:07.695417Z","shell.execute_reply":"2021-07-11T15:26:07.700690Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission['labels'] = np.array(answer)\nsubmission","metadata":{"execution":{"iopub.status.busy":"2021-07-11T15:26:14.105463Z","iopub.execute_input":"2021-07-11T15:26:14.105805Z","iopub.status.idle":"2021-07-11T15:26:14.118624Z","shell.execute_reply.started":"2021-07-11T15:26:14.105775Z","shell.execute_reply":"2021-07-11T15:26:14.117448Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2021-07-11T15:26:17.899345Z","iopub.execute_input":"2021-07-11T15:26:17.899695Z","iopub.status.idle":"2021-07-11T15:26:17.910616Z","shell.execute_reply.started":"2021-07-11T15:26:17.899665Z","shell.execute_reply":"2021-07-11T15:26:17.909563Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}