tensorflow
placeholder
#
Find similar titles
- (rev. 4)
- ecjang
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분 딥러닝 텐서플로맛