Introdução

O programa tem por funçao treinar uma rede convulucional usando os mesmos dados do digit recognizer, feito anteriormente. O teste trabalha com tipo array e fará varios testes, depois de compilar todos, o resultado sairá no input.

O código

# Loading Libraries
library(tidyverse)
## -- Attaching packages ------------------------------------- tidyverse 1.2.1 --
## v ggplot2 3.2.1     v purrr   0.3.3
## v tibble  2.1.3     v dplyr   0.8.3
## v tidyr   1.0.0     v stringr 1.4.0
## v readr   1.3.1     v forcats 0.4.0
## -- Conflicts ---------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(keras)
#install_keras()

O programa começa carregandos os pacoes e instalamdo o keras caso não esteja instalado.

# Constants
img_rows <- 28
img_cols <- 28
n_classes <- 10

# Loading Data
#kaggle_test <- read_csv("~/Downloads/digit-recognizer/kaggle_test.csv")
#kaggle_train <- read_csv("~/Downloads/digit-recognizer/kaggle_train.csv")

label <- read_rds("label_test.rds")
train <- read_rds("train.rds")
test <- read_rds("test.rds")
x_train <- train %>%
  filter(Flag == 0) %>%
  select(-label, -Flag) %>%
  mutate_all(function(x) x/255) %>%
  as.matrix()

y_train <- train %>%
  filter(Flag == 0) %>%
  select(label) %>% as.matrix() %>%
  to_categorical(num_classes = 10)


# CNN

# Redefine dimension of train/test inputs
x_train_cnn <- array_reshape(x_train, c(nrow(x_train), img_rows, img_cols, 1))
cnn_test <- array_reshape(test, c(nrow(test), img_rows, img_cols, 1))
input_shape <- c(img_rows, img_cols, 1)
#image(x_train_cnn[3,,,1])

model_cnn <- keras_model_sequential() %>%
  layer_conv_2d(
    filters = 32,
    kernel_size = c(3, 3),
    activation = 'relu',
    input_shape = input_shape
  ) %>%
  layer_conv_2d(filters = 64,
                kernel_size = c(3, 3),
                activation = 'relu') %>%
  layer_max_pooling_2d(pool_size = c(2, 2)) %>%
  layer_dropout(rate = 0.25) %>%
  layer_flatten() %>%
  # these are the embeddings (activations) we are going to visualize
  layer_dense(units = 128, activation = 'relu', name = 'features') %>%
  layer_dropout(rate = 0.25) %>%
  layer_dense(units = 10, activation = 'softmax')

# Compile model
model_cnn %>% compile(
  loss = "categorical_crossentropy",
  optimizer = optimizer_adadelta(),
  metrics = c('accuracy')
)

summary(model_cnn)

history <- model_cnn %>% fit(
  x_train_cnn, y_train,
  epochs = 12, batch_size = 128,
  validation_split = 0.2
)

# Evaluate
model_cnn %>% evaluate(cnn_test, label)

Nesta parte do codigo, será escolhida uma base de dados para o treinamento e também será aplicado todos os parametros ordenados para o treino. Logo após ele gerara gráficos sobre a perda e acurácia, e depois é apresentado o resultado.