{"cells":[{"metadata":{"_uuid":"051d70d956493feee0c6d64651c6a088724dca2a","_execution_state":"idle","trusted":true},"cell_type":"code","source":"# This R environment comes with many helpful analytics packages installed\n# It is defined by the kaggle/rstats Docker image: https://github.com/kaggle/docker-rstats\n# For example, here's a helpful package to load\n\nlibrary(tidyverse) # metapackage of all tidyverse packages\nlibrary(keras)\nlibrary(recipes)\nlibrary(rsample)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"labels <- read_csv('../input/cassava-leaf-disease-classification/train.csv')\nlabels %>% str()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"labels <- labels %>%\nmutate(label = case_when(\n   label == 0 ~ 'CBB',\n   label == 1 ~ 'CBSD',\n   label == 2 ~ 'CGM',\n   label == 3 ~ 'CMD',\n   label == 4 ~ 'Healthy'\n))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**On-hot encode label**"},{"metadata":{"trusted":true},"cell_type":"code","source":"rec <- recipe(~ . , data = labels)%>%\n step_dummy(label, one_hot = TRUE)\n\nlabel_on_hot <- rec %>% prep() %>% juice()\nhead(label_on_hot)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Test model in a small sample**"},{"metadata":{"trusted":true},"cell_type":"code","source":"sample_small <- sample_n(label_on_hot, 2000)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Train and Test**"},{"metadata":{"trusted":true},"cell_type":"code","source":"split <- initial_split(sample_small, prop = 0.8)\ntrain_image <- training(split)\ntest_image <- testing(split)\n\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"dim(split)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Read the images on Keras**"},{"metadata":{"trusted":true},"cell_type":"code","source":"set_train_dir <- c('../input/cassava-leaf-disease-classification/train_images')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#data augmentation\ndatagen <- image_data_generator(\n  rescale = 1/255,\n  rotation_range = 40,\n  width_shift_range = 0.2,\n  height_shift_range = 0.2,\n  shear_range = 0.2,\n  zoom_range = 0.5,\n  horizontal_flip = TRUE,\n  fill_mode = \"reflect\"\n)\n\nbatch_size = 64\n\ntrain_generator <- flow_images_from_dataframe(dataframe = train_image, \n                                              directory = set_train_dir,\n                                              generator = datagen,\n                                              class_mode = \"other\",\n                                              x_col = \"image_id\",\n                                              y_col = c(\"label_CBB\",\"label_CBSD\", \"label_CGM\", \"label_CMD\", \"label_Healthy\"),\n                                              target_size = c(448, 448),\n                                              batch_size = batch_size)\n\nvalidation_generator <- flow_images_from_dataframe(dataframe = test_image, \n                                              directory = set_train_dir,\n                                              generator = image_data_generator(rescale = 1/255),\n                                              class_mode = \"other\",\n                                              x_col = \"image_id\",\n                                              y_col = c(\"label_CBB\",\"label_CBSD\", \"label_CGM\", \"label_CMD\", \"label_Healthy\"),\n                                              target_size = c(448, 448),\n                                              batch_size = batch_size)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**The keras model**"},{"metadata":{"trusted":true},"cell_type":"code","source":"\n\n##Keras model 2d\nmodel <- keras_model_sequential() %>%\nlayer_conv_2d(filters = 32, kernel_size = c(3, 3), activation = \"relu\",\ninput_shape = c(448, 448, 3)) %>%\nlayer_max_pooling_2d(pool_size = c(2, 2)) %>%\nlayer_conv_2d(filters = 64, kernel_size = c(3, 3), activation = \"relu\") %>%\nlayer_max_pooling_2d(pool_size = c(2, 2)) %>%\nlayer_conv_2d(filters = 128, kernel_size = c(3, 3), activation = \"relu\") %>%\nlayer_max_pooling_2d(pool_size = c(2, 2)) %>%\nlayer_conv_2d(filters = 128, kernel_size = c(3, 3), activation = \"relu\") %>%\nlayer_max_pooling_2d(pool_size = c(2, 2)) %>%\nlayer_flatten() %>%\nlayer_dense(units = 512, activation = \"relu\") %>%\nlayer_dense(units = 5, activation = \"softmax\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Compile**"},{"metadata":{"trusted":true},"cell_type":"code","source":"model %>% compile(\n    optimizer = optimizer_rmsprop(lr=1e-5),\n    loss = \"categorical_crossentropy\",\n    metrics = \"accuracy\"\n)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"history <- model %>% fit_generator(\n    train_generator,\n    steps_per_epoch = 100, #nrow(y_train) / batch_size,\n    epochs = 100,\n    validation_data = validation_generator,\n    validation_step = 50,\n    verbose = 1\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plot(history)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"history","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"name":"ir","display_name":"R","language":"R"},"language_info":{"name":"R","codemirror_mode":"r","pygments_lexer":"r","mimetype":"text/x-r-source","file_extension":".r","version":"3.6.3"}},"nbformat":4,"nbformat_minor":4}