Word2Vec 2
서론
미니 배치 학습은 전체 데이터를 여러개로 쪼개는 방식이다.
메모리 부족이라던가 그런걸 생각해보면 필수적인 기법이다.
미니 배치를 구현하는 거에서부터 시작해보자.
미니 배치
조금 더 똑똑한 방법이 있을 수도 있겠지만
당장 떠오르는건 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을 한번 해보자.