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



댓글 없음:

댓글 쓰기

css cheat sheet 클래스 선택자, margin(마진), display , center 조정 간단한 구성 요소

 앞에서는 html의 간단한 sheet를 소개 하였습니다.   html은  주로 골격을 나타나는 것이라, 디자인을 하는데는 css로 하여야 합니다.  아래 코드와 같이 css 관련 하여 매우 간단하게 코딩 하겠습니다.  body 부분의 css 코딩  ...