简而言之:
在pytorch中使用adadelta优化器时,我无法绘制lr /时期曲线,因为optimizer.param_groups[0]['lr']
总是返回相同的值。
详细信息:
Adadelta可以仅使用一阶信息就可以动态适应时间变化,并且 具有超出香草随机梯度下降[1]的最小计算开销。
在pytorch中,Adadelta的源代码在https://pytorch.org/docs/stable/_modules/torch/optim/adadelta.html#Adadelta
由于不需要手动调整学习率,据我所知,在声明优化器后,我们不必设置任何时间表
self.optimizer = torch.optim.Adadelta(self.model.parameters(), lr=1)
检查学习率的方法是
current_lr = self.optimizer.param_groups[0]['lr']
问题在于它总是返回1(初始lr)。
谁能告诉我如何获得真正的学习率,以便我可以画出lr / epch曲线?
答案 0 :(得分:0)
检查:self.optimizer.state
。这使用lr进行了优化,并在优化过程中使用。
在文档中,lr只是:
lr(浮点型,可选):在增量之前缩放增量的系数 已应用 设置为参数(默认值:1.0)
https://pytorch.org/docs/stable/_modules/torch/optim/adadelta.html
编辑:您可能会在self.optimizer.state值中找到acc_delta值,但需要仔细阅读此词典中包含的字典:
dict_with_acc_delta = [self.optimizer.state[i] for i in self.optimizer.state.keys() if "acc_delta" in self.optimizer.state[i].keys()]
acc_deltas = [i["acc_delta"] for i in dict_with_acc_delta]
我有八层,acc_deltas列表中的元素形状如下
[torch.Size([25088]),
torch.Size([25088]),
torch.Size([4096, 25088]),
torch.Size([4096]),
torch.Size([1024, 4096]),
torch.Size([1024]),
torch.Size([102, 1024]),
torch.Size([102])]