MNIST
- pytorch에서 dataset을 자동으로 다운받을 수 있기 때문에 따로 다운 받지 않아도 된다
- LeNet5를 사용하여 학습
데이터 normalization 해주는 이유
- 픽셀 0~255 사이의 값
- range가 크기 때문에 weight가 잘 수렴되지 않고 output도 큰 숫자로 나오게 되는 문제
- 분산(0~255)이 너무 크기 때문에 normalization 해줘야한다
- 0~255 -> 0~1로 변환
- 전처리해줘야한다
Dataloader
- dataset
- batch_size : 한번에 처리할 이미지 개수
- shuffle
- pin_memory : gpu로 데이터를 빠르게 옮겨주는 역할
- num_workers : gpu에 학습할 때, data를 cuda로 올려야하고 이게 끝나면 학습하는데 그때 cpu와 gpu 사이에서 전송을 해주는 역할, 보통 cpu core의 절반 정도
- drop_last : batch를 하고 남은 데이터를 버릴지 말지
- StepLR : 단계적으로 learning rate가 떨어지도록
scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=5, gamma=0.1)
- 5일때 lr를 0.1배 만큼으로 줄인다
실행 방법
python main.py --mode train --download 1 --output_dir './output'
python main.py --mode eval --download 1 --output_dir './output' --checkpoint ./output/model_epoch0.pt
python main.py --mode test --download 1 --output_dir './output' --checkpoint ./output/model_epoch0.pt