본문 바로가기
DeepLearning Framework & Coding/Tensorflow 1.X

[코드로 이해하는 딥러닝 3] - Tensorflow placeholder변수

by 노마드공학자 2020. 12. 16.

[코드로 이해하는 딥러닝 0] - 글연재에 앞서 https://limitsinx.tistory.com/27

[코드로 이해하는 딥러닝 1] - Tensorflow 시작 https://limitsinx.tistory.com/28 

[코드로 이해하는 딥러닝 2] - Tensorflow 변수선언 https://limitsinx.tistory.com/29

 

※이 전글에서 정리한 코드/문법은 재설명하지 않으므로, 참고부탁드립니다

 

[코드 전문]

 

이번에는 placeholder라는 변수에 대해 정리해보겠습니다.

이 전글인, [코이딥2-tensorflow 변수선언] 글에서는 

node 1= tf.constant(3.0) 이런식으로 변수를 정리했었습니다.

그런데 이건 변수를 선언함과 동시에 초기값을 3으로 정해주고 시작하는거죠!

 

하지만 이렇게 코드를 진행하고 싶다면 어떨까요?

 

int a;

a="사용자가 입력하는 변수"

 

즉, 변수를 선언하긴 했지만, 이때 초기값은 선정하지 않고

나중에 얻어진 어떠한 값으로 채워넣겠다~~라고 정리만 해두는거죠

 

이런경우에 텐서플로우는 placeholder라는 함수를 사용합니다.

 

[코드 분석-1]

① a=tf.placeholder(tf.float32)

: a라는 변수에 placeholder를 설정하고 여기서 입력받는 숫자는 실수(float)데이터로 저장하겠다

 

② adder_node = a + b

: 나중에 a와 b라는 값이 정해지게 되면, 두개의 값을 합친것을 adder_node라는 변수에 저장하겠다

 

 

[코드 분석-2]

 

★sess.run(adder_node,feed_dict = a:3, b:4.5})

: feed_dict라는 함수는, adder_node에 들어가야하는 인자 a와 b에 어떤값을 넣어주는 함수입니다.

즉, a와 b는 placeholder를 통해 아무런 초기값도 없는 상태로 저장되었죠

여기에 feed_dict를 이용하여 a에는 3, b에는 4.5라고 값을 저장해주게 되는것입니다.

그러면 첫번째줄의 결과값은 7.5가 나오게 될것입니다.

 

★sess.run(adder_node,feed_dict = a: [1,3], b: [2,4]})

: feed_dict로 배열을 선언한 경우입니다.

이것은 아무것도 아닌것처럼 보이지만, 파이썬의 큰 장점인데요

C언어에서는 변수선언시 초기에 실수인지,정수인지,배열(array)형태인지 정확하게 지정해주어야 해당 값을 받을 수 있었습니다.

하지만, 텐서플로우 feed_dict는 그런것과 관계없이 a와 b는 어떠한 값도 될 수 있습니다.

예상되는 결과값은 [3,7]이 되겠네요

 

[결과값]

 

Summary

 

이번글에서는 아주 중요한 두가지를 다루었습니다.

① placeholder

② feed_dict

이 두가지는, 머신러닝을 넘어 딥러닝, CNN, RNN까지... 텐서플로우를 사용한다면 평생 보게될 코드입니다.

꼭! 정확하게 숙지해주시고 넘어가면 좋을것 같습니다.

 

[코드 공유]

import tensorflow.compat.v1 as tf

import numpy as np

tf.disable_v2_behavior()

 

a=tf.placeholder(tf.float32)

b=tf.placeholder(tf.float32)

adder_node = a + b

 

sess = tf.Session()

print(sess.run(adder_node,feed_dict = {a:3,b:4.5}))

print((sess.run(adder_node,feed_dict = {a: [1,3], b: [2,4]})))

댓글