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 유저가 딥러닝을 이해하는데는 충분히 좋은 방법론이다.



댓글 없음:

댓글 쓰기

[주식 클로드 자동매매 프로젝트] 제2편. 데이터 인프라 구축 — 모델보다 데이터가 먼저다

 머신러닝 모델을 이야기하기 전에, 그 모델이 먹는 데이터가 어디서 어떻게 왔는지부터 정직하게 밝혀야 한다. 이 프로젝트에서 가장 많은 시간이 들어간 부분은 화려한 모델 튜닝이 아니라, "내가 정말 그 데이터를 갖고 있는가"를 확인하...