Проверка на отложенных в PyTorch
На отложенных примерах веса
не подстраивают: нужно лишь
узнать ошибку на данных,
которых не было в подгонке.
Модуль переводят методом
eval, а прогон выполняют
внутри блока no_grad,
чтобы не строить граф для
градиента и не менять параметры.
Сначала несколько раз обновим веса по обучающей таблице, затем подадим другую пару чисел и выведем ошибку без шага объекта обновления:
import torch
import torch.nn as nn
torch.manual_seed(7)
model = nn.Linear(2, 1)
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(
model.parameters(), lr=0.01
)
train_x = torch.tensor(
[[1.0, 0.0], [0.0, 1.0]]
)
train_y = torch.tensor([[1.0], [2.0]])
for _ in range(3):
for p in model.parameters():
p.grad = None
pred = model(train_x)
loss = criterion(pred, train_y)
loss.backward()
optimizer.step()
valid_x = torch.tensor([[1.0, 1.0]])
valid_y = torch.tensor([[1.5]])
model.eval()
with torch.no_grad():
pred = model(valid_x)
valid_loss = criterion(pred, valid_y)
print(valid_loss) # выведет tensor(2.1935)
Сделайте три шага подгонки
по таблице [[1.0, 2.0]]
с эталоном [[2.0]]
для линейного слоя 2
на 1. Затем переведите
модуль в состояние для
чистого прогона, подайте
строку [[0.0, 1.0]]
с эталоном [[1.0]]
внутри блока без записи
градиента и выведите
расхождение без обновления
весов.
Обучите преобразование
1 на 1 на двух
парах (1.0, 2.0)
и (2.0, 4.0),
затем оцените качество
на отложенной паре
(3.0, 5.0): включите
режим готового решения,
считайте ошибку в блоке
без графа и выведите её.
Параметры на проверке
не сдвигайте.
После двух шагов подгонки
по строкам [[1.0, 0.0]]
и [[0.0, 1.0]]
с эталонами [[0.5]]
и [[1.5]]
переключите модуль для
оценки на новых данных.
На строке [[1.0, 1.0]]
и эталоне [[1.0]]
найдите расхождение только
для просмотра и выведите
одно число.