ML의 실용과 몇가지 팁 PART 2


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

아래의 내용은 ML의 실용과 몇가지 팁 수업에 있는 python 코드를 R로 변경한 것이다.
소스는 lab-07-2-linear_regression_without_min_max.py 이다.
작업하면서 R과 tensorFlow 간 integer 간 호환에 문제가 있어 LONG 타입으로 선언해야 했다. 그리고 tensorFlow는 R의 data.frame 타입을 허용하지 않는다. matrix만 허용한다.
이 강좌의 주요 내용은 회귀 예측에서 발산하는 경우, standardization/normalization 을 수행하여 수렴하는 예이다.
library(tensorflow)

xy = matrix(c(828.659973, 833.450012, 908100, 828.349976, 831.659973,
              823.02002, 828.070007, 1828100, 821.655029, 828.070007,
              819.929993, 824.400024, 1438100, 818.97998, 824.159973,
              816, 820.958984, 1008100, 815.48999, 819.23999,
              819.359985, 823, 1188100, 818.469971, 818.97998,
              819, 823, 1198100, 816, 820.450012,
              811.700012, 815.25, 1098100, 809.780029, 813.669983,
              809.51001, 816.659973, 1398100, 804.539978, 809.559998), 
            ncol = 5)
   

# very important. It does not work without it.
# 데이터 값의 차이가 너무 커서 학습이 안됨 => R에서 척도 변환이 필요함
# 아래 라인을 주석 처리하여 실행되면 학습이 안되는 것이 확인 가능 함
xy = scale(xy)
# print(xy)

x_data = xy[ , -(ncol(xy))]
# R에서는 xy[ , ncol(xy)] 수행 결과 벡터로 반환 됨, matrix로 변환해야 함
y_data = as.matrix(xy[ , ncol(xy)])


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

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

# tf$nn.softmax computes softmax activations
hypothesis = tf$matmul(X, W) + b

# Cross entropy cost/loss
cost = tf$reduce_mean(-tf$square(hypothesis - Y))

optimizer = tf$train$GradientDescentOptimizer(learning_rate=1e-5)
train = optimizer$minimize(cost)


sess <- tf$Session()

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

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




print("END OF CODE")




댓글 없음:

댓글 쓰기