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)
def __getitem__(self, idx):
x = torch.FloatTensor(self.x_data[idx])
y = torch.FloatTensor(self.y_data[idx])
return x, y
dataset = CustomDataset()
dataloader = DataLoader(dataset, batch_size=2, shuffle=True)
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
prediction = model(x_train)
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