상세 컨텐츠

본문 제목

신경망 구현

연구실

by myeongjaechoi 2024. 1. 26. 19:50

본문

지난 시간에 했던 MNIST를 구현해보자.

아직 학습을 못하기 때문에, 이미 학습이 끝난 정보를 가져오겠다.

이때 sample_weight.pkl은 학습된 정보들을 딕셔너리 형태로 저장하고 있다.

위 코드는 신경망에서 했던, init_network와는 달리, 가중치와 편향을 불러오는 것을 확인할 수 있다.

np.argmax()는 최댓값의 인덱스를 얻는다.

이때 p는 머신이 예측한 숫자이고, t[i]는 필체를 쓴 사람의 정답이다. 따라서 머신이 예측한 숫자와, 필체의 쓴 사람의 정답이 같으면 accuracy_cnt에 1를 더해준다. 마지막으로, 정답률을 얻기위해 x_test의 갯수에서 accuracy_cnt를 나눠준다.

결과이다.

밑에는 time이다.

time에 대한 건 후에 다시 보도록 하자.

다음으로 배치(묶음)처리에 대해서 알아보자. 만약 데이터의 갯수가 60,000장 이라면 머신은 한 장씩 처리하는 것이 아닌, 한 번에 처리한다. 따라서 I/O에서 병목현상이 발생한다. 이를 방지하기 위해, 60,000장을 100장 씩 나눠서 처리하는 것이 배치처리이다.

위 코드에서 밑에 for문만 바뀌었다.

시간 차이가 나는 것을 확인할 수 있다. 간과하면 안 되는 것이, 데이터가 커질 수록, 시간 차는 더 크게 나기 때문이다.

여기서 axis=1는 행을 뜻하고, 만약 axis=0이면 열을 뜻한다.

마지막으로 배치처리를 그림으로 이해해보겠다.

for문 속 argmax이다.

np.sum()에서는 argmax()를 통하여 얻은 값 p 와 t값을 비교하여 [1,1,0,...] 과 같은 값을 다 더한 후 accuracy_cnt에 더해주는 것을 알 수 있다.

'연구실' 카테고리의 다른 글

엔트로피  (1) 2024.01.28
손실함수  (0) 2024.01.27
MNIST  (0) 2024.01.25
인공신경망  (0) 2024.01.24
활성화 함수  (0) 2024.01.24

관련글 더보기