{"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":{"id":"5PKEE4HSgvQU","executionInfo":{"status":"ok","timestamp":1626619737830,"user_tz":-480,"elapsed":1020,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"outputId":"9dbe9c7e-ed11-4237-a03f-d6a13082782d","execution":{"iopub.status.busy":"2021-07-19T04:32:11.700718Z","iopub.execute_input":"2021-07-19T04:32:11.701237Z","iopub.status.idle":"2021-07-19T04:32:11.872800Z","shell.execute_reply.started":"2021-07-19T04:32:11.701138Z","shell.execute_reply":"2021-07-19T04:32:11.872042Z"},"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":{"id":"7bvMUPi5gvQZ","executionInfo":{"status":"ok","timestamp":1626619742229,"user_tz":-480,"elapsed":1061,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"outputId":"39fdce43-fb12-4ec5-b621-8ae906645167","execution":{"iopub.status.busy":"2021-07-19T04:34:16.635547Z","iopub.execute_input":"2021-07-19T04:34:16.635970Z","iopub.status.idle":"2021-07-19T04:34:16.706678Z","shell.execute_reply.started":"2021-07-19T04:34:16.635919Z","shell.execute_reply":"2021-07-19T04:34:16.705727Z"},"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":{"id":"04yCGWStgvQa","executionInfo":{"status":"ok","timestamp":1626619748325,"user_tz":-480,"elapsed":2160,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"execution":{"iopub.status.busy":"2021-07-19T04:34:18.679332Z","iopub.execute_input":"2021-07-19T04:34:18.679713Z","iopub.status.idle":"2021-07-19T04:34:25.083377Z","shell.execute_reply.started":"2021-07-19T04:34:18.679682Z","shell.execute_reply":"2021-07-19T04:34:25.082287Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"seed = 88\ntarget_size = (299, 299)\nbatch_size = 32\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')\n\n# colab\n# resize_img = '/content/drive/MyDrive/FGVC8/python工研院課程/專題/data/resize/img_sz_384'\n# test_img = '/content/drive/MyDrive/FGVC8/python工研院課程/專題/data/test_images'\n# submission = pd.read_csv('/content/drive/MyDrive/FGVC8/python工研院課程/專題/data/sample_submission.csv')\n\nsubmission.head()","metadata":{"id":"BYTMk30LgvQb","executionInfo":{"status":"ok","timestamp":1626619786667,"user_tz":-480,"elapsed":689,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"outputId":"3b6024e6-c99a-47a3-b994-bb78338d4b11","execution":{"iopub.status.busy":"2021-07-19T04:34:37.446799Z","iopub.execute_input":"2021-07-19T04:34:37.447220Z","iopub.status.idle":"2021-07-19T04:34:37.473906Z","shell.execute_reply.started":"2021-07-19T04:34:37.447187Z","shell.execute_reply":"2021-07-19T04:34:37.472787Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_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=16,\n                  target_size = target_size,\n                  color_mode=\"rgb\",\n                  shuffle = False,\n                  seed = seed,)","metadata":{"id":"4l7KnWMkgvQb","executionInfo":{"status":"ok","timestamp":1626619952964,"user_tz":-480,"elapsed":152369,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"outputId":"bf369862-2b55-40dc-ffa0-0efa3cb98dba","execution":{"iopub.status.busy":"2021-07-19T04:34:40.603083Z","iopub.execute_input":"2021-07-19T04:34:40.603474Z","iopub.status.idle":"2021-07-19T04:35:27.745775Z","shell.execute_reply.started":"2021-07-19T04:34:40.603442Z","shell.execute_reply":"2021-07-19T04:35:27.744605Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nexample = next(train_generator)\nprint(example[0].shape)\nplt.imshow(example[0][0,:,:,:])\nplt.show()","metadata":{"id":"L6AngUNigvQc","executionInfo":{"status":"ok","timestamp":1626619971652,"user_tz":-480,"elapsed":14298,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"outputId":"cceac606-117f-4449-8887-bbebf735d15e","execution":{"iopub.status.busy":"2021-07-19T04:35:50.266318Z","iopub.execute_input":"2021-07-19T04:35:50.266708Z","iopub.status.idle":"2021-07-19T04:35:51.438650Z","shell.execute_reply.started":"2021-07-19T04:35:50.266676Z","shell.execute_reply":"2021-07-19T04:35:51.437786Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nexample = next(test_generator)\nprint(example[0].shape)\nplt.imshow(example[0])\nplt.show()","metadata":{"id":"ROeCkp8egvQc","executionInfo":{"status":"ok","timestamp":1626619983541,"user_tz":-480,"elapsed":4070,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"outputId":"c58d38e8-a3d9-4037-beae-a06aa5b61e4e","execution":{"iopub.status.busy":"2021-07-19T04:35:54.508729Z","iopub.execute_input":"2021-07-19T04:35:54.509244Z","iopub.status.idle":"2021-07-19T04:35:55.437419Z","shell.execute_reply.started":"2021-07-19T04:35:54.509213Z","shell.execute_reply":"2021-07-19T04:35:55.436382Z"},"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 InceptionV3\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 = InceptionV3(include_top=False, \n#                 weights='imagenet', \n#                 pooling='avg', \n#                 input_shape=(299,299,3))","metadata":{"execution":{"iopub.status.busy":"2021-07-10T06:59:36.799201Z","iopub.execute_input":"2021-07-10T06:59:36.799568Z","iopub.status.idle":"2021-07-10T06:59:45.884222Z","shell.execute_reply.started":"2021-07-10T06:59:36.799535Z","shell.execute_reply":"2021-07-10T06:59:45.882945Z"},"id":"C6hdBE7FgvQd","executionInfo":{"status":"ok","timestamp":1626620012049,"user_tz":-480,"elapsed":6193,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"outputId":"0236bd20-73a8-4854-960a-99945ffd6756","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# model_pre = tf.keras.Sequential([\n#         base_model,\n#         layers.BatchNormalization(),\n#         layers.Dense(32,activation='relu'),\n#         layers.Dropout(0.4),\n#         layers.Dense(16,activation='relu'),\n#         layers.Dropout(0.4),\n#         layers.Dense(6,activation='sigmoid')\n# ])","metadata":{"execution":{"iopub.status.busy":"2021-07-10T07:02:47.885327Z","iopub.execute_input":"2021-07-10T07:02:47.885697Z","iopub.status.idle":"2021-07-10T07:02:49.426387Z","shell.execute_reply.started":"2021-07-10T07:02:47.885638Z","shell.execute_reply":"2021-07-10T07:02:49.425234Z"},"id":"6UdGtZu0gvQd","executionInfo":{"status":"ok","timestamp":1626620093229,"user_tz":-480,"elapsed":701,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from keras.callbacks import ModelCheckpoint, EarlyStopping\n# model_pre.compile(\n#     optimizer=tf.keras.optimizers.Adam(learning_rate=1e-5),\n#     loss='binary_crossentropy',\n#     metrics=[tf.keras.metrics.BinaryAccuracy(name='binary_accuracy'),tf.keras.metrics.AUC(name='auc')])\n# model_checkpoint = ModelCheckpoint(\n#             filepath=\"/content/drive/MyDrive/FGVC8/python工研院課程/專題/data/0718_299_incv3.h5\", \n#             mode='max',\n#             monitor='val_auc', \n#             save_best_only=True, \n#             save_freq=\"epoch\", \n#             verbose=1)\n# early_stopping = EarlyStopping(\n#             monitor='val_loss',\n#             mode='min', \n#             min_delta=0.003,\n#             patience=10, \n#             verbose=1, \n#             restore_best_weights=True)\n\n# rlr = keras.callbacks.ReduceLROnPlateau(\n#             monitor='val_auc', \n#             mode='auto',\n#             factor=0.2, \n#             patience=2, \n#             verbose=1,\n#             min_delta=0.0001)\n\n# model_pre = model_pre.fit(train_generator,\n#             validation_data=valid_generator,\n#             steps_per_epoch=(train_generator.samples//batch_size),\n#             validation_steps=(valid_generator.samples//batch_size),\n#             epochs=30,\n#             callbacks=[model_checkpoint, early_stopping])","metadata":{"execution":{"iopub.status.busy":"2021-07-10T07:03:02.576350Z","iopub.execute_input":"2021-07-10T07:03:02.576798Z"},"id":"Td-9DK7zgvQe","executionInfo":{"status":"ok","timestamp":1626638760566,"user_tz":-480,"elapsed":18642249,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"outputId":"536cf488-fab5-4698-d2ca-9afd5f9117a4","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import matplotlib.pyplot as plt\n\n# pre_history = model_pre.history\n\n# plt.figure()\n# plt.plot(pre_history['binary_accuracy'])\n# plt.plot(pre_history['val_binary_accuracy'])\n# plt.title('model binary_accuracy')\n# plt.ylabel('accuracy')\n# plt.xlabel('epoch')\n# plt.legend(['train', 'validation'])\n# plt.savefig('accuracy')\n# plt.show()","metadata":{"id":"0VXsYb6GgvQe","executionInfo":{"status":"ok","timestamp":1626638760568,"user_tz":-480,"elapsed":20,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"outputId":"94756d1f-df95-4a91-8449-97bb15d24978","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# pre_history = model_pre.history\n\n# plt.figure()\n# plt.plot(pre_history['auc'])\n# plt.plot(pre_history['val_auc'])\n# plt.title('model auc')\n# plt.ylabel('auc')\n# plt.xlabel('epoch')\n# plt.legend(['train', 'validation'])\n# plt.savefig('auc')\n# plt.show()","metadata":{"id":"ToWqNS_SgvQf","executionInfo":{"status":"ok","timestamp":1626638761178,"user_tz":-480,"elapsed":625,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"outputId":"1e79bd0d-2a6f-4507-eb3c-8204d7642feb","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#\nimport keras\ndef load_model():\n    model_pre = keras.models.load_model(\"../input/0718-299-invc3/0718_299_incv3.h5\")\n    return model_pre\nmodel = load_model()","metadata":{"id":"vmLrqBzKgvQf","executionInfo":{"status":"ok","timestamp":1626638773843,"user_tz":-480,"elapsed":12668,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"execution":{"iopub.status.busy":"2021-07-19T04:37:19.459866Z","iopub.execute_input":"2021-07-19T04:37:19.460359Z","iopub.status.idle":"2021-07-19T04:37:27.006748Z","shell.execute_reply.started":"2021-07-19T04:37:19.460322Z","shell.execute_reply":"2021-07-19T04:37:27.005662Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# base_model.trainable = True\n\n# test_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=4,\n#                   target_size = target_size,\n#                   color_mode=\"rgb\",\n#                   shuffle = False,\n#                   seed = seed,)\n\n# model = model.fit(\n#     train_generator,\n#     validation_data=valid_generator,\n#     steps_per_epoch=(train_generator.samples//batch_size),\n#     validation_steps=(valid_generator.samples//batch_size),\n#     epochs=30,\n#     callbacks=[model_checkpoint, early_stopping])","metadata":{"id":"YYdWiDRhgvQg","executionInfo":{"status":"ok","timestamp":1626650933922,"user_tz":-480,"elapsed":12160089,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"outputId":"175fe149-a3d0-408b-ef61-8125021fcd3a","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import matplotlib.pyplot as plt\n# model_history = model.history\n\n# plt.figure()\n# plt.plot(model_history['binary_accuracy'])\n# plt.plot(model_history['val_binary_accuracy'])\n# plt.title('model binary_accuracy')\n# plt.ylabel('accuracy')\n# plt.xlabel('epoch')\n# plt.legend(['train', 'validation'])\n# plt.savefig('accuracy')\n# plt.show()","metadata":{"id":"kd18U63FgvQg","executionInfo":{"status":"ok","timestamp":1626650933924,"user_tz":-480,"elapsed":12,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"outputId":"36fb6b0d-e7bd-4ee8-a3d3-c41e893cf8bf","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#\nmodel = load_model()\npred = model.predict(test_generator)","metadata":{"id":"J9fcnq_hgvQh","executionInfo":{"status":"ok","timestamp":1626650954319,"user_tz":-480,"elapsed":20402,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"execution":{"iopub.status.busy":"2021-07-19T04:37:27.009081Z","iopub.execute_input":"2021-07-19T04:37:27.009418Z","iopub.status.idle":"2021-07-19T04:37:36.297099Z","shell.execute_reply.started":"2021-07-19T04:37:27.009387Z","shell.execute_reply":"2021-07-19T04:37:36.296025Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"perdict = (pred>0.30)\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":{"id":"HVArKwglgvQh","executionInfo":{"status":"ok","timestamp":1626650954320,"user_tz":-480,"elapsed":22,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"execution":{"iopub.status.busy":"2021-07-19T04:38:06.327452Z","iopub.execute_input":"2021-07-19T04:38:06.327864Z","iopub.status.idle":"2021-07-19T04:38:06.335027Z","shell.execute_reply.started":"2021-07-19T04:38:06.327834Z","shell.execute_reply":"2021-07-19T04:38:06.333988Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"np.around(pred, decimals=3, out=None)","metadata":{"id":"SrRRaU59m6Lz","executionInfo":{"status":"ok","timestamp":1626650954320,"user_tz":-480,"elapsed":21,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"outputId":"c696b8e9-480d-4d83-e4f4-9e7f5474eb1a","execution":{"iopub.status.busy":"2021-07-19T04:38:08.004440Z","iopub.execute_input":"2021-07-19T04:38:08.005052Z","iopub.status.idle":"2021-07-19T04:38:08.012700Z","shell.execute_reply.started":"2021-07-19T04:38:08.004993Z","shell.execute_reply":"2021-07-19T04:38:08.011960Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission['labels'] = np.array(answer)\nsubmission","metadata":{"id":"FMGTCJvbgvQh","executionInfo":{"status":"ok","timestamp":1626650954321,"user_tz":-480,"elapsed":13,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"outputId":"4988f614-ab86-415e-a3de-3b917e09cc5b","execution":{"iopub.status.busy":"2021-07-19T04:38:09.491588Z","iopub.execute_input":"2021-07-19T04:38:09.492150Z","iopub.status.idle":"2021-07-19T04:38:09.502330Z","shell.execute_reply.started":"2021-07-19T04:38:09.492115Z","shell.execute_reply":"2021-07-19T04:38:09.501554Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission.to_csv('submission.csv', index=False)","metadata":{"id":"PLJciqXLgvQh","executionInfo":{"status":"ok","timestamp":1626650954322,"user_tz":-480,"elapsed":13,"user":{"displayName":"薛哲昊","photoUrl":"","userId":"04645151507826231627"}},"execution":{"iopub.status.busy":"2021-07-19T04:38:19.038841Z","iopub.execute_input":"2021-07-19T04:38:19.039395Z","iopub.status.idle":"2021-07-19T04:38:19.048613Z","shell.execute_reply.started":"2021-07-19T04:38:19.039362Z","shell.execute_reply":"2021-07-19T04:38:19.047476Z"},"trusted":true},"execution_count":null,"outputs":[]}]}