【问题标题】:Pytorch Custom Optimizer got an empty parameter listPytorch 自定义优化器得到一个空的参数列表
【发布时间】:2020-04-15 20:59:51
【问题描述】:

这里是新的。我正在尝试在 PyTorch 中创建一个自定义优化器,其中反向传播发生在元 RL 策略中,该策略接收模型参数并输出所需的模型参数。但是,我看到了上述错误。我的模型在 Adam 和 SGD 上运行良好,但不是我的优化器。

代码:

class MetaBackProp(torch.optim.Optimizer):
    def __init__(self, params):

        self.param_shape_list = np.array([])
        for param in list(params):
            np.append(self.param_shape_list, list(param.size()))

        pseudo_lr = 1e-4
        pseudo_defaults = dict(lr=pseudo_lr)
        length = 100 #TODO: get shape, flatten, multiply...
        self.policy = AEPolicy(length)
        self.policy_optim = torch.optim.Adam(self.policy.parameters(), lr=pseudo_lr)
        super(MetaBackProp, self).__init__(params, pseudo_defaults)

    def step(self, closure=None):
        params = torch.cat([p.view(-1) for p in self.param_groups])
        self.policy_optim.zero_grad()
        quit()

追溯:

Traceback (most recent call last):
  File "main.py", line 6, in <module>
    gan = CycleGAN()
  File "/home/ai/Projects_v2/R/cycle_gan.py", line 32, in __init__
    self.discriminator2_optim = MetaBackProp(self.discriminator2.parameters())
  File "/home/ai/Projects_v2/R/lr_schedule.py", line 34, in __init__
    super(MetaBackProp, self).__init__(params, pseudo_defaults)
  File "/home/ai/anaconda3/lib/python3.7/site-packages/torch/optim/optimizer.py", line 46, in __init__
    raise ValueError("optimizer got an empty parameter list")
ValueError: optimizer got an empty parameter list

【问题讨论】:

    标签: python optimization pytorch generative-adversarial-network


    【解决方案1】:

    您使用self.discriminator2.parameters() 检索参数,它返回一个迭代器。在您的构造函数中,您将它们转换为 for 循环的列表:

    for param in list(params):
    

    这会消耗迭代器,但您将相同的迭代器传递给基类的构造函数,因此它根本不包含任何参数。

    super(MetaBackProp, self).__init__(params, pseudo_defaults)
    

    您可以使用从迭代器创建的列表,而不是传递迭代器,因为参数只需要是可迭代的,列表是。

    # Convert parameters to a list to allow multiple iterations
    params = list(params)
    for param in params:
    

    【讨论】:

      猜你喜欢
      • 2019-07-07
      • 1970-01-01
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      • 2022-06-19
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      相关资源
      最近更新 更多