티스토리 뷰
TensorFlow로 간단한 linear regression을 구현¶
In [30]:
from PIL import Image
Image.open('mechanics.png')
Out[30]:
(1) Build graph using TensorFlow operations¶
H(x) = Wx + b¶
In [1]:
import tensorflow as tf
In [4]:
# X and Y data
x_train = [1, 2, 3]
y_train = [1, 2, 3]
W = tf.Variable(tf.random_normal([1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
# Variable은 텐서플로우가 학습하는 과정에서 알아서 변경한다.(trainable)
# Our hypothesis XW+b
hypothesis = x_train * W + b #!!!!
비용함수¶
In [5]:
# cost/loss function
cost = tf.reduce_mean(tf.square(hypothesis - y_train))
t = [1., 2., 3., 4.]
tf.reduce_mean(t) = 2.5 (텐서가 있을때 평균 내 주는 함수)
GradientDescent¶
비용함수를 minimize 해주자
In [8]:
# Minimaize
# Magic
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train = optimizer.minimize(cost) # minimize하는 애노드
(2)(3) Run/update graph and get results¶
W와 b라는 변수가 쓰였었는데, 이 변수들을 사용하기 위해서는 tensorflow의 global_variables_initializer()를 실행시켜야 한다.
In [10]:
# Launch the graph in a session
sess = tf.Session()
# Initializes global variables in the graph.
sess.run(tf.global_variables_initializer())
# Fit the line
for step in range(2001):
sess.run(train)
if step % 20 == 0:
print(step, sess.run(cost), sess.run(W), sess.run(b))
train - cost - hypothesis - w,b
train을 실행시킨다는 것은 그래프를 따라 들어가 w와 b에 저장할 수 있도록 하는 그래프
Placeholders¶
In [ ]:
# X and Y data
x_train = [1,2,3]
y_train = [1,2,3]
# Now we can use X and Y in place of x_data and y_data
# # placeholders for a tensor that will be always fed using feed_dict
X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)
...
# Fit the line
# Fit the line
for step in range(2001):
# cost, W, b, train을 따로 구할 필요 없이 리스트에 묶어 실행 가능
cost_val, W_val, b_val, _ = \
sess.run([cost, W, b, train],
# x_train=[1,2,3] #y_train=[1,2,3]이런식으로 줄 필요 없다. feed_dict이용
feed_dict={X: [1,2,3], Y:[1,2,3]})
if step % 20 == 0:
print(step, cost_val, W_val, b_val)
placeholer를 사용하는 가장 큰 이유는 우리가 만들어지는 모델에 대해서 X와 Y같은 값을 따로 넘겨줄수 잇다는 것이다.
Full code with placeholders¶
In [21]:
import tensorflow as tf
W = tf.Variable(tf.random_normal([1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
X = tf.placeholder(tf.float32, shape=[None])
Y = tf.placeholder(tf.float32, shape=[None]) #[None]은 1차원이고 아무 값이나 들어갈 수 있다는 의미
# Our hypothesis Xw+b
hypothesis = X * W + b
# cost/loss function
cost= tf.reduce_mean(tf.square(hypothesis - Y))
# Minimize
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train = optimizer.minimize(cost)
# Launch the graph in a session.
sess = tf.Session()
# Initializes global variables in the graph.
sess.run(tf.global_variables_initializer())
# Fit the line with new training data
for step in range(2001):
cost_val, W_val, b_val, _ = sess.run([cost, W, b, train],
feed_dict={X: [1,2,3,4,5], Y:[2.1, 3.1, 4.1, 5.1, 6.1]})
if step % 20 == 0:
print(step, cost_val, W_val, b_val)
우리가 학습한 모델이 잘 예측하는지 확인해 보자
In [23]:
print(sess.run(hypothesis, feed_dict={X:[5]}))
print(sess.run(hypothesis, feed_dict={X: [2.5]}))
print(sess.run(hypothesis, feed_dict={X: [1.5,3.5]})) #1.5 3.5 두개 동시에 구해봐
'beginner > 파이썬 딥러닝 기초' 카테고리의 다른 글
Logistic Regression (0) | 2019.05.04 |
---|---|
Loading data from file (0) | 2019.05.04 |
Multi-variable linear regression (0) | 2019.05.03 |
Linear Regression의 cost 최소화의 TensorFlow 구현 (0) | 2019.05.03 |
Tensorflow의 기본적인 operation (0) | 2019.05.02 |