반응형



+자료형

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() 됨.




+ Recent posts