서론

미니 배치 학습은 전체 데이터를 여러개로 쪼개는 방식이다.

메모리 부족이라던가 그런걸 생각해보면 필수적인 기법이다.

미니 배치를 구현하는 거에서부터 시작해보자.

미니 배치

조금 더 똑똑한 방법이 있을 수도 있겠지만

당장 떠오르는건 generator를 적절하게 써먹는 것이다.

slice 객체를 yeild하는 제너레이터를 만들어서 for문으로 돌린다면

간단하게 미니배치를 구현할 수 있을 것이다.

뭐 메모리에 데이터를 전부 올려둬야 한다는건 변하지 않지만…

일단 겨우 7만개니까 이 정도는 올려둘 수 있다.

정확도

Torchmetrics의 accuracy를 쓰면 정확도를 간편하게 구할 수 있다.

현재 학습이 얼마나 잘 이루어지고 있는지 알아보는 용도로 쓰자.

학습이 잘 안된다

모델이 구린건지, 아니면 학습을 너무 조금 시킨건지…

테스트 정확도가 50% 정도로 수렴한다.

조금 더 익숙한 구조를 쓰기로 했다.

CNN을 10개의 채널로 만들어 그 값을 쓰는 대신, n개의 채널을 만들어 nn을 한번 거치게 해준다.

훨씬 정확도가 높이 나온다.

아마도 모델이 구린게 맞던 것 같다.

여담으로 말하자면 예전에 한번 CNN만을 이용해 (주어졌던 예제와 같이) 분류를 시도해봤던 적이 있는데

그 때는 Convolution 레이어가 한 5개~7개 정도 됐었던 것 같다. 추가로 이 모델을 pooling을 해서 2*2짜리를 하나로 줄이는데, 그런 것 없이 정직하게 1*1까지 줄였었다.

그 때는 이것보다 정확도가 좋았다.

현재 lr은 0.01. epoch는 100이다. 조금 오래 걸리기는 하는데, 그래도 정확도는 괜찮게 나오는 것 같다.

기다리면서 생각해보니까 loss의 변화와 accuracy의 변화를 어디 저장해두거나 아니면 tensorboard같은걸 쓰는게 낫지 않았을까 싶긴 한데

그냥 넘어가자.

89%의 정확도. 꽤 낮은 편이기는 하지만… 이 정도로 만족하고 넘어가보자.

다음 시간

조금 더 MNIST를 가지고 놀아볼까 싶다. GAN을 한번 해보자.