미니배치 구현해보기

Amitis·2023년 1월 31일
0

DL_basic

목록 보기
3/4
post-thumbnail

클론코딩으로 미니배치 구현해보기

0. 학습 참고자료

  • 밑바닥부터 배우는 딥러닝1 (4.5.2)

1. 미니배치 학습이란?

훈련 데이터 중 일부를 무작위로 꺼내어(꺼낸 것들이 하나의 묶음임. 그래서 미니배치) 꺼낸 미니배치에 대해서 경사법으로 매개변수를 갱신하는 것

2. 코드로 구현해보기

import numpy as np
# from keras.datasets import mnist
from dataset.mnist import load_mnist # 같은 폴더 안에 dataset이 존재해야 한다!
from two_layer_net import TwoLayerNet

(X_train, y_train), (X_test, y_test) = load_mnist(normalize=True, one_hot_label=True)

train_loss_list = []

# 하이퍼파라미터
iters_num = 10000 # 반복 횟수
train_size = X_train.shape[0]
batch_size = 100 # 미니배치 크기
learning_rate = 0.1

network = TwoLayerNet(input_size=784, hidden_size=50, output_size=10)

for i in range(iters_num):
    # 미니배치 획득
    batch_mask = np.random.choice(train_size, batch_size)
    X_batch = X_train[batch_mask]
    y_batch = y_train[batch_mask]

    # 기울기 계산
    # grad = network.numerical_gradient(X_batch, y_batch)
    grad = network.gradient(X_batch, y_batch) # 성능 개선판

    # 매개변수 갱신
    for key in ('W1', 'b1', 'W2', 'b2'):
        network.params[key] -= learning_rate * grad[key]
    
    # 학습 경과 기록
    loss = network.loss(X_batch, y_batch)
    train_loss_list.append(loss)

3. 학습결과

학습 횟수가 늘어가면서 손실 함수의 값이 줄어든다

  • 학습이 잘 되고 있다는 뜻
  • 신경망의 가중치 매개변수가 서서히 데이터에 적응한다는 뜻
  • 반복해서 학습함으로써 최적 가중치 매개변수에 가까워지고 있다
profile
코딩은 핫팩빨

0개의 댓글