수학과의 좌충우돌 프로그래밍

[딥러닝]02.신경망을 위한 데이터 표현 본문

인공지능/케라스창시자에게 배우는 딥러닝

[딥러닝]02.신경망을 위한 데이터 표현

ssung.k 2019. 3. 15. 05:08


신경망을 위한 데이터 표현

모든 머신러닝 시스템은 일반적으로 텐서를 기본 데이터 구조로 사용한다. 텐서는 데이터를 위한 컨테이너라고 생각할 수 있다. 그 데이터로는 임의의 차원 개수를 가지는 행렬이 들어간다. 각 차원에 따라 어떻게 데이터와 텐서가 변화하는지 알아보자.

 

스칼라(0D텐서)

  • 하나의 숫자만 담고 있는 텐서를 스칼라라고 한다.

  • 숫자는 float32 또는 float64 타입을 가진다.

  • ndim 속성을 사용하면 넘파이 배열의 축 개수를 확인가능

    • 텐서의 축 개수를 랭크(rank) 라고 부른다.
import numpy as np
x = np.array(7)
>>> x
array(12)
>>> x.ndim
0

 

벡터(1D텐서)

  • 숫자의 배열을 벡터 라고 한다.
  • 아래 예시에서의 벡터는 5개의 원소를 가지고 있으니까 5차원 벡터라고 부른다. 5D벡터와 5D텐서와 헷갈리지만 엄연히 다른 개념이다. 5D벡터는 하나의 축을 따라 5개의 차원을 가지는 것이고 5D텐서는 5개의 축을 가진 것.
x = np.array([1,2,3,4,5])
>>> x
array([1,2,3,4,5])
>>> x.ndim
1

 

행렬(2D텐서)

  • 벡터의 배열이 행렬 이라고 한다.
  • 행렬은 두 개의 축이 존재하고 행, 열 이라고 부른다.
x = np.array([[1,2,3,4,5],
              [6,7,8,9,0],
              [1,2,3,4,5]])
>>> x
array([[1, 2, 3, 4, 5],
       [6, 7, 8, 9, 0],
       [1, 2, 3, 4, 5]])
>>> x.ndim
2

 

고차원 텐서

  • 위와 마찬가지로 전 텐서를 여러 개 합쳐 그 다음 차원의 텐서를 만들 수 있다.
  • 3D 와 4D 까지는 사용하지만 그 위로는 많이 사용하지 않는다.
  • 예시는 위와 같은 논리이므로 생략한다.

 

텐서의 주요 속성

  • 축의 개수

    • 위에서도 말했듯이 다른 말로 랭크라고 한다.
    • nD 텐서에는 n개의 축이 있다.
    • ndim으로 확인 가능하다.
  • 크기

    • 텐서의 각 축을 따라 얼마나 많은 차원이 있는지를 나타낸 파이썬의 튜플
    • 행렬은 아래와 같이 나타나고 벡터는 (5, ) , 스칼라는 ( ) 로 크기가 없다.
x = np.array([[1,2,3,4,5],
              [6,7,8,9,0],
              [1,2,3,4,5]])
>>> x.shape
(3,5)
  • 데이터 타입

    • 텐서에 포함된 데이터의 타입
    • float32, float64, unit8 등이 있다.

배치 데이터

일반적으로 데이터 텐서의 첫번째 축은 샘플축 이다. training을 할시에 전체 데이터를 한 번에 처리하지 않고 부분적으로 나눠서 처리를 하는데 한 배치마다 크기가 128로 하려면 다음과 같이 해준다.

batch = train_images[128*n:128*(n+1)]

 

텐서의 실제 사례

자주 쓰이는 텐서의 예시들을 알아보도록 하자.

  • 벡터 데이터

    • (samples, features) 크기의 2D텐서
    • 대부분의 경우 벡터 데이터이다. 벡터 데이터 이므로 두 개의 축이 존재하는데 첫 번째 축은 샘플축, 두 번째 축은 특성축이다.
    • 사람의 나이, 우편번호, 소득으로 구성된 인구 통계 데이터, 각 사람은 3개의 값을 가진 벡터로 구성되고 10만 명이 포함된 전체 데이터셋은 (100000, 3) 크기의 텐서에 저장 될 수 있다.
  • 시계열 데이터 또는 시퀀스 데이터

    • (samples, timesteps, features) 크기의 3D텐서

    • 데이터에서 시간 or 연속된 순서가 중요할 때 시간 축을 포함한다. (시간 축은 두 번째 축을 사용)

    • 주식 가격 데이터셋

      • 1분마다 현재 주식 가격, 지난 1분 동안에 최고 가격과 최소가격을 저장한다. 하루의 거래 시간이 390분이라고 하면 250일치의 데이터는 (250, 390, 3) 크기의 3D 텐서로 저장 될 수 있다.
  • 이미지

    • (samples, height, width, channels) 또는 (samples, channels, height, width) 크기의 4D텐서
    • 이미지는 높이, 너비, 컬러 채널의 3차원으로 구성
    • 흑백이미지의 경우에는 컬러 채널의 차원 크기가 1이라서 생략 가능하지만 관레상 적어준다.
    • 컬러 이미지의 경우에는 컬러 채널의 차원 크기가 3
    • 256 * 256 크기의 흑백 이미지 128개의 배치는 (128, 256, 256, 1) 크기의 텐서에 저장 될 수 있다.
  • 동영상

    • (samples, frames, height, width, channels) 크기의 5D텐서
    • 하나의 비디오는 프레임의 연속, 프레임은 하나의 컬러 이미지
    • 하나의 프레임이 (height, width, color_depth), 프레임의 연속은 (frames, height, width, color_depth), 여러 비디오의 배치는 (samples, frames, height, depth, color_depth)
    • 60초 짜리 144*256 유튜브 비디오 클립을 초당 4프레임으로 샘플링하면 240 프레임이 되고 이런 클립을 4개 가진 배치는 (4, 240, 144, 256, 3) 크기의 텐서에 저장될 수 있다.


Comments