abt Machine Learning/Tensorflow & Deeplearning

Tensorflow 개념 (텐서, 그래프, 세션, 연산자, 변수, 플레이스 홀더 )

cloudin 2023. 8. 22. 15:54

 

 

기초

  • Tensor는 TensorFlow의 기본 자료형으로 벡터와 유사하나 일반화된 개념
  • 다차원 Array의 일반화 혹은 아무 차원이나 가질 수 있는 값들의 집합
  • 텐서는 Rank, Shape, Type 3가지 구성 요소로 이루어져 있음

 

 

 

Rank와 Shape

Rank Shape Dimension number Example
0 [] 0-D A  0-D tesnor. A scalar
1 [D0] 1-D A 1-D tensor with shape [5]
3 [D0, D1] 2-D A 2-D tensor with shape [3, 4]
3 [D0, D1, D2] 3-D A 3-D tensor with shape [1, 4, 3]
n [D0, D1, ... Dn-1] n-D A tensor with shape [D0, D1, ... Dn-1]

 

 

데이터 타입 이름 파이썬 데이터 타입 설명
DT_FLOAT tf.float32 32비트 부동소수점 숫자
DT_DOUBLE tf.float64 64비트 부동소숫점 숫자
DT_INT8 tf.int8 8비트 정수
DT_INT16 tf.int16 16비트 정수
DT_INT32 tf.int32 32비트 정수
DT_INT64 tf.int64 64비트 정수
DT_UINT8 tf.uint8 8비트 부호 없는 정수
DT_UINT16 tf.uint16 16비트 부호 없는 정수
DT_STRING tf.string 가변 길이 바이트 배열이며 텐서의 각 요소는 바이트의 배열
DT_BOOL tf.bool 참거짓값
DT_COMPLEX64 tf.complex64 2개의 32비트 부동소숫점 숫자로 구성된 복소수로 각각 실수부와 허수부로 이루어짐
DT_COMPLEX128 tf.complex128 2개의 64비트 부동소숫점 숫자로 구성된 복소수로 각각 실수부와 허수부로 이루어짐
DT_QINT8 tf.qint8 양자화 연산에 사용되는 8비트 정수
DT_QINT32 tf.qint32 양자화 연산에 사용되는 32비트 정수
DT_QUINT8 tf.quint8 양자화 연산에 사용되는 8빝 부호 없는 정

 

 

 

Graph(그래프)

  • 그래프 구조는 노드(Node)와 엣지(Edge)로 구성된 구조
  • Data Flow Graph Computation 이라고 불리며 노드에 지정된 연산을 시행하는 구조로 이루어져 있다
  • 여기서 엣지는 Tensor를 의미하며 노드는 곱하고 나누는 등 연산을 의미

 

 

 

Session(세션)

  • Tensorflow의 오퍼레이션, 즉 노드를 실행하기 위한 클래스임
  • 객체를 실행하거나 그 값을 구하기 위한 주요 매커니즘
  • 연산을 시행하기 위한 단계

- 버전 2.x.x에는 없음

 

 

 

연산자

텐서플로우 연산 축약형 연산자 설명
tf.add() a + b 대응되는 원소끼리 a와 b를 더한다.
tf.multiply() a * b 대응되는 원소끼리 a와 b를 곱한다
tf.substract() a - b 대응되는 원소끼리 a에서 b를 뺀다
tf.divide() a / b 파이썬 3, x의 방식으로 a를 b로 나눈다
tf.pow() a ** b 대응되는 원소끼리 a의 b의 제곱을 계산한다.
tf.mod() a % b 대응되는 원소끼리 a를 b로 나눈 나머지를 구한다.
tf.logical_and() a & b 대응되는 원소끼리 a와 b의 논리곱을 구한다. dtype은 반드시 tf.bool이어야 한다.
tf.greater() a > b 대응되는 원소끼리 a > b의 참거짓값을 반환한다.

 

 

 

변수

  • 모델 학습 시 매개 변수(parameter)의 업데이트와 유지를 위해 사용
  • 알고리즘 학습 시 반복에 따라 값이 변하는 것을 표현하는 데이터 형
  • 세션이 실행될 때, 변수는 고정된 상태를 유지
  • 변수는 세션에서 실행 전 초기화 단계가 필요함

 

 

플레이스 홀더

  • 먼저 값을 만들고 나중에 값을 지정해 주는 자료형
  • 변수의 타입을 미리 설정하고 나중에 필요한 변수를 받아 실행하는 것 (그래프를 미리 만들어 놓고 지연실행하는 TensorFlow의 방식을 활용하기 위한 변수)
  • 신경망을 구현할 때 가장 어울리는 변수 설정 방법
  • 플레이스 홀더를 정의하면 반드시 입력값을 넣어줘야 하며, 세션을 실행시킬 때, feed_dict{} 인자를 할당하여 입력값을 줄 수 있다.