1

我正在尝试用 hydra 实例化对象,我有一个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})
4

2 回答 2

0

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

在文件中使用命名参数(又名关键字参数)yaml

_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"

有关更多信息,请参阅有关使用 Hydra 实例化对象的文档。

于 2021-11-09T04:09:34.697 回答
0

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

transform = hydra.utils.instantiate(config, _convert_="partial")
于 2021-11-22T12:51:58.370 回答