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{} 인자를 할당하여 입력값을 줄 수 있다.