R에서 Tensorflow GPU 실행 하기 우분투 18.04

    R에서도 Tensorflow를  GPU로  돌릴 수 있다.   다만 아래의 절차를 따를 경우에만 가능하다. 

R Tensorflow 세팅 순서


우분투에서 성공을 했었는데,  Windows에서도 성공할 수 있을 것 같다. 

   

Tensorflow GPU 설치 R   


일단 GPU 설정인데,   GPU  지난번에 설명을 하여,  아래 링크를 참고로 하고 Skip 하겠다. 


https://rdmkyg.blogspot.com/2021/05/ubuntu-cuda-python.html


R에서 Tensorflow는 miniconda를 Background로 하기 있기 때문에  필드명을 한글로 쓸 수 없다.   참 안타 깝다 한국인으로써..


어찌 되었든,  R 하고 R Studio를 설치 이후   아래를 클릭 하면 설치 페이지가 있다. 


https://rdmkyg.blogspot.com/2021/05/1804-r-base-405-rstudio.html


위와 같이 R 과 Rstudio를 설치 하고 나서 Tensorflow를 아래와 같이 설치 한다. 

 install.packages("tensorflow")

 먼저 Tensorflow를 설치 하고 아래와 같이 라이브러리를 열고 install_tensorflow() 해야 한다.

  >library(tensorflow)

> install_tensorflow()


그리고 설치가 모두 성공적으로 끝난 다음에, 아래를 실행 하면 tensorflow가 정상적으로 설치 된 것을 볼 수 있다.   여기에서 tensorflow버전도, 최신 버전으로 알아서 설치 해준다. 


r tensorflow gpu 가 잘 실행된 화면

위의 그림같이 마지막 줄에 그래픽 카드 사양은 GeForce RTX3080이 나오면 GPU는 정상적으로 세팅 된 것이다.


아래   딥러닝에서 처음 소개 할 때 쓰는 MNIST  데이터 셋 이다.  손글씨,  이미 이것은 이미지 데이터를 미리 전처리 한 것이라 전처리 할 필요 없이 바로 코드가 돌아간다. 

  

손글씨 인식

  library(tensorflow)
  tf$constant("Hellow Tensorflow")
## tf.Tensor(b'Hellow Tensorflow', shape=(), dtype=string)
  library(keras)

# 손글씨 데이터 셋 불러오고,  RGB 데이터 셋을 0~1사이의 데이터로 만들기  
  mnist <- dataset_mnist()
  mnist$train$x <- mnist$train$x/255
  mnist$test$x <- mnist$test$x/255  
  

# Keras API를 불러오고,  분류 숫자 10개를 분류하기 때문에 softmax를 사용한다.  
  model <- keras_model_sequential() %>% 
    layer_flatten(input_shape = c(28, 28)) %>% 
    layer_dense(units = 128, activation = "relu") %>% 
    layer_dropout(0.2) %>% 
    layer_dense(10, activation = "softmax")  
  

# 모델 summary를 하여 파라메터의 갯수를 본다. 
  summary(model)
## Model: "sequential"
## ________________________________________________________________________________
## Layer (type)                        Output Shape                    Param #     
## ================================================================================
## flatten (Flatten)                   (None, 784)                     0           
## ________________________________________________________________________________
## dense_1 (Dense)                     (None, 128)                     100480      
## ________________________________________________________________________________
## dropout (Dropout)                   (None, 128)                     0           
## ________________________________________________________________________________
## dense (Dense)                       (None, 10)                      1290        
## ================================================================================
## Total params: 101,770
## Trainable params: 101,770
## Non-trainable params: 0
## ________________________________________________________________________________
# loss 함수와 옵티마이져 및 매트릭을 결정한다.   
  model %>% 
    compile(
      loss = "sparse_categorical_crossentropy",
      optimizer = "adam",
      metrics = "accuracy"
    )
  
  
# 모델을 돌린다. 
  model %>% 
  fit(
    x = mnist$train$x, y = mnist$train$y,
    epochs = 5,
    validation_split = 0.3,
    verbose = 2
  )  
  
# Predict 함수를 이용하여,  예측한다. 
  predictions <- predict(model, mnist$test$x)
  head(predictions, 2)
##              [,1]         [,2]         [,3]         [,4]         [,5]
## [1,] 1.429097e-07 4.297387e-09 3.098056e-05 2.449672e-04 1.006913e-11
## [2,] 2.522674e-06 1.303887e-03 9.986618e-01 1.548268e-05 8.529131e-12
##              [,6]         [,7]         [,8]         [,9]        [,10]
## [1,] 9.571581e-08 1.414875e-13 9.997235e-01 2.365223e-08 2.067980e-07
## [2,] 7.962441e-07 8.497557e-06 9.106306e-11 7.043547e-06 1.456738e-11
# 모델을 평가 한다. 
  model %>% 
    evaluate(mnist$test$x, mnist$test$y, verbose = 0)  
##       loss   accuracy 
## 0.08854376 0.97270000
# 파라미터를 저장 한다. 
  save_model_tf(object = model, filepath = "model")
  
# 파라미터를 불러온다.  저장 한것과 지금 것과 같은지 확인 해 본다. 
  reloaded_model <- load_model_tf("model")
  all.equal(predict(model, mnist$test$x), predict(reloaded_model, mnist$test$x))
## [1] TRUE


 R은 파이썬과 다르게, 에포크 돌때 마다, 그래프가 실시간으로 그려 진다. 

R 에포크 실시간 표시

 파이썬은 에포크 돌리면서 아래와  같은 텍스트만 볼 수 있다.   R에서도 파이썬과 같이 행렬을 사용하기 때문에, 데이터 구조는 같다고 보면 된다.  

Epoch 1/5

1313/1313 - 2s - loss: 0.3475 - accuracy: 0.8990 - val_loss: 0.1810 - val_accuracy: 0.9477
Epoch 2/5
1313/1313 - 3s - loss: 0.1664 - accuracy: 0.9512 - val_loss: 0.1308 - val_accuracy: 0.9613
Epoch 3/5
1313/1313 - 3s - loss: 0.1250 - accuracy: 0.9627 - val_loss: 0.1138 - val_accuracy: 0.9652
Epoch 4/5
1313/1313 - 2s - loss: 0.0983 - accuracy: 0.9706 - val_loss: 0.1106 - val_accuracy: 0.9673
Epoch 5/5
1313/1313 - 2s - loss: 0.0826 - accuracy: 0.9749 - val_loss: 0.1008 - val_accuracy: 0.9710


R 관 관련 된 서적은 현재 발간 된 것이 많지 않다. 하지만, R 유저가 딥러닝을 이해하는데는 충분히 좋은 방법론이다.



댓글 없음:

댓글 쓰기

공무 스케줄 AI Agem에 대한 생각

     지금 상황이 아비 규환이다.  어느 부서든 회사가 인수 합병되고 나서  투자를 기획하는 경영기획이 특히 않이 정신이 없고, 우리부서도 전부 미국 필리 조선소로 인원이 나가 있어,  사실상 10년 이상 고기량자는 거의 없다.   우리부서에 남아...