Tensorflow 기초
Tensorflow 그래프 실행
-- 예제 1--
# 텐서플로 import
import tensorflow as tf
# Tensor라는 자료형으로 저장
# Tensor는 랭크(Rank)와 셰이프(Shape)로 구성
# 랭크는 차원의 수를 나타냄
# 0이면 스칼라, 1이면 벡터, 2이면 행렬, 3이상은 n차원 텐서
hello = tf.constant('hello, tensor')
print(hello)
# 텐서를 이용하여 다양한 연산이 가능
a = tf.constant(10)
b = tf.constant(32)
c = tf.add(a,b)
print(c)
# 하지만 출력을 하기 위해서는 그래프를 실행 해야함
# 그래프란 텐서들의 연산 모음이라 할수 있음
# 그래프 실행은 Session 안에서 이루어 져야 함
sess = tf.Session()
print(sess.run(hello))
print(sess.run([a,b,c]))
sess.close()
플레이스홀더와 변수
-- 예제 2--import tensorflow as tf
# Placeholder 는 그래프에 사용할 입력값을 나중에 받기 위해 사용하는 매개변수
# 아래는 [?, 3] 같은 모양의 행렬이 만들어진다.
X = tf.placeholder(tf.float32, [None,3])
print(X)
# X 에 넣을 데이터로 [?,3]의 모양이 될수 있게 자료를 입력
x_data = [[1,2,3],[4,5,6]]
# tf.random_normal() 함수는 정규분포의 무작위 값을 추출 해줌
W = tf.Variable(tf.random_normal([3,2]))
b = tf.Variable(tf.random_normal([2,1]))
# tf.matmul() 함수는 두 행렬의 곱셈을 해줌
expr = tf.matmul(X,W) + b
sess = tf.Session()
# tf.global_variables_initializer() 함수는 정의한 변수들을 초기화
sess.run(tf.global_variables_initializer())
print("===== x_data ======")
print(x_data)
print("===== W ======")
print(sess.run(W))
print("===== b ======")
print(sess.run(b))
print("===== expr ======")
# feed_dict={} 은 Placeholder 인 X의 매개변수를 넣어주기 위해 사용
print(sess.run(expr, feed_dict={X: x_data}))
sess.close()
선형회귀 모델 구현하기
-- 예제 3--# 텐서플로 import import tensorflow as tf
x_data = [1,2,3]
y_data = [1,2,3]
# tf.random_uniform([1],-1.0,1.0) ==> -1.0 에서 1.0 사이의 균등분포중 무작위값
W = tf.Variable(tf.random_uniform([1],-1.0,1.0))
b = tf.Variable(tf.random_uniform([1],-1.0,1.0))
# Placeholder 는 그래프에 사용할 입력값을 나중에 받기 위해 사용하는 매개변수
# float32 값의 Placeholder 정의 이름을 X,Y로 부여
X = tf.placeholder(tf.float32, name="X")
Y = tf.placeholder(tf.float32, name="Y")
# 선형 관계에 대한 수식
hypothesis = W * X + b
# SSE와 비슷한 손실값을 구함
cost = tf.reduce_mean(tf.square(hypothesis-Y))
# 경사하강법을 이용하여 손실값을 최소화 하는 최적의 함수를 생성
# 학습률을 0.1로 정의 학습률이 크면 속도가 빠르고 너무 낮으면 속도가 느림
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1)
train_op = optimizer.minimize(cost)
# Session을 생성하고 끝나면 자동으로 Session종료
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for step in range(100):
# 1회차부터 100회차까지 위에 정의한 경사하강법을 이용하여
# 손신값을 넣어 최적의 선형 함수(hypothesis)를 구함
_, cost_val = sess.run([train_op,cost],feed_dict={X: x_data,
Y: y_data})
print(step, cost_val, sess.run(W), sess.run(b))
#학습이 된 선형함수(hypothesis)에 예측하고 싶은 X값을 넣어 Y값 확인
print("\n======Test======")
print("X: 5, Y:",sess.run(hypothesis, feed_dict={X: 5}))
print("X: 2.5, Y:",sess.run(hypothesis, feed_dict={X: 2.5}))
댓글
댓글 쓰기