首页 > 解决方案 > 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'])

标签: pythonpython-3.xpytorch

解决方案


函数返回值的事实并不强制使用该值。

在这种情况下,
如果'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}

推荐阅读