8-1 초보자를 위한 텐서플로우 코딩 예제

in #kr6 years ago (edited)

텐서플로우 코딩은 일반 파이선 연산 코드와는 그 형식에 있어서 큰 차이가 있다. 즉 전반부에 Computational Graph 를 먼저 형성해 두어야 한다. 프로그래머가 코딩을 하기 전에 우선 코드의 흐름을 논리적으로 표현한 플로우 챠트를 구상할 수가 있는데 이 플로우 챠트에 해당하는 부분을 컴퓨터 내에서 Node 와 Edge를 사용하여 표현하고 Graph 라고 한다. Node에서는 선언된 변수들과 placeholder 에 대한 연산 법칙들을 정의하고 데이터들이 Node 와 Node 사이를 연결하는 Edge를 따라서 전달되게 된다. 즉 여기까지의 Graph 는 실제 연산의 흐름을 표현하는 것이지 실제 연산은 별도로 Session을 도입하면서 이루어지게 된다.

다음과 같이 아주 간단한 일차식 형태의 곱하기와 더하기로 이루어진 연산을 텐서플로우로 코딩해 보자.

noname01.png

헤더 영역에서 tensorflow를 불러들이고 클라스 명령 형태의 tf 로 두자. tf.Graph()를 사용하여 default Graph를 선언한다.
Graph 영역에서 Session에서 연산 실행을 위한 변수와 상수들을 반드시 선언 해 두어야 한다. 하지만 텐서플로우 머신 러닝 코드에서 상수들은 그냥 파이선 상수로 정의해 두고 사용하는 경우도 흔하다. 예를 들면 learning_rate = 0.1 같은 경우이다.
이 변수와 상수들을 사용해 임의 연산 함수 z를 설정한다. 함수 z는 일반 파이선 변수가 될 수 있다. 비슷한 사례로 layer, cost, loss 와 같은 파이선 변수르 ㄹ들 수 있다. 이들은 텐서플로우 뱐수나 명령들을 사용하여 연산된 함수 값을 저장하는 변수 명으로 흔히 사용되고 있다.

init = tf.global_variables_initializer()

파이선 변수 init 은 Graph 설정을 위한 전역 변수들을 초기화 하는 모듈이다.
Graph 준비가 완료되었으면 Session을 시작하도록 한다.

with tf.Session(graph=g) as sees:

파이선 문법에서 콜론 기호 : 다음에는 반드시 indentation 이 주어쟈여 한다.
Session 내에서 session.run(init)을 실행하면 실제로 초기화 된다.

Graph 설정 영역에서 정의 된 함수 z를 리스트 형 데이터를 사용하여 연산해 보자. 이스트 형 데이터에는 내부적으로 이미 인덱싱이 되어 있으므로 for loop에서 편리하게 사용할 수 있다. 순차적으로 인덱싱 되는 리스트 데이터를 일반 파이선 변수 t 로 두어 찜해 두었던 텐서플로우 placeholder x를 file_dict{∙∙∙}에서 입력한다. 이 기법은 텐서플로우에서 정해져 있는 기법이다. 특히 x 의 갯수가 머신 러닝 문제에 따라 변할 수 있으며 Session 영역에서 설정하면 되는 이점이 있다. 여기에 입력하는 데이터 묶음 t릏 batch 라 한다.

한편 동일한 Graph를 사용하면서 또 다른 입력 데이터 세트에 대한 연산을 위해서는 별도로 Session을 다시 설정해서 들어가야 하며 초기화도 다시 해야 한다.

결국 MNIST 예제를 비롯한 다양한 머신 러닝 예제도 이러한 틀을 지키면서 코딩이 되어야 할 것이다.

#tf.example_01.py

import tensorflow as tf

g = tf.Graph()
with g.as_default():
x = tf.placeholder(dtype=tf.float32,
shape=(None), name='x')
w = tf.Variable(2.0, name='weight')
b = tf.Variable(0.7, name='bias')

z = w*x + b
init = tf.global_variables_initializer()

#create a session and pass in graph g
with tf.Session(graph=g) as sess:
#initialize w and b:
sess.run(init)
#evaluate z
for t in [1.0, 0.6, -1.8]:
print('x=%4.1f --> z=%4.1f'%(
t, sess.run(z, feed_dict={x:t})))

with tf.Session(graph=g) as sess:
sess.run(init)
print(sess.run(z, feed_dict={x:[1., 2., 3.]}))

Sort:  

짱짱맨 호출에 응답하여 보팅하였습니다. 즐거운 주말 보내시기를 바랍니다.

머신러닝 공부 중에 우연히 발견하여 참고 및 도움 받고 갑니다~
자주 소통해요