如何在pytorch中打印Adadelta中的“实际”学习率

时间:2018-11-21 05:47:36

标签: python optimization neural-network deep-learning pytorch

简而言之

在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曲线?

[1] https://arxiv.org/pdf/1212.5701.pdf

1 个答案:

答案 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])]