StoryCode

Constant, Variable, Placeholder 의 차이점.

인공지능,AI,학습,ML,Tensorflow, Cafee2,MLFlow/Tensorflow
반응형

Constant)

이전 예제에서 Constant 로 그래프 세션을 그리고 디바이스로 실행하는 샘플을 보았다.

우선, Constant 는 그 자체로서 그래프 세션이 된다.

( 잘 사용되지는 않음. )



Variable)

뉴럴 네트워크에서 weight 정의시 담아두는 공간으로 주로 사용.

Consant 와 다르게 아래와 같이 Constant 와 동일한 방식으로 Variable 을 실행하면 오류가 나타난다.

var1 = tf.Variable([5])

var2 = tf.Variable([3])

var3 = tf.Variable([2])

var4 = var1 + var2 + var3

sess = tf.Session()

result = sess.run(var4)

print result


오류가 나타나는 이유는 Variable 은 초기화가 필요하기 때문이다.

초기화 함수는 tf.initialize_all_variables() 이다.

즉,

var1 = tf.Variable([5])

var2 = tf.Variable([3])

var3 = tf.Variable([2])

var4 = var1 + var2 + var3

sess = tf.Session()

init = tf.initialize_all_variables()

sess.run( init )

result = sess.run(var4)

print result


여기서

init = tf.initialize_all_variables()

sess.run( init )

는 그래프를 생성하지만 값은 배정되지 않은 상태( 마치 데이타베이스 옵티마이저의 플랜만 떠진 상태) 라고 보면 된다.


이후

result = sess.run(var4)

에서 빈 그래프에 값을 배정해서 디바이스에서 실행하게 된다.


참고로, initialize_all_variables global_variables_initializer 로 변경



Placeholder)

다른 자료형을 매핑해서 텐서로 변경주는 역할.

placeholder 는 그래프를 생성시키지 않는다.

그래서 feeding 이라는 단계가 필요하다.


아래에서


value1 = 5 // 데이타를 만들고

value2 = 3

value3 = 2


ph1 = tf.placeholder( dtype=tf.float32 ) // shape은 선택사항

ph2 = tf.placeholder( dtype=tf.float32 )

ph3 = tf.placeholder( dtype=tf.float32 )

result_value = ph1 * ph2 + ph3 // value 는 없이, 껍데기 placeholder 로 그래프 생성


feed_dict = {ph1: value1, ph2: value2, ph3: value3} // feeding 단계, result_value 는 feed_dict 이전/ 이후 어디에 써도 상관없다. Session 전에만 있으면 됨.


sess = tf.Session()

result = sess.run(result_value, feed_dict=feed_dict)

print (result)




이미지로 트레이닝 샘플)

image = [[1, 2, 3, 4, 5],

             [5, 4, 3, 2, 1],

             [10, 20, 30, 40, 50] // list 일수도 있고, num file array 일수도 있고...

label = [10, 20, 30, 40, 50]


ph_image = tf.placeholder(dtype=tf.float32)

ph_label = tf.placeholder(dtype=tf.float32)


feed_dict = {ph_image: image, ph_label: label}


result_tensor = ph_image + ph_label


이후 image 에 데이타 불러오는 방법 (opencv, pandas.DataFrame... ) 은 쉽다.




기타)

- True/ Flase, And/Or

tf.Variable([True, True, False, False, True], dtype=bool)

tf.constant([10, 20, 30, 40, 50], dtype=bool)


- tensorflow 의 특징 : 디바이스에 올려서 도는 중에 데이터 매트릭스 모델오류를 발견하는 게 아니라, 돌기전에 데이타 매트릭스 모델을 먼저 체크하고 디바이스에 올려서, 디바이스 올린이후에 오류걱정은 할 필요가 없어진다.

반응형