{"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":"# from google.colab import drive\n# drive.mount('/content/drive')","metadata":{"id":"r2mXLt5-v2s0","executionInfo":{"status":"ok","timestamp":1626054058063,"user_tz":-480,"elapsed":13322,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"outputId":"aab7f7e9-af9e-461d-81cf-550909532ce6","execution":{"iopub.status.busy":"2021-07-18T08:16:15.231299Z","iopub.execute_input":"2021-07-18T08:16:15.231639Z","iopub.status.idle":"2021-07-18T08:16:15.23703Z","shell.execute_reply.started":"2021-07-18T08:16:15.231557Z","shell.execute_reply":"2021-07-18T08:16:15.235339Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport numpy as np\nimport pandas as pd\n# train = pd.read_csv('../input/plant-pathology-2021-fgvc8/train.csv')\ntrain = pd.read_csv('../input/plant-pathology-2021-fgvc8/train.csv')\n\ntrain.head()","metadata":{"id":"Q19brw5I4lZJ","executionInfo":{"status":"ok","timestamp":1626054180140,"user_tz":-480,"elapsed":872,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"outputId":"1fc96a1f-abe8-4d8c-a6f7-c884c7af8c66","execution":{"iopub.status.busy":"2021-07-18T08:16:15.246083Z","iopub.execute_input":"2021-07-18T08:16:15.246873Z","iopub.status.idle":"2021-07-18T08:16:15.379944Z","shell.execute_reply.started":"2021-07-18T08:16:15.246804Z","shell.execute_reply":"2021-07-18T08:16:15.378866Z"},"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":"jd8rLNbw4lZN","executionInfo":{"status":"ok","timestamp":1626054191356,"user_tz":-480,"elapsed":883,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"outputId":"f3c3414c-a068-4909-b801-3393122cbe78","execution":{"iopub.status.busy":"2021-07-18T08:16:15.381651Z","iopub.execute_input":"2021-07-18T08:16:15.382073Z","iopub.status.idle":"2021-07-18T08:16:16.208727Z","shell.execute_reply.started":"2021-07-18T08:16:15.382032Z","shell.execute_reply":"2021-07-18T08:16:16.207937Z"},"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=False,\n    featurewise_std_normalization=False,\n    horizontal_flip=True,\n    vertical_flip=True,\n    validation_split= 0.2,)\npos = ImageDataGenerator(rescale = 1./255)","metadata":{"id":"uaBlBmg54lZN","executionInfo":{"status":"ok","timestamp":1626054223011,"user_tz":-480,"elapsed":2322,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"execution":{"iopub.status.busy":"2021-07-18T08:16:16.210461Z","iopub.execute_input":"2021-07-18T08:16:16.210811Z","iopub.status.idle":"2021-07-18T08:16:20.648657Z","shell.execute_reply.started":"2021-07-18T08:16:16.210775Z","shell.execute_reply":"2021-07-18T08:16:20.64748Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# ! mkdir -p plant-pathology-2021-fgvc8  #在本地新建一資料夾\n# ! unzip -q /content/drive/MyDrive/plant-pathology-2021-fgvc8-all_resize/fgvc8_resize_images_384-384/resize_train_image.zip -d plant-pathology-2021-fgvc8   #解壓縮\n# ! unzip -q /content/drive/MyDrive/plant-pathology-2021-fgvc8-all_resize/fgvc8_resize_images_384-384/resize_test_image.zip -d plant-pathology-2021-fgvc8","metadata":{"id":"XAXmoGVIYpqE","executionInfo":{"status":"ok","timestamp":1626054419281,"user_tz":-480,"elapsed":11240,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"execution":{"iopub.status.busy":"2021-07-18T08:16:20.650757Z","iopub.execute_input":"2021-07-18T08:16:20.651148Z","iopub.status.idle":"2021-07-18T08:16:20.659259Z","shell.execute_reply.started":"2021-07-18T08:16:20.651109Z","shell.execute_reply":"2021-07-18T08:16:20.658377Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"seed = 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":{"id":"W8yV7Pan4lZO","executionInfo":{"status":"ok","timestamp":1626064616942,"user_tz":-480,"elapsed":350,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"outputId":"0a4a1c2d-45d1-4a2a-f8b0-247a3146b2c9","execution":{"iopub.status.busy":"2021-07-18T08:16:20.662874Z","iopub.execute_input":"2021-07-18T08:16:20.664746Z","iopub.status.idle":"2021-07-18T08:16:20.695061Z","shell.execute_reply.started":"2021-07-18T08:16:20.664702Z","shell.execute_reply":"2021-07-18T08:16:20.694208Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ntest_generator = pre.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,)","metadata":{"id":"2qzpa52m4lZO","executionInfo":{"status":"ok","timestamp":1626064622572,"user_tz":-480,"elapsed":420,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"outputId":"5ea8256d-288c-4f94-e56a-3bd93b939bbd","execution":{"iopub.status.busy":"2021-07-18T08:17:53.588319Z","iopub.execute_input":"2021-07-18T08:17:53.588651Z","iopub.status.idle":"2021-07-18T08:17:53.602705Z","shell.execute_reply.started":"2021-07-18T08:17:53.588622Z","shell.execute_reply":"2021-07-18T08:17:53.601594Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import matplotlib.pyplot as plt\n# example = next(train_generator)\n# print(example[0].shape)\n# plt.imshow(example[0][0,:,:,:])\n# plt.show()","metadata":{"id":"y-9GfAiH4lZP","executionInfo":{"status":"ok","timestamp":1626054866013,"user_tz":-480,"elapsed":1430,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"outputId":"df3641be-3ab2-40fd-91b1-7eb68b942bb0","execution":{"iopub.status.busy":"2021-07-18T08:16:43.215632Z","iopub.status.idle":"2021-07-18T08:16:43.216026Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import matplotlib.pyplot as plt\n# example = next(test_generator)\n# print(example[0].shape)\n# plt.imshow(example[0])\n# plt.show()","metadata":{"id":"1Ile26Jr4lZP","executionInfo":{"status":"ok","timestamp":1626054871152,"user_tz":-480,"elapsed":1184,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"outputId":"d8a220cc-7dbf-4e4c-dd2c-c9f0e8097462","execution":{"iopub.status.busy":"2021-07-18T08:16:43.217086Z","iopub.status.idle":"2021-07-18T08:16:43.217532Z"},"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='imagenet',\n#                 pooling='avg', \n#                 input_shape=(384,384,3))","metadata":{"id":"6f2y78WA4lZQ","executionInfo":{"status":"ok","timestamp":1626054688947,"user_tz":-480,"elapsed":9415,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"outputId":"b583c0b4-3d5e-4d6a-f401-92b721bfddcf","execution":{"iopub.status.busy":"2021-07-18T08:16:43.218439Z","iopub.status.idle":"2021-07-18T08:16:43.219002Z"},"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":{"id":"YE3HN-V-4lZQ","executionInfo":{"status":"ok","timestamp":1626072473953,"user_tz":-480,"elapsed":1969,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"execution":{"iopub.status.busy":"2021-07-18T08:16:43.220156Z","iopub.status.idle":"2021-07-18T08:16:43.220719Z"},"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":"KVD0fV_t4lZR","executionInfo":{"status":"ok","timestamp":1626076794176,"user_tz":-480,"elapsed":434,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"outputId":"08a916e1-a20f-4bd3-aba6-6923f6ee9d44","execution":{"iopub.status.busy":"2021-07-18T08:16:43.223673Z","iopub.status.idle":"2021-07-18T08:16:43.224248Z"},"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=0.001, decay=0.001/20),\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=\"./B4.h5\", \n#             mode='max',\n#             monitor='val_auc', \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# model_pre = model_pre.fit(train_generator,\n#             validation_data=valid_generator,\n#             epochs=5,\n#             callbacks=[model_checkpoint, early_stopping])\n\n# # WARNING:tensorflow:Early stopping conditioned on metric `val_acc` which is not available. \n# # Available metrics are: loss,binary_accuracy,auc,val_loss,val_binary_accuracy,val_auc","metadata":{"id":"j6NDnVs24lZQ","executionInfo":{"status":"ok","timestamp":1626076782914,"user_tz":-480,"elapsed":4288298,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"outputId":"4e6696cc-1867-4b21-f7b3-771699665a50","execution":{"iopub.status.busy":"2021-07-18T08:16:43.222047Z","iopub.status.idle":"2021-07-18T08:16:43.222591Z"},"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":"zedJQTPH3tfd","executionInfo":{"status":"ok","timestamp":1626076815987,"user_tz":-480,"elapsed":568,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"outputId":"34cbb74c-5e52-4478-bee5-8795a0d04e8a","execution":{"iopub.status.busy":"2021-07-18T08:16:43.225419Z","iopub.status.idle":"2021-07-18T08:16:43.225999Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# plt.figure()\n# plt.plot(pre_history['loss'])\n# plt.plot(pre_history['val_loss'])\n# plt.title('model loss')\n# plt.ylabel('loss')\n# plt.xlabel('epoch')\n# plt.legend(['train', 'validation'])\n# plt.savefig('loss')\n# plt.show()","metadata":{"id":"Hv9w4qgP4lZR","executionInfo":{"status":"ok","timestamp":1626076825256,"user_tz":-480,"elapsed":480,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"outputId":"e175e428-4899-4863-ecf7-e0013dabdcde","execution":{"iopub.status.busy":"2021-07-18T08:16:43.227079Z","iopub.status.idle":"2021-07-18T08:16:43.227625Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# base_model.trainable = 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=[tf.keras.metrics.BinaryAccuracy(name='binary_accuracy'),tf.keras.metrics.AUC(name='auc')])\n# model = model.fit(\n#     train_generator,\n#     validation_data=valid_generator,\n#     epochs=5,\n#     callbacks=[model_checkpoint, early_stopping])","metadata":{"id":"sKbOgN7k4lZS","executionInfo":{"status":"ok","timestamp":1626083273484,"user_tz":-480,"elapsed":4325431,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"outputId":"d4808205-5f16-4995-b0cc-95b82cfac51b","execution":{"iopub.status.busy":"2021-07-18T08:16:43.230548Z","iopub.status.idle":"2021-07-18T08:16:43.231179Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 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":"zGSFR2lc4lZS","executionInfo":{"status":"ok","timestamp":1626083292414,"user_tz":-480,"elapsed":596,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"outputId":"82c66d6b-b2c1-4d04-faed-a6075765329e","execution":{"iopub.status.busy":"2021-07-18T08:16:43.232305Z","iopub.status.idle":"2021-07-18T08:16:43.232869Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import keras\ndef load_model():\n    model_pre = keras.models.load_model(\"../input/prexception/5.h5\")\n    return model_pre\n","metadata":{"execution":{"iopub.status.busy":"2021-07-18T08:19:12.253779Z","iopub.execute_input":"2021-07-18T08:19:12.254145Z","iopub.status.idle":"2021-07-18T08:19:12.258793Z","shell.execute_reply.started":"2021-07-18T08:19:12.254114Z","shell.execute_reply":"2021-07-18T08:19:12.257815Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = load_model()\npred = model.predict(test_generator)","metadata":{"id":"SKnxmDRT4lZT","executionInfo":{"status":"ok","timestamp":1626083325533,"user_tz":-480,"elapsed":19390,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"execution":{"iopub.status.busy":"2021-07-18T08:19:15.433941Z","iopub.execute_input":"2021-07-18T08:19:15.434266Z","iopub.status.idle":"2021-07-18T08:19:25.086613Z","shell.execute_reply.started":"2021-07-18T08:19:15.434239Z","shell.execute_reply":"2021-07-18T08:19:25.08561Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### TTA","metadata":{}},{"cell_type":"code","source":"model = load_model()\ntta_steps = 5\npredictions = []\n\nfor i in range(tta_steps):\n    preds = model.predict(test_generator)\n    predictions.append(preds)\n\npred = np.mean(predictions, axis=0)","metadata":{"execution":{"iopub.status.busy":"2021-07-18T08:19:30.353496Z","iopub.execute_input":"2021-07-18T08:19:30.353817Z","iopub.status.idle":"2021-07-18T08:19:43.422575Z","shell.execute_reply.started":"2021-07-18T08:19:30.353788Z","shell.execute_reply":"2021-07-18T08:19:43.421636Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(pred)","metadata":{"execution":{"iopub.status.busy":"2021-07-18T08:21:08.333321Z","iopub.execute_input":"2021-07-18T08:21:08.333787Z","iopub.status.idle":"2021-07-18T08:21:08.348045Z","shell.execute_reply.started":"2021-07-18T08:21:08.333747Z","shell.execute_reply":"2021-07-18T08:21:08.34692Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"perdict = (pred>0.335)\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":"BfdudNBq4lZT","executionInfo":{"status":"ok","timestamp":1626083357195,"user_tz":-480,"elapsed":902,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"execution":{"iopub.status.busy":"2021-07-18T08:19:43.424244Z","iopub.execute_input":"2021-07-18T08:19:43.42461Z","iopub.status.idle":"2021-07-18T08:19:43.430731Z","shell.execute_reply.started":"2021-07-18T08:19:43.424574Z","shell.execute_reply":"2021-07-18T08:19:43.429883Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"n_label","metadata":{"execution":{"iopub.status.busy":"2021-07-18T08:19:43.432694Z","iopub.execute_input":"2021-07-18T08:19:43.433341Z","iopub.status.idle":"2021-07-18T08:19:43.443953Z","shell.execute_reply.started":"2021-07-18T08:19:43.433306Z","shell.execute_reply":"2021-07-18T08:19:43.443124Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission['labels'] = np.array(answer)\nsubmission","metadata":{"id":"Qbv9SGm74lZT","executionInfo":{"status":"ok","timestamp":1626083392686,"user_tz":-480,"elapsed":354,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"outputId":"39b336bd-9ce8-4508-9736-df91dc6d5154","execution":{"iopub.status.busy":"2021-07-18T08:19:43.445486Z","iopub.execute_input":"2021-07-18T08:19:43.44574Z","iopub.status.idle":"2021-07-18T08:19:43.459836Z","shell.execute_reply.started":"2021-07-18T08:19:43.445716Z","shell.execute_reply":"2021-07-18T08:19:43.458607Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission.to_csv('submission.csv', index=False)","metadata":{"id":"H7KCvpCL4lZT","executionInfo":{"status":"ok","timestamp":1626083400440,"user_tz":-480,"elapsed":349,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"execution":{"iopub.status.busy":"2021-07-18T08:19:43.461083Z","iopub.execute_input":"2021-07-18T08:19:43.461665Z","iopub.status.idle":"2021-07-18T08:19:43.471312Z","shell.execute_reply.started":"2021-07-18T08:19:43.461627Z","shell.execute_reply":"2021-07-18T08:19:43.470407Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# !cp /content/B4.h5 /content/B4_0.h5","metadata":{"id":"7K5vtSc-LS5V","executionInfo":{"status":"ok","timestamp":1626084327368,"user_tz":-480,"elapsed":1380,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"execution":{"iopub.status.busy":"2021-07-18T08:16:43.246521Z","iopub.status.idle":"2021-07-18T08:16:43.247105Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# !mv /content/B4_0.h5 /content/drive/MyDrive/apple","metadata":{"id":"fKu8VYrlLgL9","executionInfo":{"status":"ok","timestamp":1626084390630,"user_tz":-480,"elapsed":1016,"user":{"displayName":"程神","photoUrl":"","userId":"04369975984541515920"}},"execution":{"iopub.status.busy":"2021-07-18T08:16:43.248546Z","iopub.status.idle":"2021-07-18T08:16:43.249138Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"np.around(pred, decimals=2, out=None)","metadata":{"execution":{"iopub.status.busy":"2021-07-18T08:16:43.250246Z","iopub.status.idle":"2021-07-18T08:16:43.25084Z"},"trusted":true},"execution_count":null,"outputs":[]}]}