Tensorflow2016. 10. 17. 23:43


Tensorflow의 상수에 대해서 살펴보겠습니다.

어떤 값을 입력해야 하는지 어떻게 출력이 되는지 한번 보겠습니다.


1. 정수


상수 값을 사용하기 위해서는 tf.constant() 함수를 사용해서 상수 x 값을 생성하면 됩니다.

정수 값인 3을 입력하여 x를 만들어보겠습니다.


그리고 총 두번 출력을 하도록 하였습니다. 한번은 x 값을 그대로 출력하고 다른 한번은 Tensorflow에서 제공하는 session을 실행하여 출력을 합니다.


import tensorflow as tf

x = tf.constant(3)
print(x)

sess = tf.Session()
result = sess.run(x)
print(result)

>Tensor("Const:0", shape=(), dtype=int32)

>3


x 라는 상수를 그대로 출력을 하면 type이 int32이고 shape가 값이 없는 real number(scalar)로 구성이 된 Tensor를 출력해줍니다. 우리가 사용할 모든 상수와 변수들은 이 Tensor라는 것으로 표현이 된다는 것을 알 수 있습니다.

Tensor는 다양한 차원의 데이터를 표현하고 연산하기 위한 기본 데이터 객체가 됩니다. 우리가 생성하는 모든 데이터는 이 Tensor로 생성이 되어 이후에 발생하는 모든 연산에서 수행이 되게 됩니다.

그리고 session에서 출력한 x 값의 결과는 3임을 알 수 있습니다.
Tensorflow는 이러한 session 안에서만 실제적인 연산이나 로직을 수행하도록 되어 있습니다. 이것에 대해서는 다음에 더 알아보도록 하겠습니다.


2. 실수

이번에는 값을 조금 변경해보겠습니다.
뒤에 점(.)을 붙여서 실수로 만들어 보았습니다.

Tensor의 type이 float32 형으로 변경이 되었고 실제 결과 값은 3.0이라는 실수 값으로 출력이 됩니다.

import tensorflow as tf

x = tf.constant(3.)
print(x)

sess = tf.Session()
result = sess.run(x)
print(result)
>Tensor("Const:0", shape=(), dtype=float32)
>3.0



3. Vector


자 이제 본격적으로 배열 혹은 벡터를 만들어 보겠습니다.

[3. , 3.] 으로 실수 3.0의 값이 두개인 벡터 x를 만들어 봅니다.


그러면 shape가 값이 2로 변합니다. 이것의 의미는 2개의 데이터를 가지고 있는 Vector를 말합니다.

이때의 x 는 2개의 데이터를 한번에 표현하고, 연산할 수 있는 상수 Vector가 됩니다.

물론 3개 이상의 데이터도 표현을 할 수 있고 이러한 형태의 데이터를 1차원 배열 혹은 Vector라고 합니다.


import tensorflow as tf

x = tf.constant([3.,3.])
print(x)

sess = tf.Session()
result = sess.run(x)
print(result)

>Tensor("Const:0", shape=(2,), dtype=float32)

>[ 3.  3.]



4. Matrix


이번에는 2 x 2 Matrix를 만들어 보겠습니다.

[] 괄호가 크게 하나가 있고 그안에 [] 괄호가 2개가 있으며 앞의 괄호안에는 실수 3.0이 2개가 있고 뒤의 괄호안에는 실수 5.0이 2개가 있습니다.


언듯 보면 참 햇갈리는 모양새로 되어 있어 출력된 결과를 보는게 나을 것 같습니다.


shape가 2,2로 행이 2개이고 열이 2개인 2x2 Matrix의 크기를 나타내주고 있습니다.

그리고 결과값으로 출력된 내용을 보면 좀더 보기가 편하게 줄 바꿈이 되어 1행에는 [3. 3.] 값이 존재하고 2행에는 [5. 5.] 값이 존재하는 것을 알 수 있습니다.


이렇게 Matrix의 형태가 되면 총 4개의 데이터를 표현하고 연산할 수 있는 x가 되며, 이런 형태를 2차원 배열 혹은 2x2 Matrix라고 말합니다.

데이터가 많아지면 많아질 수록 이 Matrix 크기가 엄청나게 커지게 되겠습니다.


import tensorflow as tf

x = tf.constant([[3.,3.],[5.,5.]])
print(x)

sess = tf.Session()
result = sess.run(x)
print(result)

>Tensor("Const:0", shape=(2, 2), dtype=float32)

>[[ 3.  3.]

  [ 5.  5.]]



행을 하나더 추가해서 3x2 Matrix를 만들어 보았습니다.


import tensorflow as tf

x = tf.constant([[3.,3.],[5.,5.],[7.,7.]])
print(x)

sess = tf.Session()
result = sess.run(x)
print(result)

>Tensor("Const:0", shape=(3, 2), dtype=float32)

>[[ 3.  3.]

   [ 5.  5.]

   [ 7.  7.]]



지금까지는 2차원 형태의 데이터였는데,

3차원의 형태의 데이터도 가능할까요? 네~ 보기 정말 민망할정도로 조잡해 보이는데 가능은 합니다.

괄호가 3개가 중첩이 되어 있습니다. (어질어질ㅜㅜ )


3차원 이상이 되면 사람이 인식하는데 조금 어려워집니다. 우리가 3차원 이상의 데이터를 보고 다룬적이 별로 없어서 어색해서 그런것인데 이런 데이터를 잘 다루기 위해서는 공간감각(?) 같은 다차원의 데이터에 조금 익숙해 질 필요가 있을 것 같습니다.


이렇게 데이터들를 다차원적으로 표현할 수 있으며 이 모든 데이터를 다루는 기본이 되는 것이 Tensor 입니다.


import tensorflow as tf

x = tf.constant( [ [[3.,3.],[5.,5.],[7.,7.]],[[2.,2.],[4.,4.],[6.,6.]] ] )
print(x)

sess = tf.Session()
result = sess.run(x)
print(result)

>Tensor("Const:0", shape=(2, 3, 2), dtype=float32)

>[[[ 3.  3.]

    [ 5.  5.]

    [ 7.  7.]]


> [[ 2.  2.]

    [ 4.  4.]

    [ 6.  6.]]]



그리고, 지금까지 사용했던 tf.constant() 를 Tensorflow에서는 op(Operation)이라고 불릅니다. 일반적으로 함수라고 생각이 되어지는 것들을 의미합니다.

이 op들은 tensor 객체를 출력으로 제공해주는 주체라고 정의가 되어 있으며, Tensorflow 문서에서 자주 사용되는 term이니 잘 이해해 놓으시면 좋겠습니다.


Tensorflow의 기본 동작은 이러한 op 들이 session 안에서만 실제적으로 실행이 되도록 되어 있습니다. session 밖에서는 정의가 되면서 graph를 생성할 뿐이며 실행과는 무관하다고 합니다.


Posted by 대소니

댓글을 달아 주세요

  1. ㅇㅇ

    텐서플로우 모듈이 그럼 넘파이나 판다스, 싸이파이 모듈을 대체하는 건가요??
    행렬 계산도 텐서플로우로 해도 아무 문제가 없겠네요??

    2017.01.11 12:01 [ ADDR : EDIT/ DEL : REPLY ]
  2. 네 텐서플로우만 써서 해도 되고 넘파이등로 생성된 데이터를 사용해도 됩니다. 실제 세션에서 실행을 할때는 tensor로 변환해서 알고리즘을 돌리면 됩니다.

    2017.01.11 14:27 신고 [ ADDR : EDIT/ DEL : REPLY ]