1. 텐서란 무엇인가?
텐서(tensor)란, 일종의 행렬입니다.
이는 스칼라가 될 수도 있고,
다차원의 벡터도 될 수 있습니다.
텐서플로(tensorflow)는 말 그대로
텐서(tensor)의 흐름(flow)를
설계하는 것이라고 볼 수 있습니다.
텐서는 다양한 방법을 통해
정의될 수 있습니다.
오늘은 가장 기본적인 텐서들에 대해서
다루어 보겠습니다.
def sRun(input):
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
rst = input.eval()
print(rst)
return(rst)
들어가기에 앞서,
텐서의 내용물을 확인해볼 수 있는
간단한 함수를 하나 만들겠습니다.
이는 지난 시간의
세션에 관련된 포스팅을 보셨다면
이해하실 수 있습니다.
2019/07/06 - [딥러닝 공부/Tensorflow] - [tensorflow] Session에 관하여
2. Constant 와 Variable
constant는 상수를 뜻합니다.
수학에서 상수는 변수와 구분되는 개념으로,
변하지 않고 고정된 값을 의미합니다.
텐서플로에서 tf.constant() 함수를 통해
상수 텐서를 만들 수 있습니다.
Variable은 변수를 뜻합니다.
변수는 수학에서 투입값에 따라
변하는 숫자를 의미하지만,
텐서플로의 Variable은 Constant와
큰 차이가 없습니다.
# constant
c1 = tf.constant(1)
c2 = tf.constant([1])
c3 = tf.constant([[1, 2], [3, 4]])
# variable
v1 = tf.Variable(1)
v2 = tf.Variable([1])
v3 = tf.Variable([[-1, 0], [10, 5]])
간단하게 constant와 Variable을
만들어 보았습니다.
대괄호 [ ]를 쓴 것과
안 쓴 것의 차이를 잘 봐주세요.
대괄호를 써주어야 텐서의 shape가
형성이 됩니다.
아래 출력문을 통해 확인해보겠습니다.
print(c1) # Tensor("Const_26:0", shape=(), dtype=int32)
print(c2) # Tensor("Const_27:0", shape=(1,), dtype=int32)
print(c3) # Tensor("Const_28:0", shape=(2, 2), dtype=int32)
sRun(c1) # 1
sRun(c2) # [1]
sRun(c3) # [[1 2] [3 4]]
print(v1) # <tf.Variable 'Variable:0' shape=() dtype=int32_ref>
print(v2) # <tf.Variable 'Variable_1:0' shape=(1,) dtype=int32_ref>
print(v3) # <tf.Variable 'Variable_2:0' shape=(2, 2) dtype=int32_ref>
sRun(v1) # 1
sRun(v2) # [1]
sRun(v3) # [[-1 0] [10 5]]
현재로서 constant와 Variable은
차이가 거의 없다고 보셔도 될 듯 합니다.
나중에 텐서 그래프에서
런타임, 리소스 등에서 차이가 발생할
수도 있지만 그것은 논외로 하겠습니다.
여기서 포인트는
어떻게 constant와 Variable을 만드는지,
또 shape를 확인하는 법에
맞춰주시면 됩니다.
그럼 이제부터는 get_variable 함수에 대해
알아보도록 하겠습니다.
3. get_variable
with tf.variable_scope("a", reuse=tf.AUTO_REUSE):
sRun(tf.get_variable("v", [1]))
sRun(tf.get_variable("v2", [2, 2]))
output:
[0.7743064]
[[ 0.7424123 1.0585083]
[-0.9365851 0.4901656]]
아까 봤던 Variable과 get_variable은
비슷해 보이지만 엄연히 다른 녀석입니다.
get_variable은 shape에 맞춰서
랜덤값을 생성해 줍니다.
이 함수를 동작하기 위해서
variable_scope(범위)의 이름과
get_variable의 이름을
지정해주어야 합니다.
(조금 까다롭습니다.)
또한 계속 값이 랜덤으로 바뀌는 것을
확인하기 위해서
reuse 옵션을 AUTO_REUSE로
맞춰주시는 것도 잊지 마셔야 겠습니다.
굳이 Variable과의 차이점이라고 한다면,
Variable 함수는 픽스된 고정값을
생성해 주는 반면에,
get_variable은 매번 새로운 랜덤값을
생성해주고 범위 이름과 변수 이름이
지정되어야 한다는 점입니다.
-----------------------------------------------
오늘 포스팅은 여기서 마치겠습니다.
감사합니다.
'딥러닝 공부 > Tensorflow' 카테고리의 다른 글
[tensorflow 2.0] 본격 where 함수 해부! broadcasting 기능까지! (1) | 2019.07.19 |
---|---|
[tensorflow] 텐서플로를 이용한 논리연산 (2) | 2019.07.13 |
[tensorflow] 텐서플로를 이용한 사칙연산 (0) | 2019.07.11 |
[tensorflow] Session에 관하여 (0) | 2019.07.06 |