컴퓨터/ML

[Tensorflow #1] 기본 개념

OrehOnyah 2019. 12. 26. 15:27

이 내용은 Sung kim님의 강의를 바탕으로 만들어졌습니다.

Tensorflow에서는 일반적인 python 프로그래밍과 다르게 Tensorflow에서 지정한 자료형과 계산 방식이 있다.

import tensorflow as tf
tf.constant("Hello, Tensorflow!") # 상수
sess = tf.Session()
print(sess.run(hello))

b'Hello, Tensorflow!

그래프

  1. 노드 : `n1 = tf.constant(3.0, tf.float32)
  2. 노드 : `n2 = tf.constant(4.0)
  3. 그래프 : `n3 = tf.add(n1, n2)
  4. 실행 : `sess = tf.Session(); sess.run(node3)

constant는 그래프에서 하나의 노드로 취급되고(print(tf.constant(3.0)) 실행 시 숫자가 출력되지 않음.
tf.add()도 하나의 노드로 취급됨
sess.run해야 비로소 값 취급됨

노드 종류

  1. tf.constant : 변하지 않는 값

  2. tf.placeholder : 자료형만 정하고, 값은 sess.run할 때 정해준다.

    비교

    constant 버전

    a = tf.constant(3.0, tf.float32)
    b = tf.constant(4.0, tf.float32)
    c = a+b
    print(tf.Session().run(c))

    placeholder 버전

    a = tf.placeholder(tf.float32)
    b = tf.placeholder(tf.float32)
    c = a+b
    print(tf.Session().run(c, feed_dict={a:3, b:4}))

    같은 결과를 나타내지만, constant는 새로운 constant 노드를 생성 후 그래프를 새로 그려야 하기 때문에 더 느리다.
    placeholder는 만들어진 모델에 값만 바꾸어 넣으므로, 더 빠른 속도를 보인다.

또한, placeholder는 다음과 같이 여러 개의 값에 대해 이용할 수 있다.

sess.run(c, feed_dict={a:[1,3], b:[2,4]})

이 경우에 출력으로 [3. 7.]을 얻을 수 있다.

scalar, vector, matrix, tensor

Tensor은 숫자의 배열이 3차원 이상인 것을 지칭한다.
간단히 말하면 상수가 스칼라, 1차원 배열이 벡터, 2차원 배열이 매트릭스, 3차원 배열이 텐서이다.

Rank, Shape

Rank는 몇 차원인가를 나타낸다.
shape는 배열이 어떤 모습을 나타내고 있는지를 말한다.
ex) [[0,0,0],[0,0,0]] -> [2,3] 밖에서부터 세면 됨