반응형
Loading Data
- Minibatch Gradient Descent 이론
- Pytorch Dataset and Data Loader 사용법
Data in the Real World
-
복잡한 머신러닝 모델을 학습하려면 엄청난 양의 데이터가 필요하다
-
대부분 데이터셋은 적어도 수십만개의 데이터를 제공한다.
-
엄청난 양의 데이터를 한번에 학습시킬 수 없다. 이유는?
- 너무 느리고
- 하드웨어적으로 불가능하기 때문
-
그렇다면 일부분의 데이터로만 학습하면 어떨까?
Minibatch Gradient Descent
- 전체 데이터를 작은 Minibatch라는 작은 양으로 균일하게 나누어서 minibatch 하나씩 학습하는 방법
- 그러면 컴퓨터가 dataset의 모든 데이터의 cost를 다 계산한 후 gradient descent를 하지 않고 각 minibatch에 있는 데이터의 cost만 계산한 후에 gradient decent를 할 수 있다. -> 컴퓨터에 무리를 덜 준다.
minibatch Gradient Descent : effects
- 업데이트를 좀 더 빠르게 할 수 있다.
- 전체 데이터를 쓰지 않아서 잘못된 방향으로 업데이트를 할 수도 있다.
Pytorch Dataset
-
torch.utils.data.Dataset 상속
-
__len__() : 해당 데이터 셋의 총 데이터 수
-
__getitem__() : 어떤 인덱스(idx)를 받았을 때, 그에 상응하는 입출력 데이터 변환
from torch.utils.data import Dataset
class CustomDataset(Dataset):
def __init__(self):
self.x_data = [[73, 80, 75],
[93, 88, 93],
[89, 91, 90],
[96, 98, 100],
[73, 66, 70]]
self.y_data = [[152], [185], [180], [196], [142]]
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()
Pytorch DataLoader
-
torch.utils.data.DataLoader 사용
-
batch_size
- 각 minibatch의 크기
- 통상적으로 2의 제곱수로 결정한다.
-
shuffle = True
- epoch마다 데이터 셋을 섞어서 데이터가 학습되는 순서를 바꾼다.
from torch.utils.data import DataLoader
dataloader = DataLoader(
dataset,
batch_size = 2, ## minibatch의 크기
shuffle = True ## 데이터 셋을 섞어서 데이터 순서를 기억하지 못하게 함
)
nb_epochs = 20
plot_list = []
for epoch in range(nb_epochs + 1):
for batch_idx, samples in enumerate(dataloader):
x_train, y_train = samples
# H(x) 계산
hypothesis = model(x_train)
# cost 계산
cost = F.mse_loss(hypothesis, 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()
))
plot_list.append(cost.item())
>>>>
Epoch 0/20 Batch 1/3 Cost : 1.294328
Epoch 0/20 Batch 2/3 Cost : 2.731413
Epoch 0/20 Batch 3/3 Cost : 2.611053
Epoch 1/20 Batch 1/3 Cost : 2.285962
Epoch 1/20 Batch 2/3 Cost : 1.871582
Epoch 1/20 Batch 3/3 Cost : 4.009527
Epoch 2/20 Batch 1/3 Cost : 2.522751
...
Epoch 19/20 Batch 3/3 Cost : 2.682846
Epoch 20/20 Batch 1/3 Cost : 0.613732
Epoch 20/20 Batch 2/3 Cost : 2.287714
Epoch 20/20 Batch 3/3 Cost : 4.782553
출처 : www.boostcourse.org/ai214/lecture/42288
반응형
'Study > DL_Basic' 카테고리의 다른 글
[파이토치로 시작하는 딥러닝 기초]06_Softmax Classification (0) | 2020.12.28 |
---|---|
[파이토치로 시작하는 딥러닝 기초]05_ Logistic Regression (0) | 2020.12.22 |
[파이토치로 시작하는 딥러닝 기초]04.01_Multivariable_Linear_regression (0) | 2020.12.21 |
[파이토치로 시작하는 딥러닝 기초]03_Deeper Look at Gradient Descent (0) | 2020.12.21 |
[파이토치로 시작하는 딥러닝 기초]02_Linear Regression (0) | 2020.12.21 |