텐서플로우의 개념과 기본 용어 정리

tensor, variable, constant

Posted by Yan on July 20, 2021

개념

텐서플로우 메커니즘

  • 텐서플로우는 nodeedge로 구성된 그래프로 표현된다
  • 그래프의 각 node들은 operation을 의미한다

기본 용어

기본 자료구조 Tensor

  • 그래프에서 edge를 따라 흐르는 값을 의미한다
  • 다차원 배열과 리스트로 구성된다
  • rank, shape, type 세 가지의 매개변수를 가진다
    Tensor = rank(차원) + shape(행, 열) + type(타입)
  • 과학과 공학 등 다양한 분야에서 쓰던 개념으로, 수학과 물리학에서는 선형 관계를 나타내는 기하적 대상을 뜻한다 → 주로 연속체역학(고체역학, 유체역학)에서 텐서를 사용한다
  • 두 개 이상의 독립적인 방향을 동시에 표현할 때 사용한다 → 벡터는 하나의 방향을 표시하지만, 동시에 두 개 이상의 데이터를 표현하는 방식이다
  • 모든 데이터는 텐서를 통해 표현된다
  • 그래프 내의 오퍼레이션 간에는 텐서만 전달된다
  • 텐서의 자료형 랭크 Rank

    • 텐서의 차원을 표현하는 방식이다 → Tensor rank(order, degree, n-dimensions)
    1
    2
    
    t = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    //텐서 t는 랭크가 2 텐서 행렬이다
    
    • 크기만을 갖는 scalar : rank 0
    • 크기와 방향을 갖는 vector : rank 1
    • 행렬 Matrix : rank 2
    • 3차원 숫자 큐브 3-Tensor : rank 3
    • n-Tensor : rank n

Shape

  • 텐서는 셰이프라는 각 차원의 크기 값을 튜플의 형태로 표현할 수 있다

추상적인 연산 Operation

  • 이름을 가지는 추상적인 연산을 의미한다.
  • Graph-construction time에 operaion이 생성되어 노드라 불린다.
  • 딥러닝에 상용되는 대표적인 operation 및 class로는 constant, Variable, Placeholder, Matrix operation, neural-net building block등이 있다.
  • 그래프 상의 노드는 오퍼레이션으로 불린다
  • 하나 이상의 텐서를 받을 수 있다
  • 계산을 수행한 결과를 하나 이상의 텐서로 반환할 수 있다

데이터 타입

변수 Variables

  • 그래프의 실행 시 파라미터를 저장하고 갱신한다
  • 메모리 상에서 텐서를 저장하는 버퍼 역할을 한다
  • 변수를 가지기 때문에 변경이 가능하여 딥러닝의 WeightBias 변수를 선언할 때 사용된다
  • Variable을 사용하기 전에 반드시 초기화 과정을 거쳐야 한다
    선언된 모든 Variables를 초기화하는 코드
    1
    2
    3
    
    init = tf.global_variables_initializer()
    with tf.Session() as sess:
      tf.run(init)
    
  • 다양한 형태로 Variable 선언이 가능하다

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    # create variable a with scalar value
    a = tf.Variable(2, name="scalar")
    
    # create variable b as a vector
    b = tf.Variable([2, 3], name="bios_vector")
    
    # create variable c as a 2x2 matrix
    c = tf.Variable([[0,1], [2,3]], name="2x2_matrix")
    
    # create variable W as 784 * 10 tensor, filled with zeros
    W = tf.Variable(tf.zeros([784, 10]))
    

상수형 Constant

  • 상수를 저장하는 데이터형
  • 상수형 선언: tf.constant(value, dtype=None, shape=None, name='Const', verity_shape=False)
  • 반환값: 상수형 텐서
    • value : 상수 값
    • dtype : 상수의 데이터형(tf.float32와 같이 실수, 정수 등의 데이터 타입 정의)
    • shape : 행렬의 차원 정의(shape=[3,3]인 경우 3x3 행렬 저장)
    • name : 상수의 이름 정의

Variablesconstant와의 차이

  • constant는 상수이므로 변수를 할당할 수 없다. 변경이 불가능하다.
  • constant : operation, Variable: class
  • Variable은 class이기 때문에 많은 operation을 지원한다.

세션 Session

  • 오퍼레이션의 실행 환경을 캡슐화한 것이다
  • 그래프를 실행하기 위해서는 세션 객체가 필요하다

placeholder & feed_dict

  • 텐서플로우는 그래프 어셈블이 이루어진 후에 연산이 수행된다
  • 그래프 어셈블 수행시 입력 값을 미리 정의해주면 Session을 수행할 때 데이터를 생성한다.
  • placeholder의 매개변수
  • Dtype : placeholder의 데이터 타입을 지정하는 필수 매개 변수
  • Shape : placeholder 값으로 상용할 텐서의 shape를 의미함
  • Name : 해당 placeholder에 이름을 지정함
1
tf.placeholder(dtype, shape=None, name=None)
  • 세션을 수행할 때 feed_dict를 이용하여 placeholder값에 데이터를 입력한다.
    1
    
    sess.run(optimizer, feed_dict={X: x, Y: y})