对象的递归实例化 - 九头蛇
recursive Instantiating of objects- hydra
我正在尝试实例化变形金刚的组合。
在本机 Python 中,它看起来像这样:
import albumentations as A
transforms = A.Compose([
A.Rotate(limit=10),
A.ToGray(p=1),
])
print(transforms)
输出:
Compose([
Rotate(always_apply=False, p=0.5, limit=(-10, 10), interpolation=1, border_mode=4, value=None, mask_value=None),
ToGray(always_apply=False, p=1),
], p=1.0, bbox_params=None, keypoint_params=None, additional_targets={})
我正在尝试用 Hydra 实例化相同的转换,但由于某种原因,递归实例化失败,只实例化了转换列表,但没有实例化外部 ( A.Compose
) 函数。
from omegaconf import OmegaConf
import hydra
conf = OmegaConf.create({"compose": {"_traget_": "albumentations.Compose", "_recursive_": True, "transforms": [{"_target_": "albumentations.Rotate", "limit": 10}, {"_target_": "albumentations.ToGray", "p": 1}]}})
print(OmegaConf.to_yaml(conf))
输出:
compose:
_traget_: albumentations.Compose
_recursive_: true
transforms:
- _target_: albumentations.Rotate
limit: 10
- _target_: albumentations.ToGray
p: 1
但是实例化失败:
print(hydra.utils.instantiate(conf.compose))
输出:
{'_traget_': 'albumentations.Compose', 'transforms': [Rotate(always_apply=False, p=0.5, limit=(-10, 10), interpolation=1, border_mode=4, value=None, mask_value=None), ToGray(always_apply=False, p=1)]}
- 此代码在 Hydra 1.1 上不 运行 并导致以下错误:
Traceback (most recent call last):
File "1.py", line 30, in <module>
print(hydra.utils.instantiate(conf.compose))
File "/home/omry/dev/hydra/hydra/utils.py", line 95, in instantiate
target = _get_target_type(config, kwargs)
File "/home/omry/dev/hydra/hydra/_internal/utils.py", line 640, in _get_target_type
raise InstantiationException("Unable to determine target")
原因是您的第一个节点没有 _target_
字段,而是有一个 _traget_
。
更正此问题后,它可以正常工作。
我正在尝试实例化变形金刚的组合。
在本机 Python 中,它看起来像这样:
import albumentations as A
transforms = A.Compose([
A.Rotate(limit=10),
A.ToGray(p=1),
])
print(transforms)
输出:
Compose([
Rotate(always_apply=False, p=0.5, limit=(-10, 10), interpolation=1, border_mode=4, value=None, mask_value=None),
ToGray(always_apply=False, p=1),
], p=1.0, bbox_params=None, keypoint_params=None, additional_targets={})
我正在尝试用 Hydra 实例化相同的转换,但由于某种原因,递归实例化失败,只实例化了转换列表,但没有实例化外部 ( A.Compose
) 函数。
from omegaconf import OmegaConf
import hydra
conf = OmegaConf.create({"compose": {"_traget_": "albumentations.Compose", "_recursive_": True, "transforms": [{"_target_": "albumentations.Rotate", "limit": 10}, {"_target_": "albumentations.ToGray", "p": 1}]}})
print(OmegaConf.to_yaml(conf))
输出:
compose:
_traget_: albumentations.Compose
_recursive_: true
transforms:
- _target_: albumentations.Rotate
limit: 10
- _target_: albumentations.ToGray
p: 1
但是实例化失败:
print(hydra.utils.instantiate(conf.compose))
输出:
{'_traget_': 'albumentations.Compose', 'transforms': [Rotate(always_apply=False, p=0.5, limit=(-10, 10), interpolation=1, border_mode=4, value=None, mask_value=None), ToGray(always_apply=False, p=1)]}
- 此代码在 Hydra 1.1 上不 运行 并导致以下错误:
Traceback (most recent call last):
File "1.py", line 30, in <module>
print(hydra.utils.instantiate(conf.compose))
File "/home/omry/dev/hydra/hydra/utils.py", line 95, in instantiate
target = _get_target_type(config, kwargs)
File "/home/omry/dev/hydra/hydra/_internal/utils.py", line 640, in _get_target_type
raise InstantiationException("Unable to determine target")
原因是您的第一个节点没有 _target_
字段,而是有一个 _traget_
。
更正此问题后,它可以正常工作。