1

我在 Python 项目中使用hydra 。我的 yaml 配置文件包含以下几行:

now_dir: ${now:%Y-%m-%d}/${now:%H-%M-%S}
hydra:
  run:
    dir: ./hydra_outputs/${now_dir}

在我的代码中,我想获取 hydra 用于创建其输出文件夹结构的日期和时间。如果 hydra 有一个内置函数可以返回一个str或一个Datetime包含从${now:%Y-%m-%d}/${now:%H-%M-%S}.

如果没有,我仍然可以解析 hydra 设置的当前路径(我可以通过 获取os.getcwd())或使用Dictconfighydra 从上面的 yaml 创建的信息,但这会不太方便。

4

3 回答 3

1

What about using just a plain yaml anchor?

now_dir: &nowdir ${now:%Y-%m-%d}/${now:%H-%M-%S}

You will able to use the value *nowdir later in the .yaml file.

于 2021-10-05T11:41:22.427 回答
0

请参阅有关访问 Hydra 配置的文档。

从 Hydra 1.1 版开始,您的选择包括:

1)在您的配置中,使用 hydra 解析器:

output_dir: ${hydra:run.dir}

请注意上述 yaml 代码中括号内的冒号:这是对名为“hydra”的自定义解析器的调用。

在您的 python 代码中,您可以通过output_dir主函数配置上的键访问此值:

@hydra.main()
def my_app(cfg: DictConfig) -> None:
    print(cfg.output_dir)

2)在您的代码中,使用 HydraConfig 单例:

from hydra.core.hydra_config import HydraConfig

@hydra.main()
def my_app(cfg: DictConfig) -> None:
    print(HydraConfig.get().run.dir)

为了获得一致的结果,请确保您对 HydraConfig 单例的访问发生在您的@hydra.main-decorated 函数的范围内。

于 2021-10-07T04:33:26.600 回答
0

所以我发现最好的方法是从 hydra 使用正则表达式创建的路径中获取日期:

>>> import re
>>> from datetime import datetime
>>> path
'hydra_outputs/2021-07-09/16-25-37/.hydra'
>>> match = re.search(r'\d{4}-\d{2}-\d{2}/\d{2}-\d{2}-\d{2}', path)
>>> datetime.strptime(match.group(), '%Y-%m-%d/%H-%M-%S')
datetime.datetime(2021, 7, 9, 16, 25, 37)

如果有人有更好的解决方案,我会留下这个问题。

于 2021-10-06T14:21:27.547 回答