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)
벡터(1D 텐서)
- 숫자의 배열을 벡터(vector) 또는 1D 텐서라고 부른다.
- 1D 텐서는 딱 하나의 축을 가진다. - 1차원??
# 벡터 1D 텐서
x = np.array([12,3,6,14,37])
print("x : ",x)
print("x의 축(rank) : ", x.ndim)
- 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)
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
- 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)
- 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()
배치 데이터
- 일반적으로 딥러닝에서 사용하는 모든 데이터 텐서의 첫 번째 축(인덱스 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
728x90
반응형
최근댓글