Deep Learning

Deep Learning Study (1) / 24.09.03

JHDeveloper 2024. 9. 4. 09:34

2장 신경망의 수학적 요소

준비된 데이터 : MNIST 데이터셋 (넘파이 배열 형태)

 

 

훈련 과정 (예시 맛보기)

 

입력

  1. train_images & train_labels 네트워크에 주입 → 이미지와 레이블 연관시킬 수 있도록 학습됨
  2. test_images에 대한 예측 네트워크에 요청 → test_labels와 맞는지 확인
from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

 

중간

다양한 층 = 입력된 데이터를 더 유용한 형태로 정제해서 출력 (더 의미있는 표현을 입력 데이터로부터 추출)

층 마지막에는 최종적으로 속할 라벨(클래스) 개수를 입력해야 함.

from keras import models
from keras import layers

network = models.Sequentials()
network.add(layers.Dense(512, activation='relu',input_shape = (28*28,)))
network.add(layers.Dense(10, activation='softmax'))

*softmax = n개의 확률 점수가 들어 있는 배열 (모두 더하면 1), 다중 클래스 분류 문제에서 각 클래스에 속할 확률을 계산하는 데 사용

다중 클래스 분류 문제에서 매우 유용

*relu = 기울기 소실 문제를 피하기 위해 사용되며, 네트워크가 깊어질수록 여전히 잘 작동 ⇒ 이미지 분류에서 특징을 추출할 때 많이 사용

 

컴파일

손실함수 : 훈련 데이터에서 신경망의 성능 측정 방법 ← 네트워크가 옳은 방향으로 학습될 수 있도록 도와줌

옵티마이저 : 입력된 데이터와 손실 함수 기반으로 네트워크 업데이트하는 메커니즘

훈련과 테스트 과정을 모니터링할 지표 : 정확성만 볼 거임.

network.compile(optimizer='rmsprop',
								loss = 'categorical_crossentropy',
								metrics=['accuracy'])

 

데이터 전처리

들어가는 이미지 타입 및 배열을 모델 훈련을 위한 타입 및 배열로 전환

이전 train_images : [0, 255]사이 값인 uint8 타입의 (60000, 2828) 배열 → 변경 훈련 이미지 : 0과 1 사이 값을 가지는 float32 타입의 (60000, 28*28) 배열

train_images = train_images.reshape((60000,28*28))
train_images = train_images.astype('float32')/255

 # 1 1 1 1 ... 1 1 1 (28개)
 # 1 1 1 1 ... 1 1 1
 # 1 1 1 1 ... 1 1 1
 # ...                         => 한 면에 이런 구성인 애들이 60000개가 있는 거임.
 # 1 1 1 1 ... 1 1 1
 # 1 1 1 1 ... 1 1 1
 # (28개) 

test_images = test_images.reshape((10000, 28*28))
test_images = test_images.astype('float32')/255

 

레이블 준비하기

from keras.utils import to_categorical

train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)

 

 

데이터 표현

텐서 = 다차원 넘파이 배열, 데이터를 위한 컨테이너 ⇒ 모든 머신러닝 시스템의 기본 데이터 구조로 사용

*ndim = 넘파이 배열의 축 개수 확인 명령어

 

 

텐서의 종류

  1. 0D 텐서 : 스칼라

float32, float64 타입의 숫자 → 축 개수 0개

  1. 1D 텐서 : 벡터

숫자 배열 → 축 개수 1개

  1. 2D 텐서 : 행렬 ⇒ 벡터 데이터

벡터의 배열 → 축 개수 2개 (행, 열)

  1. 3D 텐서 & 고차원 텐서 ⇒ 3D : 시계열 데이터 / 4D : 이미지 / 5D : 동영상
  • 여기서부터는 이전 행렬들을 합쳐서 만들어짐. 동영상은 5D 텐서까지도 감.

 

 

핵심 속성

  • 축 개수
  • 크기 : 각 축을 따라 얼마나 많은 차원이 있는 지를 나타낸 파이썬 튜플
  • 데이터 타입

 

 

배치 데이터

딥러닝 모델은 한 번에 데이터셋 처리하지 않고 작은 배치로 나누어 처리 (ex. 벡터 데이터는 2D 텐서로 저장)

 

 

 

 

 

 

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