我看了文档[https://docs.python.org/2/library/stdtypes.html#dict.setdefault]
setdefault(key [,default]):
如果键在字典中,请返回其值。
如果没有,请插入具有默认值的密钥并返回默认值。默认默认为无
但是,看到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'])
答案 0 :(得分:0)
函数返回值的事实并不意味着必须使用该值。
在这种情况下,
如果'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}