{"cells":[{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import pandas as pd\ntrain = pd.read_csv('/kaggle/input/cassava-leaf-disease-classification/train.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import os\npath = '/kaggle/input/cassava-leaf-disease-classification/'\nfor i in os.listdir(path):\n    print(i)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.info()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train['label'].unique()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from PIL import Image  \nim = Image.open(\"/kaggle/input/cassava-leaf-disease-classification/train_images/999616605.jpg\")  \nprint('opened')\nim.size","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_path = '/kaggle/input/cassava-leaf-disease-classification/train_images'\ntest_path = '/kaggle/input/cassava-leaf-disease-classification/test_images'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import json\n\nfile = open('/kaggle/input/cassava-leaf-disease-classification/label_num_to_disease_map.json')\njson_data = json.load(file)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"json_data","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"for i in range(21397):\n    if train['label'][i] == 0:\n        train.replace(to_replace =train['label'][i], \n                 value ='Cassava Bacterial Blight (CBB)',inplace=True) \n    elif train['label'][i] == 1:\n        train.replace(to_replace =train['label'][i], \n                 value ='Cassava Brown Streak Disease (CBSD)',inplace=True) \n    elif train['label'][i] == 2:\n        train.replace(to_replace =train['label'][i], \n                 value ='Cassava Green Mottle (CGM)',inplace=True) \n    elif train['label'][i] == 3:\n        train.replace(to_replace =train['label'][i], \n                 value ='Cassava Mosaic Disease (CMD)',inplace=True) \n    elif train['label'][i] == 4:\n        train.replace(to_replace =train['label'][i], \n                 value ='Healthy',inplace=True) \n        ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import keras\nimport tensorflow as tf\nfrom tensorflow.keras.layers import *\nfrom tensorflow.keras.models import * \nfrom tensorflow.keras.preprocessing import image","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"size = 512\nbat_size = 16\nsplit = 0.31\nepoch = 10","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_datagen = image.ImageDataGenerator(\n    rescale = 1./255,\n    featurewise_center=False,\n    samplewise_center=False,\n    featurewise_std_normalization=False,\n    samplewise_std_normalization=False,\n    zca_whitening=False,\n    zca_epsilon=1e-06,\n    rotation_range=2,\n    width_shift_range=0.0,\n    height_shift_range=0.0,\n    brightness_range=[0.0, 0.2],\n    shear_range=0.0,\n    zoom_range=0.1,\n    channel_shift_range=0.0,\n    fill_mode=\"nearest\",\n    cval=0.0,\n    horizontal_flip = True,\n    vertical_flip = True,\n    validation_split=split,\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_generator = train_datagen.flow_from_dataframe(\n    train,\n    directory=train_path,\n    x_col=\"image_id\",\n    y_col=\"label\",\n    weight_col=None,\n    target_size=(size, size),\n    color_mode=\"rgb\",\n    classes=None,\n    class_mode=\"categorical\",\n    batch_size=bat_size,\n    shuffle=True,\n    seed=None,\n    subset='training',\n    #save_to_dir=None,\n    #save_prefix=\"\",\n    #save_format=\"jpg\",\n    #subset=None,\n    interpolation=\"nearest\",\n    validate_filenames=True\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"validation_generator = train_datagen.flow_from_dataframe(\n    train,\n    directory=train_path,\n    x_col=\"image_id\",\n    y_col=\"label\",\n    weight_col=None,\n    target_size=(size, size),\n    color_mode=\"rgb\",\n    classes=None,\n    class_mode=\"categorical\",\n    batch_size=bat_size,\n    subset='validation',\n    shuffle=True,\n    seed=None,\n    #save_to_dir=None,\n    #save_prefix=\"\",\n    #save_format=\"png\",\n    #subset=None,\n    #interpolation=\"nearest\",\n    validate_filenames=True\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# -*- coding: utf-8 -*-\nfrom keras.models import Sequential\n#initialize nn\nimport keras\nfrom keras.layers import Conv2D\nfrom keras.layers import MaxPooling2D\nfrom keras.layers import Flatten\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.layers import Dense\nimport tensorflow as tf\nfrom keras.layers import BatchNormalization\nfrom keras.layers import Dropout\n\n#basic cnn\nmodel = Sequential()\nmodel.add(Conv2D(32, kernel_size = (3, 3), activation='relu', input_shape=(size,size, 3)))\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(BatchNormalization())\nmodel.add(Conv2D(64, kernel_size=(3,3), activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(BatchNormalization())\nmodel.add(Conv2D(96, kernel_size=(3,3), activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(BatchNormalization())\nmodel.add(Conv2D(128, kernel_size=(3,3), activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(BatchNormalization())\nmodel.add(Conv2D(256, kernel_size=(3,3), activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(BatchNormalization())\nmodel.add(Dropout(0.2))\nmodel.add(Flatten())\nmodel.add(Dense(64, activation='relu'))\nmodel.add(Dense(64, activation='relu'))\nmodel.add(Dense(128, activation='relu',kernel_regularizer=tf.keras.regularizers.l1_l2(l1=1e-5, l2=1e-4),\n    bias_regularizer=tf.keras.regularizers.l2(1e-4),\n    activity_regularizer=tf.keras.regularizers.l2(1e-5)))\nmodel.add(Dense(256, activation='relu',kernel_regularizer=tf.keras.regularizers.l1_l2(l1=1e-5, l2=1e-4),\n    bias_regularizer=tf.keras.regularizers.l2(1e-4),\n    activity_regularizer=tf.keras.regularizers.l2(1e-5)))\nmodel.add(Dropout(0.25))\nmodel.add(Dense(5, activation = 'softmax'))\n\nopt = keras.optimizers.Adam(learning_rate=0.001)\n#opt = tf.keras.optimizers.RMSprop(learning_rate=0.001)\n#opt = tf.keras.optimizers.SGD(learning_rate=0.01)\nmodel.compile(optimizer = opt, loss = 'categorical_crossentropy', metrics = ['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"callback = tf.keras.callbacks.EarlyStopping(\n    monitor=\"val_acc\",\n    min_delta=0.80,\n    patience=2,\n    verbose=0,\n    mode=\"auto\",\n    baseline=None,\n    restore_best_weights=False,\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"'''model.fit_generator(train_generator,\n                         epochs = epoch,\n                         validation_data = validation_generator,\n                         verbose=1,\n                         callbacks = [callback])'''","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# EfficientNet B7"},{"metadata":{"trusted":true},"cell_type":"code","source":"from tensorflow import keras\nfrom tensorflow.keras.applications import EfficientNetB7\n\n\nmodel = EfficientNetB7(include_top=False, weights=\"imagenet\", input_shape=(512, 512, 3))\n\n# Freeze the pretrained weights\nmodel.trainable = False\n\ninputs = keras.Input(shape=(512, 512, 3))\nx = model(inputs, training=False)\n#x = keras.layers.GlobalAveragePooling2D()(x)\nx = keras.layers.Flatten()(x)\n#x = keras.layers.Dense(64, activation='relu')(x)\n#x = keras.layers.Dropout(0.2)(x)\n#x = keras.layers.Dense(256, activation='relu')(x)\n#x = keras.layers.Dropout(0.2)(x)\noutputs = keras.layers.Dense(5, activation='softmax')(x)\nmodel = keras.Model(inputs, outputs)\n\n#x = Flatten()(model.layers[-1].output)\n#x = Dense(1024, activation='relu')(x)\n#outputs = layers.Dense(5, activation=\"softmax\")(x)\n\n# Compile\n#model = tf.keras.Model(model.inputs, outputs, name=\"EfficientNet\")\noptimizer = tf.keras.optimizers.Adam(learning_rate=0.001)\n\nmodel.compile(\n    optimizer=optimizer, loss=\"categorical_crossentropy\", metrics=[\"accuracy\"]\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"'''model.fit(train_generator,\n         epochs = epoch,\n         validation_data = validation_generator,\n         verbose=1,\n         callbacks = [callback])'''","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# MobileNet"},{"metadata":{"trusted":true},"cell_type":"code","source":"!pip install --upgrade tensorflow_hub","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import tensorflow_hub as hub\nimport tensorflow as tf","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"m = tf.keras.Sequential([\n    hub.KerasLayer(\"https://tfhub.dev/google/imagenet/mobilenet_v1_100_224/classification/4\"),\n    tf.keras.layers.Dense(64, activation='relu'),\n    tf.keras.layers.Dense(5, activation='softmax')\n])\nm.build([None, 512, 512, 3])# Batch input shape.","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"m.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"m.compile(optimizer = tf.keras.optimizers.Adam(learning_rate=0.001), loss = 'categorical_crossentropy', metrics = ['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"m.fit(train_generator,\n     epochs = epoch,\n     validation_data = validation_generator,\n     verbose=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\npreds = []\nss = pd.read_csv('../input/cassava-leaf-disease-classification/sample_submission.csv')\n\nfor image in ss.image_id:\n    img = keras.preprocessing.image.load_img('../input/cassava-leaf-disease-classification/test_images/' + image)\n    img = keras.preprocessing.image.img_to_array(img)\n    img = keras.preprocessing.image.smart_resize(img, (size, size))\n    img = np.expand_dims(img, 0)\n    prediction = model.predict(img)\n    preds.append(np.argmax(prediction))\n\nmy_submission = pd.DataFrame({'image_id': ss.image_id, 'label': preds})\nmy_submission.to_csv('submission.csv', index=False) ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"my_submission","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#model.save('model.h5')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"m.save('mobile.h5')","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}