본문 바로가기

Lecture AI/2장.신경망의 수학적 구성 요소

1. 신경망을 위한 데이터 표현: 텐서 0D부터 5D까지

반응형
 

2. 첫번째 신경망 실습 :mnist 실습

Note: 클래스와 레이블에 관한 노트 머신 러닝에서 분류 문제의 범주(category)를 클래스(class)라고 합니다. 데이터 포인트는 샘플(sample)이라고 합니다. 특정 샘플의 클래스는 레이블(label)이라고 합

nicola-ml.tistory.com

 

위의 실습을 보면 텐서라 부르는 다차원 넘파이 배열에 데이터를 저장하는 것부터 시작합니다.  최근의 모든 머신 러닝 시스템은 일반적으로 텐서를 기본 데이터 구조로 사용합니다.

 

핵심적으로 텐서는 데이터를 위한 컨테이너(container)입니다. 대부분 수치형 데이터를 다루므로 숫자를 위한 컨테이너입니다.

 

 


1.1. 스칼라(0D 텐서)

 

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

 

 

1.2. 벡터(1D 텐서)

 

숫자의 배열을 벡터(vector)또는 1D텐서라고 부릅니다. 1D텐서는 딱 하나의 축을 가집니다. 만약 5개의 원소를 가지고 있다면 5차원 벡터라고 부릅니다. 5D벡터와 5D텐서가 혼동을 하게 되는데요. 

 

5D벡터는 하나의 축을 따라 5개의 차원을 가진 것이고 5D 텐서는 5개의 축을 가진 것입니다.

 

 

1.3. 행렬(2D 텐서)

 

벡터의 배열이 행렬또는 2D텐서입니다. 행렬에는 축이 2개입니다.

 

 

1.4. 3D 텐서와 고차원 텐서

 

행렬들을 하나의 새로운 배열로 합치면 숫자가 채워진 직육면체 형태로 해석할 수 있는 3D텐서가 만들어 집니다.

 


2. 핵심 속성

 

텐서는 3개의 핵심 속성으로 정의됩니다.

  • 축의 개수(랭크): 예를 들어 3D텐서에는 3개의 축이 있고, 행렬에는 2개의 축이 있습니다. 넘파이 라이브러리에서는 ndim속성에 저장되어 있습니다.
  • 크기(shape): 텐서의 각 축을 따라 얼마나 많은 차원이 있는지를 나타낸 파이썬의 튜플입니다. 행렬의 큭는 (3,5)이고 3D 텐서의 크기는(3,3,5)입니다. 벡터의 크기는 (5,)처럼 1개의 원소로 이루어진 튜플입니다. 배열 스칼라는 0처럼 크기가 없습니다.
  • 데이터타입(넘파이에서는 dtype)에 저장됩니다.): 텐서에 포함된 데이터의 타입입니다. 텐서는 사전에 할당되어 연속된 메모리에 저장되어야 하므로 넘파이 배열은(그리고 대부분 다른 라이브러리) 가변 길이의 문자열을 지원하지 않습니다.
#check 
print(train_images.ndim)
print(train_images.shape)
print(train_images.dtype)

import matplotlib.pyplot as plt

plt.imshow(train_images[4], cmap=plt.cm.binary)
plt.show()

 

각 print는 아래와 같습니다.

3
(60000, 28, 28)
uint8

이 배열은 8비트 정수형 3D 텐서입니다. 좀 더 정확하게는 28 x 28크기의 정수 행렬 6만 개가 있는 배열입니다. 각 행렬은 하나의 흑백 이미지이고, 행렬의 각 원소는 0에서 255사이의 값을 가집니다.

 

 


3. 배치 데이터

 

일반적으로 딥러닝에서 사용하는 모든 데이터 텐서의 첫 번째 축(인덱스가 0부터 시작하므로 0번째 축)은 샘플 축(sample axis=batch axis)입니다. 딥러닝 모델은 한 번에 전체 데이터셋을 처리하지 않습니다. 그 대신 데이터를 작은 배치로 나뉩니다.

 

 


4. 텐서의 실제 사례

 

일반적으로 사용하는 데이터는 다음 중 하나에 속할것입니다.

  • 벡터 데이터: (samples, features)크기의 2D 텐서
  • 시계열 데이터 또는 시퀀스(sequence)데이터: (samples, timesteps, features)크기의 3D텐서
  • 이미지: (samples, height, width, channels)또는 (samples, channels, height, width)크기의 4D텐서
  • 동영상: (samples, frames, height, width, channels)또는 (samples, frames, channels, height, width)크기의 5D텐서

 

1. 벡터 데이터: 대부분의 경우에 해당됩니다. 이런 데이터셋에서는 하나의 데이터 포인트가 벡터로 인코딩될 수 있으므로 배치 데이터는 2D텐서로 인코딩될 것입니다. (즉 벡터의 배열입니다.) 여기서 첫 번째 축은 샘플 축(sample axis)이고, 두번째 축은 특성 축(feature axis)입니다.

 

2. 시계열 데이터 또는 시퀀스 데이터: 데이터에서 시간이 중요할 때는 시간 축을 포함하여 3D 텐서로 저장됩니다. 각 샘플은 벡터(2D 텐서)의 시퀀스로 인코딩되므로 배치 데이터는 3D텐서로 인코딩될 것입니다. 관례적으로 시간 축은 항상 두 번째 축입니다.

 

3. 이미지 데이터: 이미지는 전형적으로 높이, 너비, 컬러 채널의 3차원으로 이루어집니다. (MNIST 숫자처럼) 흑백 이미지는 하나의 컬러 채널만을 가지고있어 2D 텐서로 저장될 수 있지만 관계상 이미지 텐서는 항상 3D로 저장됩니다. 흑백 이미지의 경우 컬러 채널의 차원 크기는 1입니다. 256 x 256 크기의 흑백 이미지에 대한 128개의 배치는 (128, 256, 256, 1) 크기의 텐서에 저장될 수 있습니다. 컬러 이미지에 대한 128개의 배치라면 (128, 256, 256, 3) 크기의 텐서에 저장될 수 있습니다.

 

4. 비디오 데이터: 비디오 데이터는 현실에서 5D 텐서가 필요한 데이터입니다. 

반응형