반응형
+자료형
1. PlaceHolder
텐서를 저장. (핸들값). 바로 계산되지는 않는다.
input data 저장시. feed dictionary=맵핑시켜주는 역할. (입력값들로 그래프 실행시 입력할 수 있다.)
tf.placeholder(dtype, shape=None, name=None)
데이터 타입(dtype); tf.float32, tf....
p1 = tf.placeholder(tf.float32, shape=(3,3))
feeding을 해주어야 한다.
# place holder test
ph1 = tf.placeholder(tf.float32)
ph2 = tf.placeholder(tf.float32)
ph3 = tf.placeholder(tf.float32)
value1=3
value2=4
value3=5
feed_dict = {ph1:value1, ph2:value2, ph3:value3}
ph4 = ph1+ph2*ph3
result=s1.run(ph4, feed_dict)
#or result = s1.run(ph4, {ph1:value1, ph2:value2, ph3:[2.3]})
print(result)
2. Variable (대문자V 주의!)
weight를 저장시 사용. (그래프 계산시에 내부에서 변경되는 값들. 초기화가 필요.)
v1 = tf.Variable([1,2,3,4], dtype=tf.float32)
v2 = tf.Variable([1,2,3,4], dtype=tf.float32)
v3=v1*v2
print(v3) ; 역시 출력되지 않는다.
sess.run(v3) ; 에러 발생!
원인은 variable은 반드시 초기화가 필요하다. (weight 초기화 같이)
sess.run 전에 반드시 초기화를 돌려주어야한다. (예외, 저장된 vars restore의 경우는 안해도 됨.)
init = tf.global_variables_initializer()
sess.run(init)
또는
sess.run( tf.global_variables_initializer())
이후부터 sess.run(v3)하면 계산이 된다.
초기화시킨 variables
weights = tf.Variable( tf.random_normal([784,200], stddev=0.35), name="weights")
또는
weights = tf.Variable( tf.truncated_normal( [None, 200] ) )
biases = tf.Variable(tf.zeros([200]), name="biases")
-변수의 값 변경은 assign()으로 한다.
gradient = tf.reduce_mean( (W*X-Y)*X)
descent = W-0.1*gradient
update = W.assign(descent)
sess.run(update)
3. constant
tf.zeros(shape, dtype=tf.float32, name=None)
tf.zeros_like(tensor, dtype=None, name=None, optimizer=True)
tf.ones(...)
tf.constant(value, dtype=None, shape=None, ..)
c1 = tf.zeros([3,4], tf.int32)
위 값들을 직접 print하면 객체 정보만 나오고 실제 값을 알 수 없음.
세션을 만들고 실행해 줘야 함.
4. Session 세션.
연산 그래프 묶음을 의미.
세션.run() . 세션단위로 실행. (그래프 실행)
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print( sess.run(hello))
세션에 입력되는 텐서는 그래프 말단 노드로 보면 된다. 앞에 있는 것을 따라서 다 실행됨.
run시에 텐서 맵핑 테이블 추가하여 placeholder와 값을 맵핑시킨다.
run의 결과로 받으면 데이터를 로딩 및 출력이 가능하다. Weight, bias 정보를 얻을 수 있다.
result = sess.run(hello)
w = sess.run(w)
b = sess.run(b)
print(result)
tensor_map={x:input_x, y_:output_y}
_,tmp_cost,acc = sess.run( [train, cost, accuracy], tensor_map)
출력이 필요없는 것은 _로 받으면 된다.
다른 출력 방법??? eval() 이용
print ("Accuracy:", accuracy.eval( session=sess, feed_dict={x:inputx, y:outputy}) )
단, sess = InteractiveSession() 으로 디폴트 세션을 열어주어야 한다.
마지막에 세션 close를 위해서 with as 구문 사용
with tf.Session() as sess:
sess.run(train)
자동으로 위 블록탈출시 sess.close() 됨.
'AI(DeepLearning)' 카테고리의 다른 글
tensorflow 강좌4. 학습데이터 저장/복구 (0) | 2018.07.18 |
---|---|
tensorflow 강좌3. 데이터처리 (0) | 2018.07.18 |
[tf] tensorflow 강좌1 로딩테스트 (0) | 2018.07.16 |
[tf] 더 복잡한 함수를 학습해보자 (0) | 2017.06.01 |
[tf] unknown math polynomial function modeling (0) | 2017.06.01 |