ML의 실용과 몇가지 팁 PART 1


개요(Abstract)
아래의 내용은 hunkim님의 모두를 위한 머신러닝/딥러닝 강의에서 tensorFlow 사용 예제를 R로 변경한 내용이다.
hunkim님의 강좌 주소는 http://hunkim.github.io/ml/ 이다.

아래의 내용은 ML의 실용과 몇가지 팁 수업에 있는 python 코드를 R로 변경한 것이다. 소스는 lab-07-1-learning_rate_and_evaluation.py 이다.
R과 tensorFlow 간 integer 간 호환에 문제가 있어 LONG 타입으로 선언해야 했다. 그리고 tensorFlow는 R의 data.frame 타입을 허용하지 않는다. matrix만 허용한다.
이 강좌의 주요 내용은 훈련 데이터와 검증 데이터를 분리하여 수행하는 예이다.
library(tensorflow)


x_data = rbind(c(1, 2, 1),
               c(1, 3, 2),
               c(1, 3, 4),
               c(1, 5, 5),
               c(1, 7, 5),
               c(1, 2, 5),
               c(1, 6, 6),
               c(1, 7, 7) )
y_data = rbind(c(0, 0, 1),
               c(0, 0, 1),
               c(0, 0, 1),
               c(0, 1, 0),
               c(0, 1, 0),
               c(0, 1, 0),
               c(1, 0, 0),
               c(1, 0, 0) )

# Evaluation our model using this test dataset
x_test = rbind(c(2, 1, 1),
               c(3, 1, 2),
               c(3, 3, 4) )
y_test = rbind(c(0, 0, 1),
               c(0, 0, 1),
               c(0, 0, 1) )


X = tf$placeholder(tf$float32, shape = list(NULL, 3L))
Y = tf$placeholder(tf$float32, shape = list(NULL, 3L))

# random_uniform(shape, nb_classes)
W = tf$Variable(tf$random_uniform(shape=list(3L, 3L)), name="weight")
b = tf$Variable(tf$random_uniform(shape=list(3L)), name="bias")

# tf$nn.softmax computes softmax activations
# softmax = exp(logits) / reduce_sum(exp(logits), dim)
hypothesis = tf$nn$softmax(tf$matmul(X, W) + b)

# Cross entropy cost/loss
cost = tf$reduce_mean(-tf$reduce_sum(Y * tf$log(hypothesis), axis=1L))

# Try to change learning_rate to small numbers
optimizer = tf$train$GradientDescentOptimizer(learning_rate=0.1)$minimize(cost)


prediction = tf$argmax(hypothesis, axis=1L)
is_correct = tf$equal(prediction, tf$argmax(Y, 1L))
accuracy = tf$reduce_mean(tf$cast(is_correct, tf$float32))


sess <- tf$Session()

# Initialize TensorFlow variables
sess$run(tf$global_variables_initializer())

for (step in 1:201) {
    stage = sess$run(list(cost, W, optimizer), feed_dict=dict(X=x_data, Y=y_data))
    cat("\n", step, "-----------------------------")
    names(stage) <- c("cost", "W", "optimizer")
    print(stage)
}
    

# predict
pred = sess$run(prediction, feed_dict=dict(X=x_test))
print(pred)

# Calculate the accuracy
accu = sess$run(accuracy, feed_dict=dict(X=x_test, Y=y_test))
print(accu)


print("END OF CODE")


댓글 없음:

댓글 쓰기