No Limitation
[Pytorch] Mini Batch Size와 Data Loader 본문
참고 자료
https://wikidocs.net/53560
유원준 님의 Pytorch로 시작하는 딥러닝 입문 책 자료를 참고하였습니다.
만약 데이터가 몇천만개나 억개가 넘어가는 굉장히 방대한 데이터의 경우면 이러한 데이터에 대해 일일이 Gradient Descent를 수행하는 것은 매우 연산이 많게 될 것이다.
이러하 경우 전체 데이터를 작은 단위로 나누어 학습을 하게 되는데 이 때 이 사이즈를 batch size라고 한다.
이러한 batch size=5라고 하면
전체 데이터를 5등분을 수행하게 각 batch 마다 Gradient Descent를 수행하게 된다. 이 Gradient Descent를 전체 데이터에 수행하면 1번의 epoch가 수행되게 된다.
Batch Size = 1인 경우는,
전체 데이터를 사용하므로 가중치 값이 최적값에 수렴하는 과정이 매우 안정적이지만 계산 복잡도가 매우 크게 된다.
Batch Size > 1인 경우,
전체 데이터의 일부만 보고 수행하므로 최적값으로 수렴하는 과정에서 조금 안정적이진 않지만 복잡도가 상대적으로 작다.
Pytorch에서는 데이터를 다루기 쉽게 해주는 여러 툴을 제공하는데 대표적으로 Dataset과 DataLoader를 제공한다.
이들을 사용하면 배치 학습과 데이터 셔플링, 병렬 처리 등을 수행할 수 있다.
이들은 기본적으로 Dataset을 정의하고, 이를 DataLoader에 전달하는 식으로 동작한다.
예를 들어보자
( 유원준 님은 책 상에서 Tensor를 바로 입력받을 수 있는 TensorDataset을 사용하였습니다. )
TensorDataset과 DataLoader를 불러옴
데이터 구축
다음으로 데이터셋과 데이터로더를 구축한다.
처음에 데이터 셋을 지정해주게 되면
데이터 로더를 사용할 수 있는데
데이터 로더에는 입력으로 데이터 셋과, 배치 사이즈 그리고 셔플 여부를 설정하여 넣어줄 수 있다.
Shuffle의 경우 모형이 데이터셋의 순서에 익숙해지는 것을 방지하여 사용한다.
for문의 iterator를 통해 확인해보면
다음과 같이 2, 2, 1개씩 구성되있음을 확인할 수 있다.
이들에 대하여 각각 gradient를 구해보자
'ML & DL & RL' 카테고리의 다른 글
[Pytorch] 로지스틱 회귀분석 (0) | 2022.02.04 |
---|---|
[Pytorch] Custom Dataset (0) | 2022.02.03 |
[Pytorch] Class를 이용한 Model 구현 (0) | 2022.02.03 |
[Pytorch] nn.Module (0) | 2022.02.03 |
[Pytorch] 다중 선형 회귀 분석 (0) | 2022.02.02 |