{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport tensorflow as tf\nfrom tensorflow.keras.layers import Dense,Conv2D,Dropout,MaxPooling2D,Input,Flatten\nfrom tensorflow.keras.models import Model\nimport os\nfrom tqdm import tqdm_notebook\nfrom tensorflow.keras.preprocessing.image import load_img,img_to_array,ImageDataGenerator\nimport matplotlib.pyplot as plt\n%matplotlib inline","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"train=pd.read_csv('../input/cassava-leaf-disease-classification/train.csv')\ntest=pd.read_csv('../input/cassava-leaf-disease-classification/sample_submission.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train['label'].hist()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def get_image(image_path):\n    img=load_img(image_path,target_size=(256,256,3))\n    img=img_to_array(img)\n    img=img/255.\n    \n    return img","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_path=[os.path.join('../input/cassava-leaf-disease-classification/train_images',image_name) for image_name in  train['image_id']]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def gen(train_labels,train_path,batch_size=32):\n    images=[]\n    labels=[]\n    i=0\n    b=0\n    while True:\n        images.append(get_image(train_path[i]))\n        labels.append(train_labels[i])\n        b+=1\n        i+=1\n        \n        if b==batch_size:\n            yield np.array(images),np.array(tf.keras.utils.to_categorical(labels,5))\n            b=0\ndef valid_gen(train_labels,train_path,batch_size=32):\n    images=[]\n    labels=[]\n    i=0\n    b=0\n    while True:\n        images.append(get_image(train_path[i]))\n        labels.append(train_labels[i])\n        b+=1\n        i+=1\n        \n        if b==batch_size:\n            yield np.array(images),np.array(tf.keras.utils.to_categorical(labels,5))\n            b=0","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"len(train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train['label']=train['label'].astype(str)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_gen = ImageDataGenerator(\nzoom_range=[0.5,0.2],\nbrightness_range=[0.5,1.0],\nrotation_range=90,\nhorizontal_flip=True,\nvertical_flip=True,\nheight_shift_range=0.2,\nwidth_shift_range=0.2\n)\n\ndatagen = train_gen.flow_from_dataframe(train[:20000],\n                                        directory=\"../input/cassava-leaf-disease-classification/train_images\",\n                                       x_col=\"image_id\",\n                                       y_col=\"label\",\n                                       batch_size=32)\nval_gen = ImageDataGenerator()\nval_data = val_gen.flow_from_dataframe(train[20000:],\n                                        directory=\"../input/cassava-leaf-disease-classification/train_images\",\n                                       x_col=\"image_id\",\n                                       y_col=\"label\",\n                                       batch_size=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"for i in range(9):\n    plt.subplot(330+1+i)\n    batch=datagen.next()\n    image=batch[0].astype(np.uint8)\n    plt.imshow(image[0])\n#    print(image.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from tensorflow.keras.applications import MobileNet,MobileNetV2,ResNet50,VGG16","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.utils.class_weight import compute_class_weight\nclass_weights = compute_class_weight(class_weight=\"balanced\",classes=train['label'].unique(),y = train['label'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"input_image=Input((256,256,3))\n\nmobilenet=MobileNet(include_top=False,weights=\"../input/keras-pretrained-imagenet-weights/mobilenet_imagenet_1000_no_top.h5\")\nx=mobilenet(input_image)\nx=Flatten()(x)\nx=Dense(128,activation='relu')(x)\noutput=Dense(5,activation='softmax')(x)\n\nmodel_1=Model(input_image,output)\nprint(model_1.summary())\nmodel_1.layers[1].trainable=False\nprint(model_1.summary())\n\ninput_image_2=Input((256,256,3))\n\nmobilenetv2=MobileNetV2(include_top=False,weights=\"../input/keras-pretrained-imagenet-weights/mobilenetv2_imagenet_1000_no_top.h5\")\nx=mobilenetv2(input_image_2)\nx=Flatten()(x)\nx=Dense(128,activation='relu')(x)\noutput=Dense(5,activation='softmax')(x)\n\nmodel_2=Model(input_image_2,output)\nmodel_2.layers[1].trainable=False\n\n\n# input_image_3=Input((256,256,3))\n\n# resnet=ResNet50(include_top=False,weights=\"https://github.com/fchollet/deep-learning-models/releases/download/v0.1/resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5\",input_shape=(256,256,3))\n# x=resnet(input_image_3)\n# x=Flatten()(x)\n# x=Dense(128,activation='relu')(x)\n# output=Dense(5,activation='softmax')(x)\n\n# model_3=Model(input_image_3,output)\n\n\ninput_image_4=Input((256,256,3))\n\nvgg16=VGG16(include_top=False,weights=\"../input/keras-pretrained-imagenet-weights/vgg16_imagenet_1000_no_top.h5\")\nx=vgg16(input_image_4)\nx=Flatten()(x)\nx=Dense(128,activation='relu')(x)\noutput=Dense(5,activation='softmax')(x)\n\nmodel_4=Model(input_image_4,output)\nmodel_2.layers[1].trainable=False","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model_1.compile(loss=\"categorical_crossentropy\",metrics=\"accuracy\",optimizer=\"adam\")\nmodel_2.compile(loss=\"categorical_crossentropy\",metrics=\"accuracy\",optimizer=\"adam\")\nmodel_4.compile(loss=\"categorical_crossentropy\",metrics=\"accuracy\",optimizer=\"adam\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class_weights","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class_weight={}\nfor i,j in enumerate(class_weights):\n    class_weight[i]=j","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model_1.fit_generator(datagen,steps_per_epoch=100,epochs=10,validation_data=val_data,class_weight=class_weight)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model_2.fit_generator(datagen,steps_per_epoch=100,epochs=10,validation_data=val_data,class_weight=class_weight)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model_4.fit_generator(datagen,steps_per_epoch=100,epochs=10,validation_data=val_data,class_weight=class_weight)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test['label']=(np.argmax(model_1.predict(np.array([get_image('../input/cassava-leaf-disease-classification/test_images/2216849948.jpg')])))+np.argmax(model_2.predict(np.array([get_image('../input/cassava-leaf-disease-classification/test_images/2216849948.jpg')])))+np.argmax(model_4.predict(np.array([get_image('../input/cassava-leaf-disease-classification/test_images/2216849948.jpg')]))))//3\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test.to_csv('submission.csv',index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!ls ./","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#from sklearn.ensemble import RandomForestClassifier","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# y_val=[]\n# x_meta=[]\n# i=0\n# while True:\n#     batch = val_data.next()\n#     image = batch[0].astype(np.uint8)\n#     label = np.argmax(batch[1])\n#     y_val.append(label)\n#     x=[]\n#     for model in [model_1,model_2,model_4]:\n#         x.append(np.argmax(model.predict(image)))\n#     x_meta.append(x)\n#     #print(label)\n#     i+=1\n#     if i>=1397:\n#         break","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# x_meta","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# input_image=Input((64,63,3))\n\n# conv1=Conv2D(32,(3,3),activation='relu')(input_image)\n# conv1=MaxPooling2D((2,2))(conv1)\n\n# conv1=Conv2D(64,(3,3),activation='relu')(conv1)\n# conv1=MaxPooling2D((2,2))(conv1)\n# conv1=Dropout(0.2)(conv1)\n\n# conv1=Conv2D(128,(3,3),activation='relu')(conv1)\n# conv1=MaxPooling2D((2,2))(conv1)\n# conv1=Dropout(0.5)(conv1)\n\n# conv1=Conv2D(256,(3,3),activation='relu')(conv1)\n# conv1=MaxPooling2D((2,2))(conv1)\n\n# flat=Flatten()(conv1)\n# dense1=Dense(256,activation='relu')(flat)\n# dense1=Dropout(0.4)(dense1)\n\n# dense2=Dense(64,activation='relu')(dense1)\n# dense_out=Dense(5,activation='softmax')(dense2)\n\n# model=Model(input_image,dense_out)\n# model.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# model.compile(optimizer='adam',loss='categorical_crossentropy',metrics='accuracy')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# model.fit_generator(gen(train['label'][:19000].values,train_path[:20000]),steps_per_epoch=32//5,epochs=10,validation_data=valid_gen(train['label'][20000:20100].values,train_path[20000:20100],1))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# model.history.history.keys()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# test['label']=np.argmax(model.predict(np.array([get_image('../input/cassava-leaf-disease-classification/test_images/2216849948.jpg')])))\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#test.to_csv('submission.csv',index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","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}