M.L (p.116)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import sys,os import numpy as np sys.path.append(os.pardir) from mnist import load_mnist (x_train,t_train),(x_test,t_test) = load_mnist(normalize=True, one_hot_label=True) train_size = x_train.shape[0] batch_size = 10 a = batch_mask = np.random.choice(train_size, batch_size) x_batch = x_train[batch_mask] t_batch = t_train[batch_mask] print(a) |
mini batch : 거대한 데이터셋을 다 계산해보는 건 시간적, 비용적으로 부담이 크기 때문에 적절히 어느정도 양의 데이터를 골라 그 값을 이용해 근사치를 구한다.
예를 들어 60,000장의 훈련 데이터가 있으면 그 중 100장을 무작위로 뽑아 그 100장만을 사용하여 학습하는 것이다.
내 생각 : mini batch는 모집단을 대표할 수 있는가? 일단 각 데이터 값들이 독립적인지 확인하기 조차 힘들다. independent 이지 않은 데이터들은 variance가 매우커져 수렴하는 값이 매우 넓어져 불확실하게 된다. 그럼 데이터들이 각각 독립적인지도 모르는 상태인데 이 방법을 어떻게 신뢰하고 사용하는 것일까?
소스 코드 내용은 x_train.shape[0] : 0차원 인덱스값으로 (60000,784) 에서 60000을 가리킨다. np.random.choice 함수로 60000개 데이터중 10개를 랜덤으로 뽑는다. 랜덤으로 뽑힌 값들을 인덱스로하는 변수에 저장한다.