📚 파이토치에는 Dataset과 DataLoader라는 기능이 있어서 미니 배치 학습이나 데이터 셔플, 병렬 처리 까지 간단히 수행할 수 있다.
📚 TensorDataset을 DataLoader에 전달해서 데이터의 일부만 간단히 추출할 수 있다.
TensorDataset
🎀 개념
- Dataset을 상속한 클래스로 학습 데이터 X와 레이블 Y를 묶어 놓는 컨테이너이다.
- 이것을 DataLoader에 전달하면 for 루프에서 데이터의 일부분만 간단히 추출할 수 있게 된다.
- TensorDataset에는 텐서만 전달할 수 있으며, Variable은 전달할 수 없으니 주의
- Dataset은 직접 작성할 수도 있어서 대량의 이미지 파일을 한 번에 메모리에 저장하지 않고 필요할 때마다 읽어서 학습하는 등 다양하게 활용할 수 있다.
🎀 코드 구현
- 베이스라인
import torch
from torch.utils.data import Dataset
# 커스텀 데이터를 불러오는 가장 기본적인 형태 (넘파이 배열)
class 클래스명(Dataset) :
# 데이터 세팅에 필요한 것들을 미리 정의
def __init__(self) :
...
# DalaLoader를 통해 샘플이 요청되면 아래의 함수에서 인덱스에 해당하는 샘플 찾아서 준다.
def __getitem__(self, index) :
...
# 크기 반환
def __len__(self) :
...
# 이미지의 경우 PIL-Image, Tensor 타입일 때 텐서로 전처리
class 클래스명 :
# 텐서 변환 전처리 클래스 정의
# TensorData 클래스에서 sample을 불러와 작업하기 때문에 __call__ 함수 이용
def __call__(self, sample) :
- 그 외 방법들 (자세한 코드는 깃허브 참고)
- 정리되지 않은 커스텀 데이터 불러오기
- 커스텀 데이터 + 커스텀 전처리
- 커스텀 데이터 + 파이토치 제공 전처리
- 커스텀 전처리 + 파이토치 제공 전처리
DataLoader
🎀 개념
- PyTorch의 DataLoader 는 배치 관리를 담당한다.
- 모든Dataset 으로부터 DataLoader 를 생성할 수 있다.
- DataLoader 는 배치에 대해서 반복하기 편리하게 해준다.
- DataLoader 는 각각의 미니배치를 자동으로 제공한다.
🎀 코드 구현
- DataLoader의 인자로는 데이터, 배치 사이즈, 셔플의 여부 정도 들어간다.
- 배치 사이즈는 하이퍼파라미터
- shuffle은 대부분 train에만 적용한다.
import torch
from torch.utils.data import DataLoader
# 대부분의 형태
trainloader = DataLoader(trainset, batch_size = 50, shuffle=True)
testloader = DataLoader(testset, batch_size = 50, shuffle=False)
'Programming > Pytorch' 카테고리의 다른 글
[Pytorch] torch.max( ) & torch.argmax( ) (0) | 2023.01.30 |
---|---|
[Pytorch] GPU device (0) | 2023.01.28 |
[Pytorch] nn.Linear( ), MLP (0) | 2023.01.20 |
[Pytorch] 텐서(차원) 관련 함수 정리 (0) | 2023.01.18 |
[Pytorch] 모듈 및 함수 정리 (0) | 2023.01.15 |