{"cells":[{"metadata":{"_uuid":"7b88cbdc-c525-4dfa-bb40-fed23c0ac2ef","_cell_guid":"ba273dd3-0722-495e-bfb9-9c07e9db3ca5","trusted":true},"cell_type":"code","source":"# Importing the required libraries\nimport pandas  as pd\nimport numpy as np\nimport matplotlib.pyplot  as plt\nimport cv2\n\nimport tensorflow as tf \nfrom tensorflow.keras import applications\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.layers import Dense, Dropout, BatchNormalization, GlobalAveragePooling2D","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_csv_path = \"../input/cassava-leaf-disease-classification/train.csv\"\nlabel_json_path = \"../input/cassava-leaf-disease-classification/label_num_to_disease_map.json\"\nimages_dir_path = \"../input/cassava-leaf-disease-classification/train_images\"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_csv = pd.read_csv(train_csv_path)\ntrain_csv['label'] = train_csv['label'].astype('string')\n\nlabel_class = pd.read_json(label_json_path, orient='index')\nlabel_class = label_class.values.flatten().tolist()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"IMG_SIZE = 288\nBATCH_SIZE = 12\nEPOCHS = 32//16\nlr = 1e-5","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# **Data Agumentation and Pre-Processing**"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Data agumentation and pre-processing using tensorflow# Data agumentation and pre-processing using tensorflow\ntrain_gen = ImageDataGenerator(\n                                rotation_range=270,\n                                width_shift_range=0.2,\n                                height_shift_range=0.2,\n                                brightness_range=[0.1,0.9],\n                                shear_range=25,\n                                zoom_range=0.3,\n                                channel_shift_range=0.1,\n                                horizontal_flip=True,\n                                vertical_flip=True,\n                                rescale=1/255,\n                                validation_split=0.2\n                               )\n                                    \n    \nvalid_gen = ImageDataGenerator(rescale=1/255,\n                               validation_split = 0.2\n                              )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_generator = train_gen.flow_from_dataframe(\n                            dataframe=train_csv,\n                            directory = images_dir_path,\n                            x_col = \"image_id\",\n                            y_col = \"label\",\n                            target_size = (IMG_SIZE, IMG_SIZE),\n                            class_mode = \"categorical\",\n                            batch_size = BATCH_SIZE,\n                            shuffle = True,\n                            subset = \"training\",\n\n)\n\nvalid_generator = valid_gen.flow_from_dataframe(\n                            dataframe=train_csv,\n                            directory = images_dir_path,\n                            x_col = \"image_id\",\n                            y_col = \"label\",\n                            target_size = (IMG_SIZE, IMG_SIZE),\n                            class_mode = \"categorical\",\n                            batch_size = BATCH_SIZE,\n                            shuffle = True,\n                            subset = \"validation\"\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"PRECISION = tf.keras.metrics.Precision()\nRECALL = tf.keras.metrics.Recall()\n\ndef F1_score(y_true, y_pred):\n    \n    PRECISION.reset_states()\n    RECALL.reset_states()\n\n    precision_out = PRECISION.update_state(y_true, y_pred)\n    precision_out = PRECISION.result()\n\n    recall_out = RECALL.update_state(y_true, y_pred)\n    recall_out = RECALL.result()\n\n    return 2 * ((precision_out*recall_out)/(precision_out+recall_out+1e-23))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"BASE0 = applications.MobileNet(include_top=False, \n                                    input_shape=[IMG_SIZE, IMG_SIZE, 3], weights=None,\n                                    pooling='max')\n\ndef build_model(input_size = [IMG_SIZE, IMG_SIZE, 3]):\n    model = tf.keras.Sequential()\n    model.add(BASE0)\n    model.add(Dropout(0.5))\n    model.add(Dense(5, activation='softmax'))\n    \n    model.compile(loss=tf.keras.losses.CategoricalCrossentropy(),\n                  optimizer = tf.keras.optimizers.SGD(learning_rate=lr, momentum=0.9),\n                  metrics=['accuracy', F1_score])\n    \n    return model","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#model0 = tf.keras.models.load_model(\"../input/cassavaleafdiseasemodels/CasavaLeafDiseaseModel_acc_86_12.h5\", custom_objects={\"F1_score\":F1_score})\n#model1 = tf.keras.models.load_model(\"../input/cassavaleafdiseasemodels/CasavaLeafDiseaseModel_sgd_opt_acc_85_9.h5\", custom_objects={\"F1_score\":F1_score})","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# A callback to save the model\ncallback0 = tf.keras.callbacks.ModelCheckpoint(\"model.h5\", monitor='val_loss',save_best_only=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"his = model.fit(train_generator, validation_data=valid_generator, epochs=EPOCHS, callbacks=[callback0])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.save('model.h5', include_optimizer=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"preds = []\nss = pd.read_csv('../input/cassava-leaf-disease-classification/sample_submission.csv')\n\nfor image in ss.image_id:\n    img = tf.keras.preprocessing.image.load_img('../input/cassava-leaf-disease-classification/test_images/' + image)\n    img = tf.keras.preprocessing.image.img_to_array(img)\n    img = tf.keras.preprocessing.image.smart_resize(img, (IMG_SIZE, IMG_SIZE))\n    img = tf.reshape(img, (-1, IMG_SIZE, IMG_SIZE, 3))\n    \n    prediction = model.predict(img/255)\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=True) ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Submission file ouput\nprint(\"Submission File: \\n---------------\\n\")\nprint(my_submission.head()) # Predicted Output","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}