edwith의 <파이토치로 시작하는 딥러닝 기초> 'Lab-o4-2 Loading Data' 강의를 정리하였습니다.
Lab-04-2 Loading Data
Minibatch Gradient Descent
수 많은 데이터를 한 번에 학습하면 시간이 오래 걸리며, 컴퓨터에 무리가 간다. 이 문제를 해결하기 위해, 딥러닝에서는 전체 데이터를 'minibatch'로 양을 균일하게 나눈 뒤, minibatch를 하나씩 학습한다.
Minibatch Gradient Descent Effects
- 업데이트를 빠르게 할 수 있음
- 전체 데이터를 쓰지 않기 때문에, 잘못된 방향으로 업데이트 할 수 있음.
cost가 매끄럽게 줄어들지 않고, 거칠게 줄어들게 됨.
PyTorch DataSet
from torch.utils.data import Dataset
class CustomDataset(Dataset):
def __init__(self):
self.x_data = [[73, 80, 75],
[93, 99, 93]]
self.y_data = [[152], [185]]
def __len__(self):
return len(self.x_data)
def __getitem__(self, idx):
x = torch.FloatTensor(self.x_data[idx])
y = torch.FloatTensor(self.y_data[idx])
return x, y
dataset = CustomDataset()
- torch.utils.data.Dataset 상속
- __len__() : 데이터셋의 총 데이터 수
- __getitem__() : 어떤 인덱스 idx를 받았을 때, 이에 상응하는 입출력 데이터 변환
PyTorch DataLoader
from terch.utils.data import Dataloader
dataloader = Dataloader(
dataset,
batch_size = 2,
shuffle = True,
)
- torch.utils.data.DataLoader 사용
- batch_size = 2
- 각 minibatch의 크기 (한 번의 배치 안에 있는 샘플 사이즈)
- 통상적으로 2의 제곱수로 설정함 (예: 16, 32, 64...)
- shuffle = True
- Epoch 마다 데이터셋을 섞어, 데이터가 학습되는 순서를 바꿈
- 학습할 때 항상 True로 설정하는 것을 권장함
nb_epochs = 20
for epoch in range(nb_epochs +1):
for batch_idx, smaples in enumerate(dataloader):
x_train, y_train = samples
#H(x) 계산
prediction = model(x_train)
# cost 계산
cost = F.mse_loss(prediction, y_train)
# cost로 H(x) 개선
optimizer.zero_grad()
cost.backward()
optimizer.step()
print('Epoch {:4d}/{} Batch {}/{} Cost : {:.6f}'.format(
epoch, nb_epochs, batch_idx+1, len(dataloader),
cost.item()
))
- enumerate(dataloader)
- minibatch 인덱스와 데이터를 받음
- len(dataloader)
- 한 epoch 당 minibatch 개수
참고자료
PyTorch Data Loading and Processing tutorial
'20. 인공지능과 딥러닝' 카테고리의 다른 글
[PyTorch로 시작하는 딥러닝 기초] 08. Perceptron (0) | 2020.02.08 |
---|---|
[PyTorch로 시작하는 딥러닝 기초] 05. Logistic Regression (0) | 2020.02.02 |
[세미나] AI Summit 2019 (0) | 2019.11.29 |
[인공지능을 위한 선형대수] 선형대수 개념 (0) | 2019.11.17 |
[인공지능을 위한 선형대수] 고유값 분해와 선형변환 (0) | 2019.10.26 |
댓글