1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| import numpy as np import torch.nn as nn import torch from torch.utils.data import TensorDataset from torch.utils.data import DataLoader import torch.nn.functional as F
inputs = torch.tensor(np.array( [[109.4144, 11.2775, 32.4521], [2.0002, 47.0248, 49.9469], [27.1528, 57.8907, 91.2076], [44.8227, 71.6239, 64.0752], [66.0968, 92.5966, 94.0775], [59.6257, 76.9701, 92.1656], [8.1551, 1.7426, 10.5297], [112.6036, 47.2793, 95.4221], [3.2212, 61.8274, 115.9187], [35.0351, 110.6133, 66.6992], [8.8387, 21.8008, 50.0480], [68.7698, 59.9815, 12.0230], [111.3881, 90.3050, 62.1327], [101.7462, 115.7447, 33.4925], [27.7659, 54.5803, 105.3599]], dtype='float32'))
targets = torch.tensor(np.array( [[28.1090, 45.0061], [29.0839, 6.4205], [35.2633, 44.1196], [29.5371, 6.8457], [7.4298, 36.1434], [6.6296, 47.1809], [49.9750, 49.9321], [34.1796, 16.6732], [46.8875, 7.6084], [23.0442, 42.2229], [29.7401, 13.4199], [3.0854, 21.4550], [47.6801, 49.1518], [18.7320, 18.4418], [34.2725, 25.8721]], dtype='float32'))
train_ds = TensorDataset(inputs, targets)
batch_size = 5 train_dl = DataLoader(train_ds, batch_size, shuffle=True)
model = nn.Linear(3, 2)
loss_fn = F.mse_loss loss = loss_fn(model(inputs), targets)
opt = torch.optim.SGD(model.parameters(), lr=1e-5)
def fit(num_epochs, model, loss_fn, opt): for epoch in range(num_epochs): for xb, yb in train_dl: pred = model(xb) loss = loss_fn(pred, yb) loss.backward() opt.step() opt.zero_grad() if (epoch+1) % 10 == 0: print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))
fit(100, model, loss_fn, opt)
|