首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >脸书九头蛇+和++运营商的区别

脸书九头蛇+和++运营商的区别
EN

Data Science用户
提问于 2022-03-04 11:28:10
回答 1查看 334关注 0票数 1

如果您已经遵循了“深度学习”中的一些最佳实践,那么Facebook的九头蛇可能是您熟悉的名称。通过九头蛇文件,我遇到了两个重要的运算符+和++。文件中提到这些运算符的使用情况如下:

代码语言:javascript
复制
Appending a config value : +foo.bar=value
Appending or overriding a config value : ++foo.bar=value

我需要一些帮助来理解这些操作符,因为在代码中使用它们在技术上并没有影响整个输出。

EN

回答 1

Data Science用户

回答已采纳

发布于 2022-03-06 15:20:28

假设我们有以下简单的水力应用程序:

代码语言:javascript
复制
├── config.yaml
└── my_app.py
代码语言:javascript
复制
# my_app.py
import hydra
from omegaconf import OmegaConf, DictConfig

@hydra.main(".", "config")
def app(cfg: DictConfig):
    print(OmegaConf.to_yaml(cfg))

if __name__ == "__main__":
    app()
代码语言:javascript
复制
# config.yaml
a:
  b: c
代码语言:javascript
复制
$ python my_app.py
a:
  b: c

让我们看一下您链接的docs页面中的四种“修改Config对象”的方法:

  • 重写配置值:foo.bar=value
  • 附加配置值:+foo.bar=value
  • 追加或重写配置值:++foo.bar=value
  • 删除配置值:~foo.bar~foo.bar=value

重写配置值:

代码语言:javascript
复制
$ python my_app.py a.b=y
a:
  b: y
代码语言:javascript
复制
$ python my_app.py a.x=y
Could not override 'a.x'.
To append to your config use +a.x=y
Key 'x' is not in struct
    full_key: a.x
    object_type=dict

附加一个配置值:

代码语言:javascript
复制
$ python my_app.py +a.b=y
Could not append to config. An item is already at 'a.b'.
Either remove + prefix: 'a.b=y'
Or add a second + to add or override 'a.b': '++a.b=y'
...
代码语言:javascript
复制
$ python my_app.py +a.x=y
a:
  b: c
  x: y

附加或重写配置值:

代码语言:javascript
复制
$ python my_app.py ++a.b=y
a:
  b: y
代码语言:javascript
复制
$ python my_app.py ++a.x=y
a:
  b: c
  x: y

删除配置值:

代码语言:javascript
复制
$ python my_app.py ~a.b
a: {}
代码语言:javascript
复制
$ python my_app.py ~a.b=c
a: {}
代码语言:javascript
复制
$ python my_app.py ~a.b=y
Could not delete from config. The value of 'a.b' is c and not y.
...
代码语言:javascript
复制
$ python my_app.py ~a.x
Could not delete from config. 'a.x' does not exist.
...
代码语言:javascript
复制
$ python my_app.py ~a.x=y
Could not delete from config. 'a.x' does not exist.

概括地说:

  • 只有在配置中已经存在给定的键时,才能重写配置值(foo.bar=value)。
  • 附加配置值(+foo.bar=value)仅在配置中未显示给定键时才能工作。
  • 附加或重写配置值(++foo.bar=value),无论配置中是否存在密钥
  • 只有当给定的键或键值对在配置中时,才能删除配置值(~foo.bar~foo.bar=value)。
票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/108753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档