Klasifikasi Digit menggunakan model deep learning yang dibuat menggunakan bahasa R.
Perkenalan:
Ketika berbicara tentang pembelajaran mesin atau aplikasi pembelajaran mendalam, hanya bahasa yang muncul di benak kita adalah python. Tapi, tahukah Anda bahwa itu bukan satu-satunya bahasa dengan kemampuan itu. Bahasa pemrograman selain python yang dapat digunakan untuk tujuan tersebut adalah Java, Scala, Julia, MATLAB, dan R. Daftar lengkap modul dan pustaka yang tersedia dalam python untuk membantu proses membuatnya tidak terkalahkan.
Di sini, di artikel ini, Kami akan melalui pengembangan model menggunakan R untuk klasifikasi digit tulisan tangan.
Mengimpor perpustakaan yang diperlukan:
Kami mulai dengan mengimpor perpustakaan yang diperlukan untuk proyek kami. Kami menggunakan library()
fungsi untuk mengimpor dslabs
, keras
, dan tensorflow
perpustakaan. Kita harus memastikan bahwa pustaka ini dipasang di lingkungan R sebelum mengimpornya. Kita dapat menggunakan install.packages()
fungsi tersebut untuk menginstal pustaka ke dalam lingkungan pemrograman R kita jika kita tidak dapat mengimpornya.
library(dslabs)
library(keras)
library(tensorflow)
Kami kemudian memuat dataset MNIST ke dalam variabel kami dan menyimpannya. Kami menggunakan read_mnist()
fungsi dari dslabs
perpustakaan untuk memuat dataset.
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.
Selanjutnya kami menerapkan langkah-langkah persiapan data yang diperlukan untuk menyiapkan data MNIST untuk pelatihan dan validasi, dan menyiapkan Set Data Digit Tulisan Tangan kelas agar diformat dengan cara yang sama.
Kami memuat Set Data Digit Tulisan Tangan kelas menggunakan read.csv()
fungsi dan menyimpannya dalam chd
variabel.
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)
Sekarang, setelah data kami diproses, kami dapat beralih ke perancangan dan pelatihan model kami. Untuk itu kami menggunakan keras_model_sequential()
fungsi dari keras
perpustakaan untuk membuat model kami. Model kami terdiri dari dua lapisan konvolusional, dua lapisan penyatuan maks, dua lapisan dropout, dua lapisan padat, dan fungsi aktivasi 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);
Selanjutnya, kami mengkompilasi model dengan menentukan fungsi kerugian, pengoptimal, dan metrik evaluasi.
# 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.
Terakhir, kami menyimpan model kami sehingga kami dapat melatihnya lagi dan menerapkannya juga jika model bekerja dengan sangat baik pada data pengujian.
#saveRDS(model,"<filepath>/<UNI>_model.RDS")
saveRDS(model, "digit_classifier.rds")