Классификация цифр с использованием модели глубокого обучения, созданной с использованием языка R.

May 07 2023
Введение. Когда речь идет о приложениях для машинного обучения или глубокого обучения, единственный язык, который приходит нам на ум, — это Python. Но знаете ли вы, что это не единственный язык с такой возможностью.
источник: tembler.net

Введение:

Когда дело доходит до приложений машинного обучения или глубокого обучения, единственный язык, который приходит нам на ум, — это Python. Но знаете ли вы, что это не единственный язык с такой возможностью. Языки программирования, отличные от Python, которые можно использовать для этой цели, — это Java, Scala, Julia, MATLAB и R. Просто широкий список модулей и библиотек, доступных в Python, помогает процессу, который делает его непревзойденным.

Здесь, в этой статье, мы рассмотрим разработку модели с использованием R для классификации рукописных цифр.

Импорт необходимых библиотек:

Начнем с импорта необходимых библиотек для нашего проекта. Мы используем эту library()функцию для импорта dslabs, kerasи tensorflowбиблиотек. Мы должны убедиться, что эти библиотеки установлены в среде R, прежде чем импортировать их. Мы можем использовать эту install.packages()функцию для установки библиотек в нашу среду программирования R, если мы не можем их импортировать.

library(dslabs)
library(keras)
library(tensorflow)

Затем мы загружаем набор данных MNIST в наши переменные и сохраняем его. Мы используем read_mnist()функцию из dslabsбиблиотеки для загрузки набора данных.

mnist <- read_mnist()

i <- 5
image(1:28, 1:28, matrix(mnist$test$images[i,], nrow=28)[ , 28:1], 
    col = gray(seq(0, 1, 0.05)), xlab = "", ylab="")

      
                
Image displayed.

Затем мы реализуем все шаги подготовки данных, необходимые для подготовки данных MNIST для обучения и проверки, и подготавливаем набор рукописных цифр класса, чтобы он был отформатирован таким же образом.

Мы загружаем набор рукописных цифр класса с помощью read.csv()функции и сохраняем его в chdпеременной.

chd <- read.csv("combined_digits_1.csv")
dim(chd)

xtest = chd[,1:784]
ytest = chd[,785]
 
xtest = as.matrix(xtest)
xtest <- array_reshape(xtest, c(nrow(xtest), 28, 28, 1))

mnist = read_mnist()  
x_train = mnist$train$images
y_train = mnist$train$labels
x_val = mnist$test$images
y_val = mnist$test$labels

x_train = array_reshape(x_train, c(nrow(x_train), 28, 28, 1))
x_val = array_reshape(x_val, c(nrow(x_val), 28, 28, 1)) 

y_train = to_categorical(y_train, 10)
y_val = to_categorical(y_val, 10)
ytest = to_categorical(ytest,10)

Теперь, когда мы обработали наши данные, мы можем перейти к разработке и обучению нашей модели. Для этого мы используем keras_model_sequential()функцию из kerasбиблиотеки для создания нашей модели. Наша модель состоит из двух сверточных слоев, двух слоев максимального объединения, двух слоев отсева, двух плотных слоев и функции активации softmax.


#Model Building: Code Here
input_shape <- c(28, 28, 1)
batch_size <- 128
num_classes <- 10
epochs <- 10  

model <- keras_model_sequential() %>%
  layer_conv_2d(filters = 32, kernel_size = c(3,3), activation = 'relu', input_shape = input_shape) %>% 
  layer_max_pooling_2d(pool_size = c(2, 2)) %>% 
  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() %>% 
  layer_dense(units = 128, activation = 'relu') %>% 
  layer_dropout(rate = 0.5) %>% 
  layer_dense(units = num_classes, activation = 'softmax')  


summary(model);

Архитектура модели.

Затем мы компилируем модель, указав функцию потерь, оптимизатор и метрику оценки.


# compiling our model
model %>% compile(
  loss = loss_categorical_crossentropy,
  optimizer = optimizer_adadelta(),
  metrics = c('accuracy')
)

# fitting the model(training it)  
model_history <- model %
                  fit(x_train, y_train,
                  batch_size = batch_size,
                  epochs = epochs,
                  validation_data = list(x_val, y_val),
                  verbose = 1)

      
                
Model training in action.

#Model Testing
model %>% evaluate(xtest, ytest)

      
                
Loss and Accuracy.

Наконец, мы сохраняем нашу модель, чтобы мы могли ее снова обучить и развернуть, если модель действительно хорошо работает на тестовых данных.

#saveRDS(model,"<filepath>/<UNI>_model.RDS")
saveRDS(model, "digit_classifier.rds")