{"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":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-06-13T22:11:38.404929Z","iopub.execute_input":"2021-06-13T22:11:38.405324Z","iopub.status.idle":"2021-06-13T22:11:38.409449Z","shell.execute_reply.started":"2021-06-13T22:11:38.405243Z","shell.execute_reply":"2021-06-13T22:11:38.408701Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Data Exploration\n\n---","metadata":{}},{"cell_type":"code","source":"df = pd.read_csv(\"../input/plant-pathology-2021-fgvc8/train.csv\")\ndf.head()","metadata":{"execution":{"iopub.status.busy":"2021-06-13T22:11:38.422196Z","iopub.execute_input":"2021-06-13T22:11:38.422445Z","iopub.status.idle":"2021-06-13T22:11:38.485923Z","shell.execute_reply.started":"2021-06-13T22:11:38.422421Z","shell.execute_reply":"2021-06-13T22:11:38.485019Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pd.options.plotting.backend = \"plotly\"\ndf.labels.hist()","metadata":{"execution":{"iopub.status.busy":"2021-06-13T22:11:38.488113Z","iopub.execute_input":"2021-06-13T22:11:38.488484Z","iopub.status.idle":"2021-06-13T22:11:43.659914Z","shell.execute_reply.started":"2021-06-13T22:11:38.488447Z","shell.execute_reply":"2021-06-13T22:11:43.659039Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df[\"coluna1\"]=df.labels.str.split(\" \")\ndf = df.explode(\"coluna1\")","metadata":{"execution":{"iopub.status.busy":"2021-06-13T22:11:43.661077Z","iopub.execute_input":"2021-06-13T22:11:43.661409Z","iopub.status.idle":"2021-06-13T22:11:43.727139Z","shell.execute_reply.started":"2021-06-13T22:11:43.661376Z","shell.execute_reply":"2021-06-13T22:11:43.726214Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(df.coluna1)","metadata":{"execution":{"iopub.status.busy":"2021-06-13T22:11:43.728443Z","iopub.execute_input":"2021-06-13T22:11:43.728783Z","iopub.status.idle":"2021-06-13T22:11:43.734767Z","shell.execute_reply.started":"2021-06-13T22:11:43.728747Z","shell.execute_reply":"2021-06-13T22:11:43.733973Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pd.options.plotting.backend = \"plotly\"\ndf.coluna1.hist()","metadata":{"execution":{"iopub.status.busy":"2021-06-13T22:11:43.738659Z","iopub.execute_input":"2021-06-13T22:11:43.739162Z","iopub.status.idle":"2021-06-13T22:11:43.938523Z","shell.execute_reply.started":"2021-06-13T22:11:43.739102Z","shell.execute_reply":"2021-06-13T22:11:43.937582Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Modelos de Machine Learning\n\n----","metadata":{}},{"cell_type":"code","source":"import tensorflow as tf\n\nfrom tensorflow import keras\nfrom tensorflow.keras import layers","metadata":{"execution":{"iopub.status.busy":"2021-06-13T22:11:43.940348Z","iopub.execute_input":"2021-06-13T22:11:43.940700Z","iopub.status.idle":"2021-06-13T22:11:49.243536Z","shell.execute_reply.started":"2021-06-13T22:11:43.940665Z","shell.execute_reply":"2021-06-13T22:11:49.242768Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Keras \n\n----","metadata":{}},{"cell_type":"code","source":"from keras.models import Sequential\n#Import from keras_preprocessing not from keras.preprocessing\nfrom keras_preprocessing.image import ImageDataGenerator\nfrom keras.layers import Dense, Activation, Flatten, Dropout, BatchNormalization\nfrom keras.layers import Conv2D, MaxPooling2D\nfrom tensorflow.keras.callbacks import ModelCheckpoint\nfrom keras import regularizers, optimizers\nimport pandas as pd\nimport numpy as np\ntraindf=pd.read_csv(\"../input/plant-pathology-2021-fgvc8/train.csv\",dtype=str)\ntraindf['labels'] = traindf['labels'].apply(lambda s: s.split(' '))\ntestdf=pd.read_csv(\"../input/plant-pathology-2021-fgvc8/sample_submission.csv\",dtype=str)\ndatagen=ImageDataGenerator(rescale=1./255.,validation_split=0.25)","metadata":{"execution":{"iopub.status.busy":"2021-06-13T22:11:49.246973Z","iopub.execute_input":"2021-06-13T22:11:49.247302Z","iopub.status.idle":"2021-06-13T22:11:49.340293Z","shell.execute_reply.started":"2021-06-13T22:11:49.247273Z","shell.execute_reply":"2021-06-13T22:11:49.339446Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_generator=datagen.flow_from_dataframe(\n    dataframe=traindf,\n    directory=\"../input/resized-plant2021/img_sz_384\",\n    x_col=\"image\",\n    y_col=\"labels\",\n    subset=\"training\",\n    batch_size=64,\n    seed=98,\n    shuffle=True,\n    class_mode=\"categorical\",\n    target_size=(384,384))\n\nvalid_generator=datagen.flow_from_dataframe(\n    dataframe=traindf,\n    directory=\"../input/resized-plant2021/img_sz_384\",\n    x_col=\"image\",\n    y_col=\"labels\",\n    subset=\"validation\",\n    batch_size=64,\n    seed=98,\n    shuffle=True,\n    class_mode=\"categorical\",\n    target_size=(384,384))\n\ntest_datagen=ImageDataGenerator(rescale=1./255.)\n\ntest_generator=test_datagen.flow_from_dataframe(\n    dataframe=testdf,\n    directory=\"../input/plant-pathology-2021-fgvc8/test_images\",\n    x_col=\"image\",\n    y_col=None,\n    batch_size=3,\n    seed=98,\n    shuffle=False,\n    class_mode=None,\n    target_size=(384,384))","metadata":{"execution":{"iopub.status.busy":"2021-06-13T22:11:49.341656Z","iopub.execute_input":"2021-06-13T22:11:49.342035Z","iopub.status.idle":"2021-06-13T22:12:43.880688Z","shell.execute_reply.started":"2021-06-13T22:11:49.341995Z","shell.execute_reply":"2021-06-13T22:12:43.879486Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model=Sequential()\n\nmodel.add(Conv2D(32, (3, 3), padding=\"same\", activation='relu', input_shape=(384, 384,3)))\nmodel.add(BatchNormalization(axis=3))\nmodel.add(MaxPooling2D(pool_size=(3, 3)))\nmodel.add(Dropout(0.25))\n        \nmodel.add(Conv2D(64, (3, 3), padding=\"same\", activation='relu'))\nmodel.add(BatchNormalization(axis=3))\nmodel.add(Conv2D(64, (3, 3), padding=\"same\", activation='relu'))\nmodel.add(BatchNormalization(axis=1))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.25))\n\nmodel.add(Conv2D(128, (3, 3), padding=\"same\", activation='relu'))\nmodel.add(BatchNormalization(axis=3))\nmodel.add(Conv2D(128, (3, 3), padding=\"same\", activation='relu'))\nmodel.add(BatchNormalization(axis=3))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.25))\n\nmodel.add(Flatten())\nmodel.add(Dense(64))\nmodel.add(Activation(\"relu\"))\nmodel.add(Dropout(0.25))\nmodel.add(BatchNormalization())\nmodel.add(Dropout(0.25))\nmodel.add(Dense(6))\nmodel.add(Activation(\"softmax\"))\nmodel.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.01, decay=0.01/30),\n    loss='binary_crossentropy',\n    metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2021-06-13T22:12:43.881954Z","iopub.execute_input":"2021-06-13T22:12:43.882479Z","iopub.status.idle":"2021-06-13T22:12:46.623752Z","shell.execute_reply.started":"2021-06-13T22:12:43.882439Z","shell.execute_reply":"2021-06-13T22:12:46.623041Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"checkpoint=ModelCheckpoint(r'Models\\model-x.h5',\n                          monitor='val_accuracy',\n                          mode='max',\n                          save_best_only=True,\n                          verbose=1)\ncallbacks=[checkpoint]","metadata":{"execution":{"iopub.status.busy":"2021-06-13T22:12:46.624986Z","iopub.execute_input":"2021-06-13T22:12:46.625348Z","iopub.status.idle":"2021-06-13T22:12:46.630047Z","shell.execute_reply.started":"2021-06-13T22:12:46.625311Z","shell.execute_reply":"2021-06-13T22:12:46.629250Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"STEP_SIZE_TRAIN=train_generator.n//train_generator.batch_size\nSTEP_SIZE_VALID=valid_generator.n//valid_generator.batch_size\nSTEP_SIZE_TEST=test_generator.n//test_generator.batch_size\nmodel.fit(train_generator,\n          steps_per_epoch=STEP_SIZE_TRAIN,\n          validation_data=valid_generator,\n          validation_steps=STEP_SIZE_VALID,\n          callbacks=callbacks,\n          epochs=30\n)","metadata":{"execution":{"iopub.status.busy":"2021-06-13T22:12:46.631430Z","iopub.execute_input":"2021-06-13T22:12:46.631762Z","iopub.status.idle":"2021-06-13T23:12:28.246710Z","shell.execute_reply.started":"2021-06-13T22:12:46.631728Z","shell.execute_reply":"2021-06-13T23:12:28.245983Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.evaluate_generator(generator=valid_generator,\n    steps=STEP_SIZE_TEST)","metadata":{"execution":{"iopub.status.busy":"2021-06-13T23:12:28.249693Z","iopub.execute_input":"2021-06-13T23:12:28.249960Z","iopub.status.idle":"2021-06-13T23:12:29.347627Z","shell.execute_reply.started":"2021-06-13T23:12:28.249932Z","shell.execute_reply":"2021-06-13T23:12:29.346920Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_generator.reset()\npred=model.predict_generator(test_generator,\n    steps=STEP_SIZE_TEST,\n    verbose=1)","metadata":{"execution":{"iopub.status.busy":"2021-06-13T23:12:29.350589Z","iopub.execute_input":"2021-06-13T23:12:29.350840Z","iopub.status.idle":"2021-06-13T23:12:30.943954Z","shell.execute_reply.started":"2021-06-13T23:12:29.350813Z","shell.execute_reply":"2021-06-13T23:12:30.943217Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predicted_class_indices=np.argmax(pred,axis=1)","metadata":{"execution":{"iopub.status.busy":"2021-06-13T23:12:30.945333Z","iopub.execute_input":"2021-06-13T23:12:30.945663Z","iopub.status.idle":"2021-06-13T23:12:30.952265Z","shell.execute_reply.started":"2021-06-13T23:12:30.945633Z","shell.execute_reply":"2021-06-13T23:12:30.950689Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"labels = (train_generator.class_indices)\nlabels = dict((v,k) for k,v in labels.items())\npredictions = [labels[k] for k in predicted_class_indices]","metadata":{"execution":{"iopub.status.busy":"2021-06-13T23:12:30.954508Z","iopub.execute_input":"2021-06-13T23:12:30.955189Z","iopub.status.idle":"2021-06-13T23:12:30.962984Z","shell.execute_reply.started":"2021-06-13T23:12:30.955129Z","shell.execute_reply":"2021-06-13T23:12:30.961476Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"filenames=test_generator.filenames\nresults=pd.DataFrame({\"Filename\":filenames,\n                      \"Predictions\":predictions})\nresults.to_csv(\"results.csv\",index=False)","metadata":{"execution":{"iopub.status.busy":"2021-06-13T23:12:30.964916Z","iopub.execute_input":"2021-06-13T23:12:30.965404Z","iopub.status.idle":"2021-06-13T23:12:31.154921Z","shell.execute_reply.started":"2021-06-13T23:12:30.965240Z","shell.execute_reply":"2021-06-13T23:12:31.154092Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"resultado=pd.read_csv(\"./results.csv\")","metadata":{"execution":{"iopub.status.busy":"2021-06-13T23:12:31.158208Z","iopub.execute_input":"2021-06-13T23:12:31.158501Z","iopub.status.idle":"2021-06-13T23:12:31.168714Z","shell.execute_reply.started":"2021-06-13T23:12:31.158476Z","shell.execute_reply":"2021-06-13T23:12:31.167653Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"resultado.head()","metadata":{"execution":{"iopub.status.busy":"2021-06-13T23:12:31.170108Z","iopub.execute_input":"2021-06-13T23:12:31.170544Z","iopub.status.idle":"2021-06-13T23:12:31.181064Z","shell.execute_reply.started":"2021-06-13T23:12:31.170506Z","shell.execute_reply":"2021-06-13T23:12:31.180239Z"},"trusted":true},"execution_count":null,"outputs":[]}]}