【问题标题】:How to print the "actual" learning rate in Adadelta in pytorch如何在pytorch中打印Adadelta中的“实际”学习率
【发布时间】:2019-04-23 15:51:11
【问题描述】:

简而言之

在 pytorch 中使用 adadelta 优化器时,我无法绘制 lr/epoch 曲线,因为 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

【问题讨论】:

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


    【解决方案1】:

    检查:self.optimizer.state。这使用 lr 进行了优化,并用于优化过程。

    从文档中 lr 只是:

    lr (float, optional): 在 delta 之前缩放 delta 的系数 应用 到参数(默认: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])]
    

    【讨论】:

    • 但是...self.optimizer.state['acc_delta'] 在每个 epoch 中总是返回一个空字典 {}。
    猜你喜欢
    • 2021-09-27
    • 2019-01-18
    • 1970-01-01
    • 2019-09-03
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多