如何设置 hydra config 以接受自定义枚举?
How to set up hydra config to accept a custom enum?
如何设置我的 hydra 配置以接受自定义枚举?具体来说,我遵循了 Structured Config Schema tutorial.
我有一个数据类配置:
@dataclass_validate
@dataclass
class CustomConfig:
custom_enum: CustomEnum
使用自定义枚举:
class CustomEnum(str, Enum):
ENUM1 = "enum1"
ENUM2 = "enum2"
来自 运行 的错误 python my_app.py
Error merging 'data/config' with schema
Invalid value 'enum1', expected one of [ENUM1, ENUM2]
full_key: custom_enum
object_type=CustomConfig
其中 my_app.py
只是:
cs = ConfigStore.instance()
cs.store(name="base_config", node=Config)
cs.store(group="data", name="config", node=CustomConfig)
@hydra.main(config_path=".", config_name="config")
def setup_config(cfg: Config) -> None:
print(OmegaConf.to_yaml(cfg))
而data/config.yaml
中的配置只是
custom_enum: enum1
注意错误消息:Invalid value 'enum1', expected one of [ENUM1, ENUM2]
。
也就是说,在您的 data/config.yaml
文件中,您应该使用 ENUM1
而不是 enum1
。
如何设置我的 hydra 配置以接受自定义枚举?具体来说,我遵循了 Structured Config Schema tutorial.
我有一个数据类配置:
@dataclass_validate
@dataclass
class CustomConfig:
custom_enum: CustomEnum
使用自定义枚举:
class CustomEnum(str, Enum):
ENUM1 = "enum1"
ENUM2 = "enum2"
来自 运行 的错误 python my_app.py
Error merging 'data/config' with schema
Invalid value 'enum1', expected one of [ENUM1, ENUM2]
full_key: custom_enum
object_type=CustomConfig
其中 my_app.py
只是:
cs = ConfigStore.instance()
cs.store(name="base_config", node=Config)
cs.store(group="data", name="config", node=CustomConfig)
@hydra.main(config_path=".", config_name="config")
def setup_config(cfg: Config) -> None:
print(OmegaConf.to_yaml(cfg))
而data/config.yaml
中的配置只是
custom_enum: enum1
注意错误消息:Invalid value 'enum1', expected one of [ENUM1, ENUM2]
。
也就是说,在您的 data/config.yaml
文件中,您应该使用 ENUM1
而不是 enum1
。