{"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":1626162330524,"user_tz":-480,"elapsed":280,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"outputId":"d79e8321-40ee-433d-a1b0-7f902225ebd5","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":1626162336373,"user_tz":-480,"elapsed":367,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"outputId":"34cb7844-87e7-4ec0-c1a8-015538e8415c","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"seed = 72 \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-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":1626146978930,"user_tz":-480,"elapsed":297,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"outputId":"3dd75370-44b3-4c09-c50c-043a73b502fe","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\nfrom 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,)\ntest_datagen = ImageDataGenerator(rescale = 1./255)\n'''","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":1626140556530,"user_tz":-480,"elapsed":1770,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\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,)\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,)\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,)\n''' ","metadata":{},"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))\nbase_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":1626147511824,"user_tz":-480,"elapsed":1245,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\nmodel_pre = tf.keras.Sequential([\n        base_model,\n        layers.BatchNormalization(),\n        layers.Dense(64,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":1626147513852,"user_tz":-480,"elapsed":707,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Tatol Train","metadata":{"id":"RFiPyq6SzzgN"}},{"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.05,)\n","metadata":{"id":"X6HuJUND6pZc","executionInfo":{"status":"ok","timestamp":1626163899516,"user_tz":-480,"elapsed":279,"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":1626163926667,"user_tz":-480,"elapsed":11065,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"outputId":"b3983d9f-29cc-4fa2-c641-2e83c014844d"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import keras\ndef load_model():\n    model_pre = keras.models.load_model(\"../input/xmodels/Xception_test2.h5\")\n    return model_pre\nmodel = load_model()","metadata":{"id":"ddMMNi6gQtH_","executionInfo":{"status":"ok","timestamp":1626164546880,"user_tz":-480,"elapsed":1493,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.callbacks import ModelCheckpoint, EarlyStopping\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom keras import Model\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)","metadata":{"id":"CmcKXYRO7z4S","executionInfo":{"status":"ok","timestamp":1626164548911,"user_tz":-480,"elapsed":431,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}}},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = model.fit(\n    train_generator,\n    validation_data=valid_generator,\n    epochs=10,\n    callbacks=[model_checkpoint, early_stopping])","metadata":{"id":"nRhbkFQ7QtIA","executionInfo":{"status":"ok","timestamp":1626167961558,"user_tz":-480,"elapsed":3373207,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"outputId":"2047c7a9-288b-439b-a7a7-5040b7651d8b","trusted":true},"execution_count":null,"outputs":[]},{"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":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = keras.models.load_model(\"./Xception_test2.h5\")\npred = model.predict(test_generator)","metadata":{"id":"642YowUbQtIB","executionInfo":{"status":"ok","timestamp":1626168763293,"user_tz":-480,"elapsed":6724,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"perdict = (pred>0.44)\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":1626168800522,"user_tz":-480,"elapsed":277,"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","executionInfo":{"status":"ok","timestamp":1626168805578,"user_tz":-480,"elapsed":278,"user":{"displayName":"41林厚廷","photoUrl":"","userId":"03565498750792486502"}},"trusted":true},"execution_count":null,"outputs":[]}]}