본문 바로가기

카테고리 없음

텐서플로우(TensorFlow) 텐서 기본 개념 - Tensor란 무엇인가? (Rank, Shapes, Types)

출처 : http://it.plusblog.co.kr/221237818389


텐서플로우는 데이터 플로우 그래프를 쉽게 만들고 실행할 수 있도록 도와주는 라이브러리다. 텐서플로우 라이브러리를 이용하여 파이썬으로 머신러닝 프로그래밍을 할 때에는 일반적으로 3단계의 수행 과정을 거치게 된다.

(출처 : www.mathwarehouse.com)

1. 데이터 플로우 그래프를 빌드(Build)하는 단계
2. 데이터를 입력하고 그래프를 실행(run)하는 단계
3. 그래프 내부 변수들을 업데이트(update)하고 출력값을 리턴하는 단계

일반적으로 2번과 3번을 반복적으로 수행하여 내부 변수들의 값을 갱신해나가게 된다. 이런 과정이 학습이라고 보면 된다.

텐서(Tensor)란 무엇인가?

텐서플로우(TensorFlow)라고 하는 이름은 모델링한 데이터 플로우 그래프에서 텐서들이 돌아다니는 것에서 유래했다. 텐서란 매우 수학적인 개념이긴 한데, 간단하게 말해서 그냥 데이터의 배열(Array)라고 생각하면 된다.

텐서를 이야기할 때에는 Rank, Shapes, Type 등을 알아야 한다.

텐서(Tensor)의 Rank

 텐서의 Rank는 간단히 말해서 '몇 차원 배열이냐'를 의미한다.

Rank
Math Entity
Example
0
Scalar(magnitude only)
s = 483
1
Vector(magnitude and direction)
v = [1.1, 2.2, 3.3]
2
Matrix(table of numbers)
m = [[1, 2, 3], [1,2,3], [1,2,3]]
3
3-Tensor(cube of numbers)
c = [[[1], [2], [3]], [[4], [5], [6]], [[7], [8], [9]]]
n
n-Tensor(n 차원 배열)
...

스칼라(Scalar)는 0차원 배열로 그냥 값만 존재하는 값이다. Rank가 1이면 벡터(Vector)를 의미하며 1차원 배열을 의미한다. Rank가 2이면 행렬을 의미하며 Rank가 3이면 큐브(Cube)를 의미한다. 이렇게 Rank가 n이면 n차원 배열을 의미한다고 생각하면 된다. 

텐서(Tensor)의 Shape

텐서의 Shape은 각 축이 몇 개의 엘리먼트(Element)들로 구성되었는지 나타내는 값이다. Rank가 1인 텐서를 생각해보면 1차원 배열인 벡터(Vector)다. 차원과 함께 중요한 것이 몇 개의 원소들로 이루어져 있는지 여부다. Shape이 [3]이라면 엘리먼트(Element)가 3개인 벡터임을 나타낸다. Shape이 [2, 3]이면 Rank가 2인 텐서, 즉 행렬을 의미하며 2 * 3 행렬을 의미한다. Shape이 [2, 6, 3]이면 어떤 모양의 텐서를 나타내는지는 한번 생각해 보길 바란다.

텐서(Tensor)의 Type

텐서가 담을 수 있는 데이터의 타입을 의미한다. tf.float32, tf.int32 등이 표현하는 바는 텐서가 실수를 담을 수 있는지 정수를 담을 수 있는지 여부다. 대부분은 32로 끝나는 타입을 많이 사용한다.