我正在做一些计算,并希望通过使用Pytorch优化此参数。我没有定义神经网络,所以没有类似的层和东西。只是一个简单的计算序列。我使用torch.nn.Module可以使用Pytorch的优化器。
我的课看起来像这样:
class XTransformer(torch.nn.Module):
def __init__(self, x):
super(ReLUTransformer, self).__init__()
self.x = x
def funky_function(self, m, c):
# do some computations
m = self.x * 2 - m + c
return m, c
def forward(self, m, c):
m, c = self.funky_function(m, c)
return m, c
稍后,我定义并尝试优化此参数x,如下所示:
x = torch.autograd.Variable(x, requires_grad=True)
model = XTransformer(x)
optimizer = torch.optim.SGD(model.parameters(), lr=1e-3)
m, c = smt
loss = loss_func()
for t in range(100):
m , c = model(m, c)
l = loss(m, true)
optimizer.zero_grad()
l.backward()
optimizer.step()
我不知道该怎么办。我收到“ ValueError:优化器有一个空的参数列表”错误。当我只将[x]作为优化器的参数时,它不会为我更新和更改x。我该怎么办?
答案 0 :(得分:1)
您需要注册x
作为参数,以使PyTorch知道这应该是可训练的参数。可以通过在初始化期间将其定义为nn.Parameter
来完成
def __init__(self, x):
super(ReLUTransformer, self).__init__()
self.x = torch.nn.Parameter(x)