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)
그리고 설치가 모두 성공적으로 끝난 다음에, 아래를 실행 하면 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
댓글 없음:
댓글 쓰기