R 언어로 만든 딥러닝 모델을 이용한 숫자 분류.

May 07 2023
소개: 기계 학습 또는 딥 러닝 응용 프로그램에 관해서는 우리 마음에 떠오르는 유일한 언어는 Python입니다. 그러나 그러한 기능을 가진 유일한 언어가 아니라는 사실을 알고 계셨습니까?
출처: templer.net

소개:

기계 학습 또는 딥 러닝 응용 프로그램에 관해서는 우리 마음에 떠오르는 언어는 파이썬뿐입니다. 그러나 그러한 기능을 가진 유일한 언어가 아니라는 사실을 알고 계셨습니까? 목적을 위해 사용할 수 있는 Python 이외의 프로그래밍 언어는 Java, Scala, Julia, MATLAB 및 R입니다. Python에서 사용할 수 있는 모듈 및 라이브러리의 광범위한 목록은 이를 타의 추종을 불허하는 프로세스를 지원합니다.

여기 이 기사에서는 손으로 쓴 숫자 분류를 위해 R을 사용하여 모델 개발을 진행합니다.

필요한 라이브러리 가져오기:

프로젝트에 필요한 라이브러리를 가져오는 것으로 시작합니다. 우리는 함수를 사용하여 , 및 라이브러리를 library()가져옵니다 . 이러한 라이브러리를 가져오기 전에 R 환경에 설치되어 있는지 확인해야 합니다. 라이브러리를 가져올 수 없는 경우 함수를 사용하여 R 프로그래밍 환경에 라이브러리를 설치할 수 있습니다 .dslabskerastensorflowinstall.packages()

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모델을 만듭니다. 우리 모델은 2개의 컨볼루션 레이어, 2개의 최대 풀링 레이어, 2개의 드롭아웃 레이어, 2개의 밀집 레이어 및 소프트맥스 활성화 함수로 구성됩니다.


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