新來的。我正在嘗試在 PyTorch 中創(chuàng)建一個自定義優(yōu)化器,其中反向傳播發(fā)生在元 RL 策略中,該策略接收模型參數(shù)并輸出所需的模型參數(shù)。但是,我看到了上述錯誤。我的模型在 Adam 和 SGD 上運行良好,但不是我的優(yōu)化器。代碼: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
1 回答

侃侃無極
TA貢獻2051條經(jīng)驗 獲得超10個贊
您使用 檢索參數(shù)self.discriminator2.parameters()
,它返回一個迭代器。在您的構(gòu)造函數(shù)中,您將它們轉(zhuǎn)換為 for 循環(huán)的列表:
for param in list(params):
這會消耗迭代器,但是您將相同的迭代器傳遞給基類的構(gòu)造函數(shù),因此它根本不包含任何參數(shù)。
super(MetaBackProp, self).__init__(params, pseudo_defaults)
您可以使用從迭代器創(chuàng)建的列表,而不是傳遞迭代器,因為參數(shù)只需要是可迭代的,列表是。
# Convert parameters to a list to allow multiple iterations
params = list(params)
for param in params:
添加回答
舉報
0/150
提交
取消