03-07 커스텀 데이터셋(Custom Dataset)

박건·2023년 9월 6일
0

1. Custom Dataset으로 선형회귀 구현


import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim

from torch.utils.data import Dataset
from torch.utils.data import DataLoader
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)

    # 인덱스를 입력받아 그에 맵핑되는 입출력 데이터를 파이토치의 Tensor 형태로 변환
    def __getitem__(self, idx):
        x = torch.FloatTensor(self.x_data[idx])
        y = torch.FloatTensor(self.y_data[idx])
        return x, y
# dataset, dataloader 설정
dataset = CustomDataset()
dataloader = DataLoader(dataset, batch_size=2, shuffle=True)
# 모델, optimizer 설정
model = nn.Linear(3,1)
optimizer = optim.SGD(model.parameters(), lr=1e-5)
nb_epochs = 20
for epoch in range(nb_epochs + 1):
    for batch_idx, samples in enumerate(dataloader):
        x_train, y_train = samples

        # H(x)계산
        prediction = model(x_train)

        # cost계산
        cost = F.mse_loss(y_train, prediction)

        # 최적화
        optimizer.zero_grad()
        cost.backward()
        optimizer.step()

        print('Epoch {:4d}/{} Batch {}/{} Cost: {:.6f}'.format(
        epoch, nb_epochs, batch_idx+1, len(dataloader),
        cost.item()
        ))
Epoch    0/20 Batch 1/3 Cost: 76210.570312
Epoch    0/20 Batch 2/3 Cost: 13272.722656
Epoch    0/20 Batch 3/3 Cost: 3698.457031
Epoch    1/20 Batch 1/3 Cost: 1630.770752
Epoch    1/20 Batch 2/3 Cost: 1177.995361
Epoch    1/20 Batch 3/3 Cost: 296.558929
Epoch    2/20 Batch 1/3 Cost: 59.825790
Epoch    2/20 Batch 2/3 Cost: 25.154078
Epoch    2/20 Batch 3/3 Cost: 0.751194
Epoch    3/20 Batch 1/3 Cost: 8.963369
Epoch    3/20 Batch 2/3 Cost: 5.411639
Epoch    3/20 Batch 3/3 Cost: 1.024378
Epoch    4/20 Batch 1/3 Cost: 5.778013
Epoch    4/20 Batch 2/3 Cost: 2.332545
Epoch    4/20 Batch 3/3 Cost: 9.504937
Epoch    5/20 Batch 1/3 Cost: 4.529143
Epoch    5/20 Batch 2/3 Cost: 4.497801
Epoch    5/20 Batch 3/3 Cost: 2.600954
Epoch    6/20 Batch 1/3 Cost: 1.989282
Epoch    6/20 Batch 2/3 Cost: 11.089597
Epoch    6/20 Batch 3/3 Cost: 2.557530
Epoch    7/20 Batch 1/3 Cost: 6.111534
Epoch    7/20 Batch 2/3 Cost: 3.437426
Epoch    7/20 Batch 3/3 Cost: 1.501874
Epoch    8/20 Batch 1/3 Cost: 6.245165
Epoch    8/20 Batch 2/3 Cost: 3.291531
Epoch    8/20 Batch 3/3 Cost: 2.179156
Epoch    9/20 Batch 1/3 Cost: 3.936078
Epoch    9/20 Batch 2/3 Cost: 4.682826
Epoch    9/20 Batch 3/3 Cost: 4.805338
Epoch   10/20 Batch 1/3 Cost: 5.641068
Epoch   10/20 Batch 2/3 Cost: 1.995391
Epoch   10/20 Batch 3/3 Cost: 9.160468
Epoch   11/20 Batch 1/3 Cost: 4.486059
Epoch   11/20 Batch 2/3 Cost: 2.722907
Epoch   11/20 Batch 3/3 Cost: 6.136234
Epoch   12/20 Batch 1/3 Cost: 1.665643
Epoch   12/20 Batch 2/3 Cost: 11.434801
Epoch   12/20 Batch 3/3 Cost: 2.385464
Epoch   13/20 Batch 1/3 Cost: 6.065906
Epoch   13/20 Batch 2/3 Cost: 3.424597
Epoch   13/20 Batch 3/3 Cost: 1.474289
Epoch   14/20 Batch 1/3 Cost: 5.252694
Epoch   14/20 Batch 2/3 Cost: 2.288125
Epoch   14/20 Batch 3/3 Cost: 8.705633
Epoch   15/20 Batch 1/3 Cost: 2.747050
Epoch   15/20 Batch 2/3 Cost: 4.949570
Epoch   15/20 Batch 3/3 Cost: 9.298424
Epoch   16/20 Batch 1/3 Cost: 4.481892
Epoch   16/20 Batch 2/3 Cost: 2.721481
Epoch   16/20 Batch 3/3 Cost: 6.167268
Epoch   17/20 Batch 1/3 Cost: 1.470659
Epoch   17/20 Batch 2/3 Cost: 4.983219
Epoch   17/20 Batch 3/3 Cost: 8.641551
Epoch   18/20 Batch 1/3 Cost: 3.216893
Epoch   18/20 Batch 2/3 Cost: 5.757488
Epoch   18/20 Batch 3/3 Cost: 2.719913
Epoch   19/20 Batch 1/3 Cost: 0.733265
Epoch   19/20 Batch 2/3 Cost: 5.267062
Epoch   19/20 Batch 3/3 Cost: 8.847212
Epoch   20/20 Batch 1/3 Cost: 3.180638
Epoch   20/20 Batch 2/3 Cost: 4.039215
Epoch   20/20 Batch 3/3 Cost: 6.242602
profile
예비대학원생

0개의 댓글