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에 관하여

 

[tensorflow] Session에 관하여

1. 왜 텐서플로 세션을 이해해야 하는가? 텐서플로 세션(Session)은 일종의 실행창입니다. 딥러닝을 공부하다 보면 텐서의 내용물과 연산결과를 확인하고 싶을 때가 많습니다. 그렇기 때문에 텐서플로 세션에 대..

chan-lab.tistory.com

 

 

 

 

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은 매번 새로운 랜덤값을

생성해주고 범위 이름과 변수 이름이

지정되어야 한다는 점입니다.

 

 

 

 

 

 

-----------------------------------------------

오늘 포스팅은 여기서 마치겠습니다.

감사합니다.

 

 

 

블로그 이미지

pychan

딥러닝에 관련된 시행착오, 사소하지만 중요한 것들, 가능한 모든 여정을 담았습니다.

댓글을 달아 주세요