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.
# 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.