손으로 쓰인 dataset을 말한다.
예전에 우체국에서 편지를 받으면 우편 번호가 적혀있는데 이숫자들을 자동으로 인식하고 싶어서 만들어졌다.
train set, test set으로 구성이 되어 있다.
train set은 총 6만장의 이미지와 레이블로 구성되어있고, test set은 만장의 이미지와 레이블로 구성되어 있다.
torchvision에 있는 dataset을 이용해서 MNIST를 불러오는 코드
일반적으로 pytorch의 경우 이미지는 0에서 1사이의 값을 가지게 되고, 순서는 채널, 높이, 너비 이다.
MINST함수
: root가 어느 경로에 MNIST가 있냐를 설명하고, train은 True로 할 시 MNIST에 있는 train set을 불러오고, False로 하면 MNIST의 test set을 불러오겠다는 의미다.
transform
: MNIST 이미지를 불러올 때 어떤 transform을 적용해서 불러올 거냐는 의미다.
ToTensor()
: 일반적인 이미지는 0에서 255의 값을 가진다. 때문에 이미지의 순서와 값을 PyTorch에 맞게 Torch에 맞게 바꿔준다.
download
: 만약root에 MNIST데이터가 존재하지 않으면 다운을 받겠다는 의미다.
DataLoader
: 어떤 데이터를 로드할할 것인지
batch_size
: MNIST data를 불러올때 몇개씩 잘라서 불러올 것인지
shuffle
: 이미지를 불러올 때 순서를 섞어서 무작위로 불러올 것인지, 아니면 순서대로 불러올 것인지
drop_last
: batch_size만큼 잘라서 불러올때 혹시 맨 뒤에 숫자가 맞지 않게 남는 데이터들을 어떻게 할 것인지, True라면 그 데이터를 사용하지 않는다.
데이터를 한번의 계산으로 최적화된 값을 찾는 것은 어렵다. 따라서 최적화(optimization)할 때는 여러번 학습 과정을 거친다. 데이터를 나누는 방식으로 세분화 시키는데 이때 Epoch,Batch size,Iteration의 개념이 필요하다
Epoch
인공 신경망에서 전체 데이터 셋에 대해 forward pass/back pass과정을 거친것을 말한다. 즉, 데이터 넷에 대해 한 번 학습을 완료한 상태
training set전체가 한번 사용이 되면 1 epoch를 돌렸다고 한다.
epochs=40이라면 전체 데이터를 40번 사용해서 학습을 거치는 것이다.
모델을 만들 때 적절한 epoch값을 설정해야 underfiting과 overfiting을 방지할 수 있다.
epoch 값이 너무 작다면 underfitting이, 너무 크다면 overfitting이 발생할 확률이 높다.
Batch Size
모델의 가중치를 한번에 학습에 사용할 때 사용되는 샘플의 묶음을 의미한다.
Iteration
batch를 몇 번 학습에 사용했는지
예) 1000개의 training set이 있고,batch size를 500으로 사용한다고 하자.
그러면 batch size가 500이면 2개의 batch가 있다는 것이고, 이 2개의 batch를 사용해서 iteration학습을 사용하게 되면 한 epoch이 끝났다고 볼 수 있다.