R dili kullanılarak oluşturulan derin öğrenme modeli kullanılarak Rakam Sınıflandırma.

May 07 2023
Giriş: Makine öğrenimi veya derin öğrenme uygulamaları denilince aklımıza gelen tek dil python'dur. Ancak, bu yeteneğe sahip tek dilin bu olmadığını biliyor muydunuz?
kaynak: tembler.net

Giriiş:

Makine öğrenimi veya derin öğrenme uygulamaları denilince aklımıza gelen tek dil python'dur. Ancak, bu yeteneğe sahip tek dilin bu olmadığını biliyor muydunuz? Bu amaçla kullanılabilecek python dışındaki programlama dilleri Java, Scala, Julia, MATLAB ve R'dir. Bu, onu rakipsiz kılan sürece yardımcı olmak için python'da bulunan geniş modül ve kitaplık listesidir.

İşte bu yazıda, Elle yazılmış rakam sınıflandırması için R kullanarak model geliştirmeyi ele alacağız.

Gerekli kitaplıkları içe aktarma:

Projemiz için gerekli kütüphaneleri içe aktararak başlıyoruz. , , ve kitaplıkları library()içe aktarmak için işlevi kullanıyoruz . Bu kütüphaneleri import etmeden önce R ortamında kurulu olduğundan emin olmalıyız. İçe aktaramıyorsak, kütüphaneleri R programlama ortamımıza kurmak için bu işlevi kullanabiliriz .dslabskerastensorflowinstall.packages()

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

Daha sonra MNIST veri setini değişkenlerimize yükleyip saklıyoruz. Veri setini yüklemek için kütüphanedeki read_mnist()fonksiyonu kullanıyoruz .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.

Daha sonra, MNIST verilerini eğitim ve doğrulama için hazırlamak için gereken veri hazırlama adımlarını uyguluyoruz ve sınıfın El Yazısı Rakam Veri Kümesini aynı şekilde biçimlendirilecek şekilde hazırlıyoruz.

Fonksiyonu kullanarak sınıfın El Yazısı Rakam Veri Kümesini yüklüyoruz read.csv()ve değişkende saklıyoruz 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)

Artık verilerimizi işledikten sonra modelimizin tasarımına ve eğitimine geçebiliriz. Bunun için modelimizi oluşturmak için kütüphanedeki keras_model_sequential()işlevi kullanıyoruz . kerasModelimiz iki evrişim katmanından, iki maksimum havuzlama katmanından, iki bırakma katmanından, iki yoğun katmandan ve bir softmax aktivasyon fonksiyonundan oluşur.


#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);

Model Mimarisi.

Ardından, kayıp işlevini, optimize ediciyi ve değerlendirme metriğini belirterek modeli derliyoruz.


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

Son olarak, modelimizi tekrar eğitebilmek ve test verilerinde gerçekten iyi çalışıyorsa devreye alabilmek için kaydediyoruz.

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