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