简而言之:
在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

最佳答案

检查:self.optimizer.state。这是用lr优化的,并用于优化过程。
从文档来看,lr只是:
lr(float,可选):在其之前缩放增量的系数
应用
到参数(默认值: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中的“实际”学习率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53405934/

10-12 23:24