python - 如何在pytorch中打印Adadelta中的 "actual"学习率

标签 python optimization neural-network deep-learning pytorch

简而言之:

在 pytorch 中使用 adadelta 优化器时,我无法绘制 lr/epoch 曲线,因为 optimizer.param_groups[0]['lr'] 总是返回相同的值。

详细说明:

Adadelta 可以仅使用一阶信息随时间动态适应,并且 具有超越 Vanilla 随机梯度下降 [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

最佳答案

检查:self.optimizer.state。这是用 lr 优化的,并在优化过程中使用。

根据文档,lr 只是:

lr (float, optional): coefficient that scale delta before it is applied to the parameters (default: 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])]

关于python - 如何在pytorch中打印Adadelta中的 "actual"学习率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53405934/

相关文章:

python - Keras - 操作系统错误 : cannot identify image file

javascript - 反向传播训练卡住了

python - GetSearch还是SreamListener? Python

python - 从 input() 打印结果时出现 TypeError

php - 与 C 相比,循环/赋值速度变慢的原因是什么?

Linux PDF/Postscript 优化

Python:如何将文件保存在不同的目录中?

python - **kwargs 的目的和用途是什么?

c++ - 至强的 gcc 优化标志?

python - Keras:使用模型的一阶和二阶导数之和作为最终输出