[텐서플로우 정리] 07. 세션과 구구단

텐서플로우를 구동해서 실질적인 결과를 보여준다.
여기까지 익히면 머신러닝을 학습하기 전의 준비 과정으로 충분하다.

1부터 3까지 반복하는 코드와 구구단을 출력하는 코드를 만들어 봤다.
각각 두 가지, 세 가지 버전으로 만들었는데,
많은 차이가 나진 않지만, 나름대로 모든 방법이 의미를 갖기 때문에 차이점을 주목해서 봤으면 한다.
가장 중요한 코드는 마지막에 있는 placeholder를 사용하는 방법이다.

# 예제1 : 1부터 3까지 증가
# 예제2 : 구구단

import tensorflow as tf

def one2three_1():
state = tf.Variable(1)
one = tf.constant(1)

with tf.Session() as sess:
sess.run(tf.initialize_all_variables())

for _ in range(3):
print(sess.run(state))
state = tf.add(state, one)

def one2three_2():
state = tf.Variable(0)
one = tf.constant(1)
value = tf.add(state, one)
update = tf.assign(state, value)

with tf.Session() as sess:
sess.run(tf.initialize_all_variables())

for _ in range(3):
print(sess.run(update))

def table99_1(which):
level = tf.constant(which)
state = tf.Variable(1)

with tf.Session() as sess:
sess.run(tf.initialize_all_variables())

for i in range(1, 10):
left, rite = sess.run(level), sess.run(state)
state = tf.add(state, 1)

print('{} x {} = {:2}'.format(left, rite, left*rite))

def table99_2(which):
# update를 처리하면 연계된 모든 Tensor 객체도 함께 처리됨
level = tf.constant(which)
state = tf.Variable(0)
add = tf.add(state, 1)
value = tf.assign(state, add)
update = tf.mul(level, value)

with tf.Session() as sess:
sess.run(tf.initialize_all_variables())

for _ in range(9):
# left, rite, result = sess.run([level, state, update])

result = sess.run(update)
left, rite = level.eval(), state.eval()

print('{} x {} = {:2}'.format(left, rite, result))

def table99_3(which):
left = tf.placeholder(tf.int32)
rite = tf.placeholder(tf.int32)
update = tf.mul(left, rite)

with tf.Session() as sess:
sess.run(tf.initialize_all_variables())

for i in range(1, 10):
result = sess.run(update, feed_dict={left: which, rite: i})
print('{} x {} = {:2}'.format(which, i, result))

one2three_1()
one2three_2()

table99_1(7)
table99_2(7)
table99_3(7)
[출력 결과 1]
1
2
3

[출력 결과 2]
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63