Я пытаюсь изучить некоторый PyTorch и ссылаюсь на это обсуждение здесь
Автор предоставляет минимальный рабочий фрагмент кода, который иллюстрирует, как вы можете использовать PyTorch для поиска неизвестноголинейная функция, которая была загрязнена случайным шумом.
Этот код работает нормально для меня.
Однако, когда я изменяю функцию так, что я хочу t = X ^ 2, параметр непохоже, сходятся.
import torch
import torch.nn as nn
import torch.optim as optim
from torch.autograd import Variable
# Let's make some data for a linear regression.
A = 3.1415926
b = 2.7189351
error = 0.1
N = 100 # number of data points
# Data
X = Variable(torch.randn(N, 1))
# (noisy) Target values that we want to learn.
t = X * X + Variable(torch.randn(N, 1) * error)
# Creating a model, making the optimizer, defining loss
model = nn.Linear(1, 1)
optimizer = optim.SGD(model.parameters(), lr=0.05)
loss_fn = nn.MSELoss()
# Run training
niter = 50
for _ in range(0, niter):
optimizer.zero_grad()
predictions = model(X)
loss = loss_fn(predictions, t)
loss.backward()
optimizer.step()
print("-" * 50)
print("error = {}".format(loss.data[0]))
print("learned A = {}".format(list(model.parameters())[0].data[0, 0]))
print("learned b = {}".format(list(model.parameters())[1].data[0]))
Когда я выполняю этот код, новые параметры A и b кажутся случайными, поэтому он не сходится.Я думаю, что это должно сходиться, потому что вы можете аппроксимировать любую функцию с помощью функции наклона и смещения.Моя теория заключается в том, что я использую PyTorch неправильно.
Может ли кто-нибудь определить проблему с моей t = X * X + Variable(torch.randn(N, 1) * error)
строкой кода?