지난 시간에 했던 MNIST를 구현해보자.
아직 학습을 못하기 때문에, 이미 학습이 끝난 정보를 가져오겠다.
위 코드는 신경망에서 했던, init_network와는 달리, 가중치와 편향을 불러오는 것을 확인할 수 있다.
이때 p는 머신이 예측한 숫자이고, t[i]는 필체를 쓴 사람의 정답이다. 따라서 머신이 예측한 숫자와, 필체의 쓴 사람의 정답이 같으면 accuracy_cnt에 1를 더해준다. 마지막으로, 정답률을 얻기위해 x_test의 갯수에서 accuracy_cnt를 나눠준다.
결과이다.
time에 대한 건 후에 다시 보도록 하자.
다음으로 배치(묶음)처리에 대해서 알아보자. 만약 데이터의 갯수가 60,000장 이라면 머신은 한 장씩 처리하는 것이 아닌, 한 번에 처리한다. 따라서 I/O에서 병목현상이 발생한다. 이를 방지하기 위해, 60,000장을 100장 씩 나눠서 처리하는 것이 배치처리이다.
시간 차이가 나는 것을 확인할 수 있다. 간과하면 안 되는 것이, 데이터가 커질 수록, 시간 차는 더 크게 나기 때문이다.
여기서 axis=1는 행을 뜻하고, 만약 axis=0이면 열을 뜻한다.
마지막으로 배치처리를 그림으로 이해해보겠다.
np.sum()에서는 argmax()를 통하여 얻은 값 p 와 t값을 비교하여 [1,1,0,...] 과 같은 값을 다 더한 후 accuracy_cnt에 더해주는 것을 알 수 있다.