개요(Abstract)
아래의 내용은 hunkim님의 모두를 위한 머신러닝/딥러닝 강의에서 tensorFlow 사용 예제를 R로 변경한 내용이다.
아래의 내용은 hunkim님의 모두를 위한 머신러닝/딥러닝 강의에서 tensorFlow 사용 예제를 R로 변경한 내용이다.
hunkim님의 강좌 주소는 http://hunkim.github.io/ml/ 이다.
아래의 내용은 ML의 실용과 몇가지 팁 수업에 있는 python 코드를 R로 변경한 것이다.
소스는 lab-07-4-mnist_introduction.py 이다.
소스는 lab-07-4-mnist_introduction.py 이다.
library(tensorflow) library(ggplot2) library(reshape2) # Check out https://www.tensorflow.org/get_started/mnist/beginners for # more information about the mnist dataset # devtools::install_github("rstudio/tensorflow") # 아래 구문이 에러나면 위에 구문으로 tensorflow 재설치 필요 datasets <- tf$contrib$learn$datasets mnist <- datasets$mnist$read_data_sets("MNIST-data", one_hot = TRUE) # reticulate::py_config() # tf_config() # devtools::session_info() # session_info() # sessionInfo() names(mnist) # [1] "count" "index" "test" "train" "validation" mnist$train # <tensorflow.contrib.learn.python.learn.datasets.mnist.DataSet> nb_classes = 10L # MNIST data image of shape 28 * 28 = 784 X = tf$placeholder(tf$float32, shape=list(NULL, 784L)) # 0 - 9 digits recognition = 10 classes Y = tf$placeholder(tf$float32, shape=list(NULL, nb_classes)) W = tf$Variable(tf$random_normal(shape=list(784L, nb_classes) )) b = tf$Variable(tf$random_normal(shape = list(nb_classes) )) # Hypothesis (using softmax) hypothesis = tf$nn$softmax(logits=(tf$matmul(X, W) + b)) cost = tf$reduce_mean(input_tensor=-tf$reduce_sum(Y * tf$log(hypothesis), axis=1L)) train = tf$train$GradientDescentOptimizer(learning_rate=0.1)$minimize(cost) is_correct = tf$equal(tf$argmax(hypothesis, 1L), tf$argmax(Y, 1L)) accuracy = tf$reduce_mean(tf$cast(is_correct, tf$float32)) # parameters num_epochs = 15L batch_size = 100L num_iterations = as.numeric(mnist$train$num_examples / batch_size) sess <- tf$Session() # Initialize TensorFlow variables sess$run(tf$global_variables_initializer()) # Training cycle for ( epoch in 1:num_epochs) { avg_cost = 0 for (i in 1:num_iterations) { batches = mnist$train$next_batch(batch_size) # length(batches) batch_xs <- batches[[1]] batch_ys <- batches[[2]] stage = sess$run(list(train, cost), feed_dict=dict(X = batch_xs, Y = batch_ys) ) avg_cost = avg_cost + stage[[2]] / num_iterations if (i %% 100 == 1) { print(paste0("Epoch: ", epoch, ", Cost: ", format(avg_cost, digits = 4) )) } } print(paste0("LAST >> Epoch: ", epoch, ", Cost: ", format(avg_cost, digits = 4) )) } print("===================== Learning finished =====================") # Test the model using test sets print( paste0( "Accuracy: ", accuracy$eval(session=sess, feed_dict=dict(X = mnist$test$images, Y = mnist$test$labels ) ) ) ) # 이미지를 그래프로 보는 방법은 # https://tensorflow.rstudio.com/tfestimators/articles/examples/mnist.html 를 참조 # batch_xs로 데이터를 가져 온 후 이미지 출력해야 함 n <- 36 indices <- sample(nrow(batch_xs), size = n) data <- array(batch_xs[indices, ], dim = c(n, 28, 28)) melted <- melt(data, varnames = c("image", "x", "y"), value.name = "intensity") ggplot(melted, aes(x = x, y = y, fill = intensity)) + geom_tile() + scale_fill_continuous(name = "Pixel Intensity") + scale_y_reverse() + facet_wrap(~ image, nrow = sqrt(n), ncol = sqrt(n)) + theme( strip.background = element_blank(), strip.text.x = element_blank(), panel.spacing = unit(0, "lines"), axis.text = element_blank(), axis.ticks = element_blank() ) + labs( title = "MNIST Image Data", subtitle = "Visualization of a sample of images contained in MNIST data set.", x = NULL, y = NULL ) print("END OF CODE")
댓글 없음:
댓글 쓰기