{"cells":[{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport tensorflow as tf\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport os\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_dir='../input/cassava-leaf-disease-classification/train_images'\ntest_dir='../input/cassava-leaf-disease-classification/test_images'\n\nprint(\"TRAIN IMAGES:\",len(os.listdir(train_dir)))\nprint(\"TEST IMAGES:\",len(os.listdir(test_dir)))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import json\nwith open('../input/cassava-leaf-disease-classification/label_num_to_disease_map.json') as file:\n    print(json.dumps(json.loads(file.read()), indent=4))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# LET'S SPLIT THE TRAIN SET "},{"metadata":{"trusted":true},"cell_type":"code","source":"df=pd.read_csv('../input/cassava-leaf-disease-classification/train.csv')\ndf.head(8)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sns.countplot(df.label, \n              palette = sns.color_palette(\"viridis\", 5))\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\ndf.label = df.label.astype('str')\n\n\ntrain,valid=train_test_split(df,test_size=0.2,shuffle=True,random_state=34)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.preprocessing.image import ImageDataGenerator\nBATCH_SIZE=64\n\ntrain_datagen=ImageDataGenerator(rescale=1./255,\n                                rotation_range=0.4,\n                                zoom_range=0.2,\n                                fill_mode='nearest')\ntrainGen=train_datagen.flow_from_dataframe(train,\n                                         directory=train_dir,\n                                          x_col = \"image_id\",\n                                          y_col = \"label\",\n                                         target_size = (150, 150),\n                                         batch_size = BATCH_SIZE,\n                                         class_mode = \"categorical\")\nvalid_datagen=ImageDataGenerator(rescale=1./255)\nvalidGen=valid_datagen.flow_from_dataframe(valid,\n                                          directory=train_dir,\n                                          x_col = \"image_id\",\n                                          y_col = \"label\",\n                                         target_size = (150, 150),\n                                         batch_size = BATCH_SIZE,\n                                         class_mode = \"categorical\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def create_model(input_shape):\n   \n    base_model = tf.keras.applications.Xception(weights='imagenet',input_shape = input_shape,\n                       include_top = False)\n                      \n\n    # we do not have to train all of the layers\n    for layer in base_model.layers:\n        layer.trainable = False\n        \n    x = tf.keras.layers.Flatten()(base_model.output)\n    x = tf.keras.layers.Dense(512, activation = 'relu')(x)\n    x = tf.keras.layers.Dropout(0.3)(x)\n    x = tf.keras.layers.Dense(5, activation = 'sigmoid')(x)\n    \n    return tf.keras.models.Model(base_model.input,x)\nmodel = create_model((150,150,3))\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":" model.compile(optimizer = tf.keras.optimizers.RMSprop(lr=0.001),\n                  loss = \"binary_crossentropy\",\n                  metrics = [\"acc\"])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.save('cassava.h5')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class mycallbacks(tf.keras.callbacks.Callback):\n    def on_epoch_end(self,epochs,logs={}):\n        if(logs.get('accuracy')>0.98):\n            self.model.stop_training=True\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"callbacks=[tf.keras.callbacks.ReduceLROnPlateau(monitor='val_loss',factor=0.1,patience=5)]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\nhistory=model.fit_generator(trainGen,validation_data=validGen,epochs=20,verbose=1,callbacks=[callbacks])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test=pd.read_csv('../input/cassava-leaf-disease-classification/sample_submission.csv')\ntest.label=test.label.astype('str')\ntest","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_datagen=ImageDataGenerator(rescale=1./255)\ntestGen=test_datagen.flow_from_dataframe(test,\n                                        test_dir,\n                                        x_col='image_id',\n                                        y_col='label',\n                                        target_size = (150, 150),\n                                        batch_size = BATCH_SIZE,\n                                        class_mode = \"categorical\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"predict = model.predict_generator(testGen)\ntest['label'] = predict.argmax(axis=1)","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}