Deep Learning Study (1) / 24.09.03
2장 신경망의 수학적 요소
준비된 데이터 : MNIST 데이터셋 (넘파이 배열 형태)
훈련 과정 (예시 맛보기)
입력
- train_images & train_labels 네트워크에 주입 → 이미지와 레이블 연관시킬 수 있도록 학습됨
- 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 = 넘파이 배열의 축 개수 확인 명령어
텐서의 종류
- 0D 텐서 : 스칼라
float32, float64 타입의 숫자 → 축 개수 0개
- 1D 텐서 : 벡터
숫자 배열 → 축 개수 1개
- 2D 텐서 : 행렬 ⇒ 벡터 데이터
벡터의 배열 → 축 개수 2개 (행, 열)
- 3D 텐서 & 고차원 텐서 ⇒ 3D : 시계열 데이터 / 4D : 이미지 / 5D : 동영상
- 여기서부터는 이전 행렬들을 합쳐서 만들어짐. 동영상은 5D 텐서까지도 감.
핵심 속성
- 축 개수
- 크기 : 각 축을 따라 얼마나 많은 차원이 있는 지를 나타낸 파이썬 튜플
- 데이터 타입
배치 데이터
딥러닝 모델은 한 번에 데이터셋 처리하지 않고 작은 배치로 나누어 처리 (ex. 벡터 데이터는 2D 텐서로 저장)
교재 : 케라스 창시자에게 배우는 딥러닝