Skip to content

tensorflow placeholder #
Find similar titles

Structured data

Category
Programming

placeholder #

개요 #

Tensorflow로 프로그래밍할 때 알아야 할 가장 중요한 개념 중 하나는 placeholder이다. placeholder는 그래프에 사용할 입력값을 나중에 받기 위해 비워두는 매개변수이다. 쉽게 말하자면, 데이터가 담겨있지 않은 빈 그릇이라고 생각하면 된다. placeholder Tensor는 다음과 같이 정의할 수 있다.

X = tf.placeholder(tf.float32, [None, 2])
print(X)

위 코드를 실행하면 (?, 2) 행렬의 float32 자료형을 가진 Tensor가 생성된 것을 확인할 수 있다.

Tensor("Placeholder:0", shape=(?, 2), dtype=float32)

placeholder X에 넣을 데이터를 다음과 같이 정의하고 사용해보자.

data = [[1, 2], [3, 4]]

변수 #

그래프를 최적화하는 용도로 Tensorflow가 학습한 결과를 갱신하기 위해 사용하는 변수이다. 변수는 다음과 같이 정의할 수 있다.

W = tf.Variable(tf.random_normal([2, 2]))
b = tf.Variable(tf.random_normal([2, 1]))

random_normal 함수는 정규분포의 랜덤한 값으로 초기화한다. W, b 변수는 각각 (2, 2), (2, 1) 행렬로 초기화된 Tensor이다.

matmul 함수는 행렬 곱을 연산해주는 함수이다. 다음은 행렬 곱의 정의이다. - 행렬 곱 A*B에 대하여, 행렬 A의 열 수와 행렬 B의 행 수는 같아야 한다. - 행렬 곱 A*B를 계산한 행렬 AB의 크기는 A의 행 개수와 B의 열 개수가 된다[1].

matmul 함수를 사용한 행렬 곱은 다음 식과 같이 사용할 수 있다.

exp = tf.matmul(X, W) + b

global_variables_initializer 함수는 앞에서 정의한 변수들을 초기화해주는 함수이다. feed_dict 매개변수는 그래프를 실행할 때 사용할 입력값을 지정해준다. X를 [None, 2] 행렬과 같이 placeholder로 만들어두었으므로 실제 데이터를 넣어주어야 한다. 미리 정의해 둔 data를 X의 값으로 넣어주자.

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())

print("data : ", data)
print("W : ", sess.run(W))
print("b : ", sess.run(b))
print("exp : ", sess.run(exp, feed_dict={X: data}))

위 코드를 실행한 결과는 다음과 같다.

data :  [[1, 2], [3, 4]]
W :  [[ 1.2559581   0.32699424]
 [-0.49867725 -0.09485897]]
b :  [[0.20110254]
 [1.2785746 ]]
exp :  [[0.45970613 0.33837885]
 [3.0517397  1.8801215 ]]

X와 W는 [2, 2], b는 [2, 1] 결괏값은 [2, 2] 형태로 나왔다. 데이터는 랜덤한 값으로 초기화했기 때문에 실행할 때마다 다르게 나올 것이다.

참고문헌 #

[1] 골빈해커의 3분 딥러닝 텐서플로맛

0.0.1_20210630_7_v33