{"cells":[{"metadata":{"_uuid":"051d70d956493feee0c6d64651c6a088724dca2a","_execution_state":"idle","trusted":true},"cell_type":"code","source":"# Load libraries\nlibrary(data.table)\nlibrary(magrittr)\nlibrary(Metrics)\nlibrary(keras)\nlist.files(path = \"../input/Kannada-MNIST\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Load data\ntrain <- fread('../input/Kannada-MNIST/train.csv')\ntest <- fread('../input/Kannada-MNIST/test.csv')\nval <- fread('../input/Kannada-MNIST/Dig-MNIST.csv')\nsubmission <- fread('../input/Kannada-MNIST/sample_submission.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Separate target\ny <- train$label\ntrain$label <- NULL\n\ny_val <- val$label\nval$label <- NULL\n\n# Remove id from test\ntest$id <- NULL","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Scale train and test data\ntrain <- train / 255 \nval <- val/255\ntest <- test / 255\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Transform table to matrix\ntrain <- as.matrix(train)\nval <- as.matrix(val)\ntest <- as.matrix(test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Redefine  dimension of train/val/test inputs\nX_train <- array_reshape(train, c(nrow(train), 28, 28, 1))\nX_val <- array_reshape(val, c(nrow(val), 28, 28, 1))\nX_test <- array_reshape(test, c(nrow(test), 28, 28, 1))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"cat('train shape ', dim(X_train), '\\n')\ncat('val shape ', dim(X_val), '\\n')\ncat('test shape ', dim(X_test), '\\n')\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Convert target variable to class matrix\ny_train <- to_categorical(y, 10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model <- keras_model_sequential() %>%\n  layer_conv_2d(filters = 128, kernel_size = c(3,3), activation = 'relu', padding = 'same',\n                input_shape = c(28, 28, 1)) %>% \n  layer_conv_2d(filters = 128, kernel_size = c(3,3), activation = 'relu', padding = 'same') %>%  \n  layer_batch_normalization() %>%\n  layer_max_pooling_2d(pool_size = c(2, 2)) %>%\n  layer_dropout(rate = 0.3) %>% \n\n  layer_conv_2d(filters = 256, kernel_size = c(8,8), activation = 'relu', padding = 'same') %>% \n  layer_conv_2d(filters = 256, kernel_size = c(8,8), activation = 'relu', padding = 'same') %>% \n  layer_batch_normalization() %>%\n  layer_max_pooling_2d(pool_size = c(2, 2)) %>%\n  layer_dropout(rate = 0.3) %>% \n  \n  layer_flatten() %>%\n  layer_dense(units = 128, activation = 'relu') %>%\n  layer_dropout(rate = 0.4) %>%\n  layer_dense(units = 64, activation = 'relu') %>%\n  layer_dense(units = 10, activation = 'softmax')\n\nmodel %>% compile(\n  loss = \"binary_crossentropy\",\n  optimizer = 'adam',\n  metrics = \"accuracy\"\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"summary(model)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Train model\nset.seed(123)\nhistory <- model %>% fit(X_train, y_train,  \n  validation_split = 0.1,\n  epochs = 50,\n  verbose = 1,\n  callbacks = list(callback_early_stopping(monitor='val_acc', min_delta=0.001, patience=10,\n                                 verbose=1, mode='max', baseline=NULL)))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Plot training results\nplot(history)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# make prediction on val data\ny_val_predict <- model %>% predict_classes(X_val)\n\n# check perfomance\nMetrics::accuracy(actual = y_val, predicted = y_val_predict) # 0.84150390625","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# make prediction on test data\ny_test <- model %>% predict_classes(X_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# save prediction\nsubmission$label <- y_test\nfwrite(submission, 'submission.csv')","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"R","language":"R","name":"ir"},"language_info":{"mimetype":"text/x-r-source","name":"R","pygments_lexer":"r","version":"3.4.2","file_extension":".r","codemirror_mode":"r"}},"nbformat":4,"nbformat_minor":1}