{"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-10T06:57:19.415796Z","iopub.execute_input":"2021-07-10T06:57:19.416206Z","iopub.status.idle":"2021-07-10T06:57:19.550148Z","shell.execute_reply.started":"2021-07-10T06:57:19.416107Z","shell.execute_reply":"2021-07-10T06:57:19.549137Z"},"id":"OESMwRnDQtHw","executionInfo":{"status":"ok","timestamp":1626224859916,"user_tz":-480,"elapsed":1047,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"outputId":"408cc867-a02a-4fe9-b561-103b347091e4","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-10T06:57:48.156834Z","iopub.execute_input":"2021-07-10T06:57:48.157196Z","iopub.status.idle":"2021-07-10T06:57:49.238782Z","shell.execute_reply.started":"2021-07-10T06:57:48.15715Z","shell.execute_reply":"2021-07-10T06:57:49.237487Z"},"id":"xHReTJGEQtH3","executionInfo":{"status":"ok","timestamp":1626224863294,"user_tz":-480,"elapsed":1111,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"outputId":"132b272b-b55b-41ca-8a58-8bd31a0a654b","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.preprocessing.image import ImageDataGenerator\ntrain_datagen = 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,)","metadata":{"execution":{"iopub.status.busy":"2021-07-10T06:57:55.356136Z","iopub.execute_input":"2021-07-10T06:57:55.356512Z","iopub.status.idle":"2021-07-10T06:58:00.799509Z","shell.execute_reply.started":"2021-07-10T06:57:55.356483Z","shell.execute_reply":"2021-07-10T06:58:00.798428Z"},"id":"S4Oe2FgQQtH4","executionInfo":{"status":"ok","timestamp":1626224866370,"user_tz":-480,"elapsed":1410,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"seed = 72 \ntarget_size = (384, 384)\nbatch_size = 8\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-10T06:58:00.801526Z","iopub.execute_input":"2021-07-10T06:58:00.802322Z","iopub.status.idle":"2021-07-10T06:58:00.830175Z","shell.execute_reply.started":"2021-07-10T06:58:00.802276Z","shell.execute_reply":"2021-07-10T06:58:00.829074Z"},"id":"NVKu3HoaQtH4","executionInfo":{"status":"ok","timestamp":1626224868094,"user_tz":-480,"elapsed":379,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"outputId":"340e935b-21a1-405f-efeb-a09ba7d69263","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_generator = train_datagen.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 = train_datagen.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,)","metadata":{"execution":{"iopub.status.busy":"2021-07-10T06:58:03.880051Z","iopub.execute_input":"2021-07-10T06:58:03.880413Z","iopub.status.idle":"2021-07-10T06:59:04.890222Z","shell.execute_reply.started":"2021-07-10T06:58:03.880381Z","shell.execute_reply":"2021-07-10T06:59:04.888201Z"},"id":"9mQt9tmtQtH5","executionInfo":{"status":"ok","timestamp":1626224968514,"user_tz":-480,"elapsed":98023,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"outputId":"106ba0cc-8d4c-442d-e90d-603d2389db2f","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras.applications import Xception\nfrom tensorflow.keras import layers, optimizers\nfrom tensorflow.keras.layers import Dense, Dropout, GlobalAveragePooling2D, BatchNormalization\nfrom keras import Model\nbase_model = Xception(include_top=False, \n                weights='imagenet',\n                pooling='avg', \n                input_shape=(384,384,3))\n#base_model.trainable = False\n'''","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":"6HfzxZ_7QtH8","executionInfo":{"status":"ok","timestamp":1626225023353,"user_tz":-480,"elapsed":6719,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"outputId":"0586d124-bd6b-475b-d3f0-1b7a82f84126","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\nmodel_pre = tf.keras.Sequential([\n        base_model,\n        layers.BatchNormalization(),\n        layers.Dense(96,activation='relu'),\n        layers.Dropout(0.2),\n        layers.Dense(6,activation='sigmoid')\n])\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":"ZbGARSSqQtH8","executionInfo":{"status":"ok","timestamp":1626225029566,"user_tz":-480,"elapsed":817,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\nfrom keras.callbacks import ModelCheckpoint, EarlyStopping\n\nmodel_pre.compile(optimizer=tf.keras.optimizers.Adam(\n          learning_rate=0.001),\n          loss='binary_crossentropy',\n          metrics=[tf.keras.metrics.BinaryAccuracy(name='binary_accuracy'),tf.keras.metrics.AUC(name='auc')])\n\nmodel_checkpoint = ModelCheckpoint(\n            filepath=\"./Xception_test2.h5\", \n            mode='max',\n            monitor='val_auc', \n            save_best_only=True, \n            verbose=1)\n\nearly_stopping = EarlyStopping(\n            monitor='val_auc', \n            min_delta=0,\n            patience=5, \n            verbose=1, \n            restore_best_weights=True)\n'''","metadata":{"execution":{"iopub.status.busy":"2021-07-10T07:03:02.57635Z","iopub.execute_input":"2021-07-10T07:03:02.576798Z"},"id":"EpdjHXkdQtH9","executionInfo":{"status":"ok","timestamp":1626225039446,"user_tz":-480,"elapsed":318,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\nmodel_pre = model_pre.fit(train_generator,\n              validation_data=valid_generator,\n              epochs=3, \n              callbacks=[model_checkpoint, early_stopping])\n'''","metadata":{"id":"rBDtXhwXtB7m","executionInfo":{"status":"ok","timestamp":1626233897466,"user_tz":-480,"elapsed":8847430,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"outputId":"e6e3801c-591a-4522-8240-c2e9067e3af9"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\nmodel_history = model_pre.history\nplt.figure()\nplt.plot(model_history['auc'])\nplt.plot(model_history['val_auc'])\nplt.title('model auc')\nplt.ylabel('auc')\nplt.xlabel('epoch')\nplt.legend(['train', 'validation'])\nplt.savefig('auc')\nplt.show()\n'''","metadata":{"id":"_SYLG9Mi-ktH","executionInfo":{"status":"ok","timestamp":1626234066832,"user_tz":-480,"elapsed":679,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"outputId":"60ac031e-01b3-4c06-c699-de624c93a39e"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Total Train","metadata":{"id":"RFiPyq6SzzgN"}},{"cell_type":"code","source":"'''\ntrain_datagen = 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.05,)\n'''","metadata":{"id":"X6HuJUND6pZc","executionInfo":{"status":"ok","timestamp":1626234117046,"user_tz":-480,"elapsed":339,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}}},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\nseed = 72 \ntarget_size = (384, 384)\nbatch_size = 8\ntrain_generator = train_datagen.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,\n                  )\n\nvalid_generator = train_datagen.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,)\n'''","metadata":{"id":"CJantjMMz7Cx","executionInfo":{"status":"ok","timestamp":1626234176580,"user_tz":-480,"elapsed":12746,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"outputId":"675118e2-9b4b-4e8c-ee0c-04035fd0870e"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\nimport keras\nmodel= keras.models.load_model(\"../input/xmodel-test/Xception_test2 .h5\")\n'''","metadata":{"id":"ddMMNi6gQtH_","executionInfo":{"status":"ok","timestamp":1626239638212,"user_tz":-480,"elapsed":2100,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\nfrom keras.callbacks import ModelCheckpoint, EarlyStopping\n\nmodel.compile(optimizer=tf.keras.optimizers.Adam(\n          learning_rate=0.001),\n          loss='binary_crossentropy',\n          metrics=[tf.keras.metrics.BinaryAccuracy(name='binary_accuracy'),tf.keras.metrics.AUC(name='auc')])\n\nmodel_checkpoint = ModelCheckpoint(\n            filepath=\"./Xception_test2.h5\", \n            mode='max',\n            monitor='val_auc', \n            save_best_only=True, \n            verbose=1)\n\nearly_stopping = EarlyStopping(\n            monitor='val_auc', \n            min_delta=0,\n            patience=5, \n            verbose=1, \n            restore_best_weights=True)\n'''","metadata":{"id":"CmcKXYRO7z4S","executionInfo":{"status":"ok","timestamp":1626234190468,"user_tz":-480,"elapsed":339,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}}},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\nmodel = model.fit(\n    train_generator,\n    validation_data=valid_generator,\n    epochs=10,\n    callbacks=[model_checkpoint, early_stopping])\n'''","metadata":{"id":"nRhbkFQ7QtIA","executionInfo":{"status":"ok","timestamp":1626239061035,"user_tz":-480,"elapsed":4867188,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"outputId":"b3118b2f-a152-4fac-accc-7fcbbcfa6df1","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\nmodel_history = model.history\n\nplt.figure()\nplt.plot(model_history['auc'])\nplt.plot(model_history['val_auc'])\nplt.title('model auc')\nplt.ylabel('auc')\nplt.xlabel('epoch')\nplt.legend(['train', 'validation'])\nplt.savefig('auc')\nplt.show()\n'''","metadata":{"id":"F_0A1XTaQtIB","executionInfo":{"status":"error","timestamp":1626239675067,"user_tz":-480,"elapsed":362,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"outputId":"12aaab8d-7bdc-4f01-bbf8-de252d1a11f4","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Test","metadata":{"id":"mgVNkCuJcD0F"}},{"cell_type":"code","source":"test_datagen = ImageDataGenerator(rescale = 1./255)\ntest_generator = test_datagen.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,)","metadata":{"id":"KmtPAJMeL7CC","executionInfo":{"status":"ok","timestamp":1626239684915,"user_tz":-480,"elapsed":336,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"outputId":"df4bb978-86f4-41db-e2af-bc42af187629"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import keras\nmodel = keras.models.load_model(\"../input/xception4/Xception_test4.h5\")\npred = model.predict(test_generator)","metadata":{"id":"642YowUbQtIB","executionInfo":{"status":"ok","timestamp":1626239720752,"user_tz":-480,"elapsed":7977,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"execution":{"iopub.status.busy":"2021-07-14T05:29:54.915042Z","iopub.execute_input":"2021-07-14T05:29:54.915351Z","iopub.status.idle":"2021-07-14T05:29:54.980592Z","shell.execute_reply.started":"2021-07-14T05:29:54.915274Z","shell.execute_reply":"2021-07-14T05:29:54.979083Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"perdict = (pred>0.4)\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":"YFx_fku7QtIC","executionInfo":{"status":"ok","timestamp":1626239724018,"user_tz":-480,"elapsed":340,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission['labels'] = np.array(answer)\nsubmission","metadata":{"id":"-XfhqSWkQtIC","executionInfo":{"status":"ok","timestamp":1626168802455,"user_tz":-480,"elapsed":286,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"outputId":"b8222eb5-627a-4f65-beb0-fcc54c948148","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission.to_csv('submission.csv', index=False)","metadata":{"id":"pxbRySptQtIC","trusted":true},"execution_count":null,"outputs":[]}]}