Phân loại chữ số bằng mô hình học sâu được tạo bằng ngôn ngữ R.

Giới thiệu:
Khi nói đến các ứng dụng học máy hoặc học sâu, ngôn ngữ duy nhất xuất hiện trong đầu chúng ta là python. Nhưng, bạn có biết rằng đó không phải là ngôn ngữ duy nhất có khả năng đó. Các ngôn ngữ lập trình khác ngoài python có thể được sử dụng cho mục đích này là Java, Scala, Julia, MATLAB và R. Đây chỉ là danh sách rộng rãi các mô-đun và thư viện có sẵn trong python để hỗ trợ quá trình khiến nó trở nên vô địch.
Ở đây trong bài viết này, Chúng tôi sẽ tiến hành phát triển mô hình bằng cách sử dụng R để phân loại chữ số viết tay.
Nhập các thư viện cần thiết:
Chúng tôi bắt đầu bằng cách nhập các thư viện cần thiết cho dự án của chúng tôi. Chúng tôi sử dụng library()
chức năng để nhập dslabs
, keras
và tensorflow
thư viện. Chúng tôi phải đảm bảo rằng các thư viện này được cài đặt trong môi trường R trước khi nhập chúng. Chúng tôi có thể sử dụng install.packages()
chức năng để cài đặt các thư viện vào môi trường lập trình R nếu chúng tôi không thể nhập chúng.
library(dslabs)
library(keras)
library(tensorflow)
Sau đó, chúng tôi tải tập dữ liệu MNIST vào các biến của mình và lưu trữ nó. Chúng tôi sử dụng read_mnist()
chức năng từ dslabs
thư viện để tải tập dữ liệu.
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.
Tiếp theo, chúng tôi thực hiện mọi bước chuẩn bị dữ liệu cần thiết để chuẩn bị dữ liệu MNIST cho đào tạo và xác thực, đồng thời chuẩn bị Tập dữ liệu chữ số viết tay của lớp để nó được định dạng theo cùng một cách.
Chúng tôi tải Tập dữ liệu chữ số viết tay của lớp bằng read.csv()
hàm và lưu trữ nó trong chd
biến.
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)
Bây giờ, khi chúng tôi đã xử lý dữ liệu của mình, chúng tôi có thể chuyển sang thiết kế và đào tạo mô hình của mình. Để làm được điều đó, chúng tôi sử dụng keras_model_sequential()
chức năng từ keras
thư viện để tạo mô hình của mình. Mô hình của chúng tôi bao gồm hai lớp tích chập, hai lớp tổng hợp tối đa, hai lớp bỏ học, hai lớp dày đặc và chức năng kích hoạt 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);

Tiếp theo, chúng tôi biên dịch mô hình bằng cách chỉ định hàm mất mát, trình tối ưu hóa và chỉ số đánh giá.
# 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.
Cuối cùng, chúng tôi lưu mô hình của mình để chúng tôi có thể huấn luyện lại và triển khai nó nếu mô hình hoạt động thực sự tốt trên dữ liệu thử nghiệm.
#saveRDS(model,"<filepath>/<UNI>_model.RDS")
saveRDS(model, "digit_classifier.rds")