如何从 hydra 配置文件传递字典元素

How to pass dictionary elements from hydra config file

我正在尝试使用 hydra 实例化对象,我在配置文件中使用了 class torchio.transforms.RemapLabels

_target_: torchio.transforms.RemapLabels

问题是 torchio.transforms.RemapLabels 将字典元素作为输入,我如何从我的 hydra 配置文件中传递这些元素? (config.yaml)?

我在实例化时遇到错误:

TypeError: Error instantiating 'torchio.transforms.preprocessing.label.remap_labels.RemapLabels' : __init__() missing 1 required positional argument: 'remapping'

重新映射标签的用法示例:

transform = torchio.RemapLabels({2:1, 4:3, 6:5, 8:7})

有两种选择:您可以将输入作为位置参数或命名参数传递。

在您的 yaml 文件中使用命名参数(a.k.a. 关键字参数):

_target_: torchio.transforms.RemapLabels
remapping:
  2: 1
  4: 3
  6: 5
  8: 7
masking_method: "Anterior"

或者,使用 json 风格的地图:

_target_: torchio.transforms.RemapLabels
remapping: {2: 1, 4: 3, 6: 5, 8: 7}
masking_method: "Anterior"

在您的 yaml 文件中使用位置参数:

_target_: torchio.transforms.RemapLabels
_args_:
  - 2: 1
    4: 3
    6: 5
    8: 7
  - "Anterior"

或者,等价地:

_target_: torchio.transforms.RemapLabels
_args_:
  - {2: 1, 4: 3, 6: 5, 8: 7}
  - "Anterior"

有关详细信息,请参阅 Instantiating objects with Hydra 上的文档。

除了 Jasha 所说的之外,如果您要定位的 class 的构造函数手动检查其参数的类型 (if isinstance(remapping, dict):) 那么您应该指示 Hydra 将配置数据转换为字典:

transform = hydra.utils.instantiate(config, _convert_="partial")