Цикл подгонки в PyTorch
Один сдвиг весов редко хватает:
с тем же набором примеров цикл
повторяют много раз. На каждом
повторе сначала вызывают метод
zero_grad у объекта
обновления, затем прогон модели,
подсчёт ошибки, обратный проход
и метод step.
Зафиксируем зерно генератора перед созданием слоя, зададим столбец входов, столбец эталона и десять повторений цикла. Выведем ошибку на последнем шаге:
import torch
import torch.nn as nn
torch.manual_seed(42)
model = nn.Linear(1, 1)
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(
model.parameters(), lr=0.01
)
x = torch.tensor([[1.0], [2.0], [3.0]])
y = torch.tensor([[2.0], [4.0], [6.0]])
for _ in range(10):
optimizer.zero_grad()
pred = model(x)
loss = criterion(pred, y)
loss.backward()
optimizer.step()
print(loss) # выведет tensor(0.6060, grad_fn=<MseLossBackward0>)
Зафиксируйте зерно 0
перед линейным слоем
1 на 1.
Для столбцов [[2.0], [4.0]]
и [[4.0], [8.0]]
выполните пять повторений
полного цикла подгонки
со скоростью 0.05.
Выведите ошибку после
последнего повторения.
Перед созданием преобразования
1 на 1 задайте
зерно 7. По таблице
[[1.0], [2.0], [3.0]]
и эталону [[3.0], [5.0], [7.0]]
сделайте восемь одинаковых
циклов обновления со скоростью
0.02. Выведите
итоговое расхождение.
Установите зерно 1
до сборки слоя 1
на 1. Повторите
цикл подгонки три раза
для пары столбцов
[[0.5], [1.5]]
и [[1.0], [3.0]]
при скорости 0.1.
Выведите число ошибки
на финальном повторе.