728x90
반응형

텐서(tensor)

  • 다차원 넘파이 배열
  • 데이터를 위한 컨테이너(container)
  • 거의 항상 수치형 데이터를 다루므로 숫자를 위한 컨테이너다.
  • 텐서에서는 차원(dimension)을 종종 축(axis)라고 부른다.

 

스칼라(0D 텐서)

  • 하나의 숫자만 담고 있는 텐서를 스칼라(scalar)(또는 스칼라 텐서, 0차원 텐서, 0D 텐서)라고 부른다.
    • 넘파이에서는 float32나 float64 타입의 숫자가 스칼라 텐서(또는 배열 스칼라(array scalar))다.
    • ndim 속성 사용시 넘파이 배열의 축 개수를 확인할 수 있다.
  • 텐서의 축 개수를 랭크(rank)라고 부른다.

 

import numpy as np
x = np.array(12)
print("x : ",x)
print("x의 축(rank) : ", x.ndim)

[그림1] 스칼라 텐서의 rank

 

벡터(1D 텐서)

  • 숫자의 배열을 벡터(vector) 또는 1D 텐서라고 부른다.
  • 1D 텐서는 딱 하나의 축을 가진다. - 1차원??
# 벡터 1D 텐서

x = np.array([12,3,6,14,37])
print("x : ",x)
print("x의 축(rank) : ", x.ndim)

[그림2] 벡터 1D 텐서

  • 5개의 원소를 가지고 있으니 5차원 벡터라고 부른다. - 5D 벡터와 5D 텐서는 완전히 다른 것이다.

 

행렬(2D 텐서)

  • 행렬(matrix) 또는 2D 텐서
  • 행렬에는 2개의 축이 있다. 
    • 보통 행(row)열(column)이라고 부른다.
    • 첫 번째 축에 놓여 있는 원소를 행이라고 부르고, 두 번째 축에 놓여 있는 원소를 열이라고 부른다.

 

# 행렬 2D 텐서

x = np.array([[5,78,2,34,0],
             [6,79,3,35,1],
             [7,80,4,36,2]])

print("x : ", x)
print("x의 축(rank) : ", x.ndim)

[그림3] 행렬 2D 텐서 rank

 

3D 텐서와 고차원 텐서

# 3D 텐서 고차원 텐서

x = np.array([[[5,78,2,34,0]],
             [[6,79,3,35,1]],
             [[7,80,4,36,2]]])


print("x의 축(rank) : ", x.ndim)
x

[그림4] 3D 텐서와 고차원 텐서

 

  • 3D 텐서들을 하나의 배열로 합치면 4D 텐서를 만드는 식으로 이어진다.
  • 딥러닝에서는 보통 0D에서 4D까지의 텐서를 다룬다.
  • 동영상 데이터를 다룰 경우에는 5D 텐서까지 가기도 한다.

 

핵심 속성(텐서의 3개 핵심 속성)

  • 축의 개수(랭크) : 예를 들어 3D 텐서에는 3개의 축이 있고, 행렬에는 2개의 축이 있다. 넘파이 배열 ndim 속성에 저장되어 있다.
  • 크기(shape) : 텐서의 각 축을 따라 얼마나 많은 차원이 있는지를 나타낸 파이썬의 튜플(tuple)이다.
    • 행렬의 크기가 (3,5)이고, 3D 텐서의 크기는 (3,1,5)이다.
    • 벡터의 크기는(5,)처럼 1개의 원소로 이루어진 튜플이다. 배열 스칼라는()처럼 크기가 없다.
  • 데이터 타입(넘파이는 dtype) : 텐서에 포함된 데이터의 타입, 예를 들어 텐서의 타입은 float32, uint8, float64 등이 될 수 있다. 
    • 드물게 char 타입을 사용하지만 대부분 다른 타입을 사용한다.

 

MNIST 데이터셋 확인

# MNIST 데이터셋으로 확인
from tensorflow.keras import datasets

(train_images, train_labels),(test_images, test_labels) = datasets.mnist.load_data()

print(train_images.ndim)

print(train_images.shape)

print(train_images.dtype)

[그림5] MNIST 데이터셋 확인

  • 8비트 정수형 3D 텐서
  • 28 x 28 크기의 정수 행렬 6만 개가 있는 배열

 

 

다섯 번째 이미지 출력

# 다섯 번째 이미지 출력

digit = train_images[4] # 4가 0,1,2,3,4 - 5번째

import matplotlib.pyplot as plt

plt.imshow(digit, cmap=plt.cm.binary)
plt.show()

[그림6] 다섯 번째 이미지 출력

 

배치 데이터

  • 일반적으로 딥러닝에서 사용하는 모든 데이터 텐서의 첫 번째 축(인덱스 0부터 시작, 0)은 샘플 축(sample axis)이다.
# 배치 데이터

batch1 = train_images[:128]
batch2 = train_images[128:256]
batchn = train_images[128 * n:128 * (n+1)]
  • 이런 배치 데이터를 다룰 때는 첫 번째 축을 배치 축(batch size) 또는 배치 차원(batch dimension)이라고 부른다.

 

텐서의 실제 사례

  • 벡터 데이터 : (samples, features) 크기의 2D 텐서
    • 사람의 나이, 우편 번호, 소득으로 구성된 인구 통계 데이터 등등
  • 시계열 데이터 또는 시퀀스(sequence) 데이터 : (samples, timesteps, features) 크기의 3D 텐서
    • 주식 가격 데이터셋, 트윗 데이터셋
  • 이미지 : (samples, height, width, channels) 또는 (samples, channels, height, width) 크기의 4D 텐서
  • 동영상 : (samples, frames, height, width, channels) 또는 (samples, frames, height, channels, height, width) 크기의 5D 텐서

 

출처 :

www.yes24.com/Product/Goods/65050162?OzSrank=1

 

케라스 창시자에게 배우는 딥러닝

단어 하나, 코드 한 줄 버릴 것이 없다!창시자의 철학까지 담은 딥러닝 입문서케라스 창시자이자 구글 딥러닝 연구원인 저자는 ‘인공 지능의 민주화’를 강조한다. 이 책 역시 많은 사람에게

www.yes24.com

 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기