【问题标题】:Using Torch for numerical optimization, getting optimizer got an empty parameter list,使用 Torch 进行数值优化,得到优化器得到一个空的参数列表,
【发布时间】:2019-12-13 16:52:26
【问题描述】:

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

【问题讨论】:

    标签: python machine-learning optimization pytorch


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-12-10
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      相关资源
      最近更新 更多