{"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# 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\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\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":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow as tf\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport keras\nfrom keras.preprocessing import image\nfrom keras.models import Sequential\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator, load_img, img_to_array, smart_resize\nfrom keras.layers import Dense, Dropout, Flatten, BatchNormalization, Activation\nfrom keras.constraints import maxnorm\nfrom keras.layers.convolutional import Conv2D, MaxPooling2D\nfrom tensorflow.keras.optimizers import Adam\nimport cv2\nfrom PIL import Image\nfrom keras.preprocessing.image import load_img, img_to_array\nfrom keras.models import load_model\nfrom keras.metrics import AUC","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_folder = '../input/plant-pathology-2021-fgvc8/train_images'\ntest_folder =  '../input/plant-pathology-2021-fgvc8/test_images'","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train = pd.read_csv('../input/plant-pathology-2021-fgvc8/train.csv')\ndf_test = pd.read_csv('../input/plant-pathology-2021-fgvc8/sample_submission.csv')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train.describe()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train.labels.unique()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"labels = df_train.labels.unique()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train.labels.value_counts()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train.labels = df_train.labels.astype('category')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_datagen  = ImageDataGenerator(\n                    rotation_range = 180,\n                    shear_range = 0.3,\n                    height_shift_range = 0.1,\n                    horizontal_flip = True,\n                    rescale = 1./255,\n                    zoom_range = 0.2,\n                    validation_split = 0.2)\ntest_datagen  = ImageDataGenerator(\n                    rescale = 1./255,\n                    validation_split = 0.2)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_generator = train_datagen.flow_from_dataframe(dataframe = df_train,\n                           directory = train_folder,\n                           target_size = (150,150),\n                           x_col = 'image',\n                           y_col = 'labels',\n                           batch_size = 32,\n                           class_mode = 'categorical',\n                           subset = 'training')\n\nvalidator_generator = test_datagen.flow_from_dataframe(dataframe = df_train,\n                             directory = train_folder,\n                             target_size = (150,150),\n                             x_col = 'image',\n                             y_col = 'labels',\n                             batch_size = 32,\n                             class_mode = 'categorical',\n                             subset = 'validation')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''model = Sequential()\n\nmodel.add(Conv2D(32, (3, 3), padding = 'same', input_shape= (150,150,3)))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.2))\n\nmodel.add(Conv2D(64, (3, 3), padding = 'same'))\nmodel.add(Activation('relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.2))\n\nmodel.add(Conv2D(128, (3, 3), padding = 'same'))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.2))\n\nmodel.add(Flatten())\nmodel.add(Dropout(0.2))\n\nmodel.add(Dense(12))\nmodel.add(Activation('softmax'))'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Sequential()\nmodel.add(Conv2D(32,(3,3),padding=\"same\", activation=\"relu\", input_shape=(150,150,3)))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\n\nmodel.add(Conv2D(64, (3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\n\nmodel.add(Conv2D(128, (3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.2))\n\nmodel.add(Flatten())\nmodel.add(Dense(128,activation=\"relu\"))\nmodel.add(Dense(12, activation=\"softmax\"))\n\nmodel.summary()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"cambiar metrica metrics=['accuracy', ADC()]","metadata":{}},{"cell_type":"code","source":"#history = model.fit(train_generator, steps_per_epoch=10, epochs=5, validation_data=validator_generator, validation_steps=50)\n#history = model.fit(train_generator, epochs=25, validation_data=validator_generator) \n#history = model.fit(train_generator, steps_per_epoch=10, epochs=10, validation_data=validator_generator, validation_steps=50)\n#history = model.fit(train_generator, steps_per_epoch=10, epochs=10, validation_data=validator_generator, validation_steps=100)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.fit(train_generator, steps_per_epoch=10, epochs=10, validation_data=validator_generator, validation_steps=50)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"scores = model.evaluate(validator_generator, verbose=0)\nprint(\"Accuracy: %.2f%%\" % (scores[1]*100))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.save('model.h5')\nmodel.save_weights('weights.h5')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"acc = history.history['accuracy']\nval_acc = history.history['val_accuracy']\nloss = history.history['loss']\nval_loss = history.history['val_loss']\nepochs_range = range(10)\n\nplt.figure(figsize=(15, 15))\nplt.subplot(2, 2, 1)\nplt.plot(epochs_range, acc, label='Training Accuracy')\nplt.plot(epochs_range, val_acc, label='Validation Accuracy')\nplt.legend(loc='lower right')\nplt.title('Training and Validation Accuracy')\n\nplt.subplot(2, 2, 2)\nplt.plot(epochs_range, loss, label='Training Loss')\nplt.plot(epochs_range, val_loss, label='Validation Loss')\nplt.legend(loc='upper right')\nplt.title('Training and Validation Loss')\nplt.show()\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"PREDICTIONS","metadata":{}},{"cell_type":"code","source":"\nmodel = './model.h5'\nweight_model = './weights.h5'\n\n\ncnn = load_model(model)\ncnn.load_weights(weight_model)\n\ntest_generator = test_datagen.flow_from_dataframe(dataframe = df_test,\n                             directory = test_folder,\n                             target_size = (150,150),\n                             x_col = 'image',\n                             y_col = 'labels',\n                             batch_size = 32,\n                             class_mode = 'categorical')\n\n\npredictions=(cnn.predict(test_generator))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predictions","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for l in labels:\n    print(l)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"max_values = []\npred = []\nfor p in predictions:\n    pred.append(p)\n    max_values.append(max(p))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"max_values","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"l = []\nfor value in pred:\n    for i, v in enumerate(value):\n        if v in max_values:\n            print(i,v)\n            l.append(i)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"label_final = []\nfor i, label in enumerate(labels):\n    for j in l:\n        if i == j:\n            label_final.append(label)\nprint(label_final)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_test['final_label'] = label_final","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_test.to_csv('submission.csv', index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_test","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}