최근의 모든 머신 러닝 시스템은 일반적으로 텐서를 기본 데이터 구조로 사용한다.
데이터를 위한 컨테이너라고 생각하면된다.
ndim
을 통해 확인할수있다.shape
을 통해 확인할수있다.dtpye
속성으로 데이터를 확인할 수 있다.출처:https://codetorial.net/tensorflow/basics_of_tensor.html
scalar = np.array(10)
print(scalar)
print(scalar.ndim)
print(scalar.shape)
10
0
()
vector = np.array([1, 2, 3, 4, 5])
print(vector)
print(vector.ndim)
print(vector.shape)
[1 2 3 4 5]
1
(5,)
matrix = np.array([[1, 2, 3],
[4, 5, 6]])
print(matrix)
print(matrix.ndim)
print(matrix.shape)
[[1 2 3]
[4 5 6]]
2
(2, 3)
tensor_3D = np.arange(24).reshape(2, 3, 4)
print(tensor_3D)
print(tensor_3D.ndim)
print(tensor_3D.shape)
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
3
(2, 3, 4)
넘파이의 배열에서 shape
를 이용하여 텐서의 크기를 알아볼 경우 return값은 다음과 같다
1차원: (열,)
2차원: (행, 열)
3차원: (깊이, 행, 열)
즉, 열의 기준이 되어 차원이 늘어날수록 늘어난 차원의 크기가 열의 앞에 추가된다고 생각하면된다.
머신러닝에서 사용하는 train_data의 shape은 다음과 같다.
1. 벡터 데이터: (samples, features) 2D tensor
집값 예측 문제라고 생각하고 주어진 데이터가 100개의 연식, 동네, 역세권의 유무에 따른 데이터라고 하면 (100, 3)크기의 텐서에 저장될 수 있다.
2. 이미지: (samples, height, width, channels) 4D tensor
채널 우선방식 과 채널 마지막 방식 으로 나뉘지만 보통의 경우 100 장의 28x28의 컬러 이미지라면 (100, 28, 28, 3)크기의 텐서에 저장될 수 있다.
3. 동영상: (samples, frames, height, channels) 5D tnesot
import numpy as np
from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
print(train_images.shape)
(60000, 28, 28)
28x 28배열의 사진이 6만장이 들어있는것을 뜻한다.
use_images = train_images[:100, :, :]
print(use_images.shape)
(100, 28, 28)
일반적으로 딥러닝에서 사용하는 모든 데이터 텐서의 첫번째 축(axis0)은 샘플 축(sample axis)이다. 즉 샘플의 개수를 의미한다. 위의 use_images에서는 100을 가르키고 이는 100장의 샘플 데이터가있다는 뜻이다.
위와 같은 샘플축의 슬라이싱은 모델 수행시 배치 데이터를 나눌때 사용된다.
배치 데이터를 다룰 때는 첫번째 축(axis0)를 배치축(batch axis) 또는 배치차원(batch dimension)이라고 부른다.
# 6만장의 데이터 중에서 위쪽 절반만 사용하고 싶을 경우
use_images = train_images[: , :14 , :]
print(use_images.shape)
(60000, 14, 28)