{"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","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras import layers\nfrom tensorflow.keras.callbacks import ReduceLROnPlateau\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.applications import NASNetLarge, ResNet101, DenseNet121\nfrom tensorflow.keras.applications.resnet import preprocess_input\nfrom tensorflow.keras.metrics import Precision, Recall\n\nfrom keras.models import load_model","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"IMAGE_PATH = '../input/resized-plant2021/img_sz_384'","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv('../input/plant-pathology-2021-fgvc8/train.csv')\ntrain","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train['labels']=train['labels'].apply( lambda string: string.split(' ') )\ntrain.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.preprocessing import MultiLabelBinarizer\nmlb = MultiLabelBinarizer()\nlabel= mlb.fit_transform(train['labels'])\nprint(label)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"labels = pd.DataFrame(label,columns=mlb.classes_,index=train.index)\nlabels","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.preprocessing.image import ImageDataGenerator\n\ndatagen = ImageDataGenerator(rescale=1/255.0,\n                            rotation_range=5,\n                            zoom_range=0.1,\n                            shear_range=0.05,\n                            horizontal_flip=True,\n                            validation_split=0.1)\n\ntrain_generator = datagen.flow_from_dataframe(\n    train,\n    directory= IMAGE_PATH,\n    subset='training',\n    x_col='image',\n    y_col='labels',\n    target_size=(256,256),\n    color_mode='rgb',\n    class_mode='categorical',\n    batch_size=32,\n    shuffle=True,\n    seed=444\n    )\nvalid_generator = datagen.flow_from_dataframe(\n    train,\n    directory= IMAGE_PATH,\n    subset='validation',\n    x_col='image',\n    y_col='labels',\n    target_size=(256,256),\n    color_mode='rgb',\n    class_mode='categorical',\n    batch_size=32,\n    shuffle=True,\n    seed=444\n    )","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.applications import DenseNet121\nfrom keras.applications import DenseNet169\n\nimport keras\nfrom keras.layers import Dense,Dropout,Flatten\nfrom tensorflow.keras.layers import GlobalAveragePooling2D\nfrom keras.models import Model\nfrom tensorflow.keras.callbacks import EarlyStopping\nimport tensorflow_addons as tfa\n\nmodel=DenseNet169(weights='imagenet',include_top=False, input_shape=(256,256,3))\nx=model.output\nx=GlobalAveragePooling2D()(x)\nx=Dense(128,activation='relu')(x)\nx=Dropout(0.2)(x)\nx=Dense(64,activation='relu')(x)\npredictions=Dense(6,activation='sigmoid')(x)\n\nDenseNetmodel=Model(inputs=model.input,outputs=predictions)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"DenseNetmodel.compile(optimizer='adam', loss='binary_crossentropy',metrics=['accuracy'])\nes=EarlyStopping(patience=5,monitor='val_loss',restore_best_weights=True)\nlr = ReduceLROnPlateau(monitor= 'val_loss',mode='min',factor=0.01,patience=2,verbose=0)\nhist = DenseNetmodel.fit(train_generator,\n                    validation_data=valid_generator,\n                    epochs=20,\n                    steps_per_epoch=train_generator.samples//64,\n                    validation_steps=valid_generator.samples//64,\n                    callbacks=[es])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"DenseNetmodel.save('densenet.h5')","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}