python - group.setdefault() 在这种情况下做什么?
问题描述
我查看了文档 [ https://docs.python.org/2/library/stdtypes.html#dict.setdefault]
设置默认值(键 [,默认值]):
如果键在字典中,则返回其值。
如果不是,则插入值为默认值的键并返回默认值。默认默认为无
但是,看到 group.setdefault() 的输出没有保存在变量中。我觉得这很奇怪。更具体地说,此代码包含在调度程序类的定义中。我正在使用 pytorch,因为我是新手,所以我很难理解代码。那么任何可以解决这个问题的 python/pytorch 忍者?
这是该类的简化版本:
class BaseLRScheduler(_LRScheduler):
def __init__(self, optimizer, last_epoch=-1):
self.optimizer = optimizer
if last_epoch == -1:
for group in optimizer.param_groups:
group.setdefault('initial_lr', group['lr'])
self.base_lrs = list(
map(lambda group: group['initial_lr'], optimizer.param_groups))
self.step(last_epoch + 1)
self.last_epoch = last_epoch
这对我来说是代码中有问题的部分:
if last_epoch == -1:
for group in optimizer.param_groups:
group.setdefault('initial_lr', group['lr'])
解决方案
函数返回值的事实并不强制使用该值。
在这种情况下,
如果'initial_lr'
在字典中,则不会发生任何事情,但是,
如果'initial_lr'
不在字典中,则将其插入值为group['lr']
.
例如:
d = {'a': 1}
d.setdefault('a', 2)
print(d)
d.setdefault('b', 3)
print(d)
输出
{'a': 1}
{'a': 1, 'b': 3}
推荐阅读
- javascript - 使用 eslint-typescript 和 Express 出现任何值错误时不安全的成员访问 .body
- git - 如何解决“推送”问题?
- command - SCP 命令在空手道项目中不起作用 - 它引发命令错误:无法运行程序 scp.exe:CreateProcess 错误 = 2
- oracle - 在 Oracle 中调用以 $ 字符开头的值
- linux - 使用 cut 组合 csv 文件以选择一列并粘贴以组合文件
- python - 如何在 Django Rest Framework 中为基于函数的视图添加过滤
- ios - 过多的脏内存
- flutter - 如何实现自定义微调器以在颤动中选择时间
- css - 如何通过 select2 显示完整的大文本选项(没有水平滚动)?参考图片
- php - 具有多态关系的 Laravel 全局访问