使用Torch进行数值优化,让优化器得到一个空的参数列表,

时间:2019-12-13 16:52:26

标签: python machine-learning optimization pytorch

我正在做一些计算,并希望通过使用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。我该怎么办?

1 个答案:

答案 0 :(得分:1)

您需要注册x作为参数,以使PyTorch知道这应该是可训练的参数。可以通过在初始化期间将其定义为nn.Parameter来完成

    def __init__(self, x):
        super(ReLUTransformer, self).__init__()
        self.x = torch.nn.Parameter(x)