Introdução e objetivo

A base de dados utilizada para o programa está dísponível por meio do link: https://www.kaggle.com/c/digit-recognizer/leaderboard. Para o treinamento usaremos os arquivos de dados train.csv e test.csv que contêm uma série de números desenhados de a 1 a 9. Cada imagem tem uma quantidade de pixels e o codigo analisa linhas e colunas de pixels para mostrar os numeros que estão presentes.

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)
library("magick")
## Linking to ImageMagick 6.9.9.14
## Enabled features: cairo, freetype, fftw, ghostscript, lcms, pango, rsvg, webp
## Disabled features: fontconfig, x11

Primeiro carregamos os pacotes que serão necessarios.

 img <- image_read("D:/Users/Usuario/Downloads/RedesNeuraisDigit.jpg")
 img

 img28x28 <- img %>% image_scale(geometry = 28)
 img28x28

 img_dados <- image_data(img28x28, channels = "gray")

 img_num <- img_dados %>% as.numeric()
 img_num2 <- img_num[,,1]

 image(img_num2)

 imgD2 <- image_read("D:/Users/Usuario/Downloads/RedesNeuraisDigit.jpg") %>%
   image_scale(geometry = "28x28") %>%
   image_data(channels = "gray") %>%
   .[1,,] %>%
   as.numeric()

 imgD2 %>% matrix(nrow = 28, byrow = TRUE) %>%
   image()
 imgD2neg <- 1-imgD2


 imgD2 <- image_read("D:/Users/Usuario/Downloads/RedesNeuraisDigit.jpg") %>%
   image_scale(geometry = "28x28") %>%
   image_data(channels = "gray") %>%
   .[1,,] %>%
   as.numeric()



 imgD2 %>% matrix(nrow = 28, byrow = TRUE) %>%
   image()

 imgD2neg <- (255-imgD2)/255


 imgD6n <- (255-imgD2)/255
 imgD0n2 <- ifelse(imgD2neg < .4, 0, 1)
 imgD6n2 <- ifelse(imgD2neg < .4, 0, 1)
 imgD0n2 %>% matrix(nrow = 28, byrow = TRUE) %>%
   image(col = grey.colors(255))

 imgD2neg %>% matrix(nrow = 28, byrow = TRUE) %>%
   apply(2,rev) %>%
   t() %>%
   image()

Acima, vamos gerar os caracteres de 0 a 9 numa escala de cor cinza para facilitar o reconhecimento do programa e pqara que tenha uma melhor precisão para determinar o numero correspondente a imagem. Também usaremos a mesma quantidade de pixel para todos.

test <- read_rds("D:/Users/Usuario/Downloads/Sexta Feira 13 720p - Filmes Beta/test.rds")
label <- read_rds("D:/Users/Usuario/Downloads/Sexta Feira 13 720p - Filmes Beta/label_test.rds")
train <- read_rds("D:/Users/Usuario/Downloads/Sexta Feira 13 720p - Filmes Beta/train.rds")

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

O número de classes da variável resposta e as dimensões da matriz são fixadas.