M.L (p.143)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
import numpy as np from p88func import * import sys,os 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) network = TwoLayerNet(input_size = 784, hidden_size = 50, output_size = 10) iters_num = 10000 train_size = x_train.shape[0] #60,000 batch_size = 100 learning_rate = 0.1 train_loss_list = [] train_acc_list = [] test_acc_list = [] iter_per_epoch = max(train_size / batch_size, 1) for i in range(iters_num): batch_mask = np.random.choice(train_size, batch_size) x_batch = x_train[batch_mask] t_batch = t_train[batch_mask] grad = network.gradient(x_batch,t_batch) for key in ('W1', 'b1', 'W2', 'b2'): network.params[key] -= learning_rate * grad[key] loss = network.loss(x_batch,t_batch) train_loss_list.append(loss) # i = 9999 if i % iter_per_epoch == 0: train_acc = network.accuracy(x_train,t_train) test_acc = network.accuracy(x_test,t_test) train_acc_list.append(train_acc) test_acc_list.append(test_acc) print("train acc, test acc | "+ str(train_acc) + "," + str(test_acc)) |
epoch 단위로 평가하는 코드이다.
epoch 이란? 하나의 단위로 1 epoch은 학습에서 훈련 데이터를 모두 소진했을 때의 횟수에 해당, 예로 훈련 데이터 10,000개를 100개의 미니배치로 학습할 경우 확률적 경사 하강법을 100회 반복하면 모든 훈련 데이터를 소진 한게 된다. 이 경우 100회가 1 epoch이다.

학습결과 over fitting이 일어나지는 않지만 책에서와는 달리 11%인 accuracy를 띄는 이유를 찾아봐야한다.