
- 파이토치에는 Dataset과 DataLoader라는 기능이 있어서 미니 배치 학습이나 데이터 셔플, 병렬 처리 까지 간단히 수행할 수 있다.
- TensorDataset은 Dataset을 상속한 클래스로 학습 데이터 X와 레이블 Y를 묶어 놓는 컨테이너이다.
- TensorDataset을 DataLoader에 전달하면 for 루프에서 데이터의 일부분만 간단히 추출할 수 있게 된다.
- TensorDataset에는 텐서만 전달할 수 있으며, Variable은 전달할 수 없으니 주의
- Dataset은 직접 작성할 수도 있어서 대량의 이미지 파일을 한 번에 메모리에 저장하지 않고 필요할 때마다 읽어서 학습하는 등 다양하게 활용할 수 있다.
TensorDataset을 DataLoader에 전달해서 데이터의 일부만 간단히 추출
# 라이브러리 불러오기 import torch from torch import nn, optim from torch.utils.data import TensorDataset, DataLoader |
from sklearn.datasets import load_digits digits = load_digits() # 독립변수, 종속변수 분리 X = digits.data Y = digits.target # Numpy의 ndarray를 파이토치의 텐서로 변환 X = torch.tensor(X, dtype=torch.float32) Y = torch.tensor(Y, dtype=torch.int64) |
# Dataset 작성 ds = TensorDataset(X, Y) # 순서로 섞어서 64개씩 데이터를 변환하는 DataLoader 작성 loader = DataLoader(ds, batch_size=64, shuffle=True) |
# 네트워크 구성 net = nn.Sequential( nn.Linear(64, 32), nn.ReLU(), nn.Linear(32, 16), nn.ReLU(), nn.Linear(16, 10) ) |
# 최적화 loss_fn = nn.CrossEntropyLoss() optimizer = optim.Adam(net.parameters()) |
# 최적화 실행 losses = [] for epoch in range(10): running_loss = 0.0 for xx, yy in loader : # xx, yy는 64개만 받는다. y_pred = net(xx) loss = loss_fn(y_pred, yy) optimizer.zero_grad() loss.backward() optimizer.step() running_loss += loss.item() losses.append(running_loss) |
'인공지능 > 파이토치' 카테고리의 다른 글
파이토치 - 신경망의 모듈화 (0) | 2020.07.20 |
---|---|
파이토치 - Dropout과 Batch Normalization (0) | 2020.07.20 |
파이토치 - MLP 구축과 학습 (0) | 2020.07.20 |
파이토치 - 로지스틱 회귀 (0) | 2020.07.20 |
파이토치 - 선형 회귀 모델 (0) | 2020.07.20 |