【问题标题】:Can a .jsonnet file be constructed in pure python可以用纯python构造一个.jsonnet文件吗
【发布时间】:2021-09-23 19:41:48
【问题描述】:

我使用.jsonnet 文件作为AllenNLP 模型配置的模板

我使用Optuna 包搜索超参数空间,并在每个步骤中使用建议的超参数评估该模板extVars。然后我训练一个模型并将其保存到档案中。

问题是,除了超参数之外,我的.jsonnet 配置的某些部分包括相对于extVar 变量(我的包内的一个目录)的文件路径。这些文件路径也会被渲染,最后我的model.tar.gz 中有绝对路径,这是错误的,因为它们甚至可能不存在于加载该存档的机器上

.jsonnet:

{
...
  "train_data_path": std.extVar("TRAIN_DATA_PATH"),
  "validation_data_path": std.extVar("VALID_DATA_PATH"),
...
}

rendered.json:

{
...
  "train_data_path": "/home/user/datasets/train.json",
  "validation_data_path": "/home/user/datasets/valid.json",
...
}

所以我想保存原始路径表达式并在加载时提供一个环境变量,但我还没有找到在 python 中序列化 .jsonnet 文件的方法,只有 .json

【问题讨论】:

  • 我希望如果您将TRAIN_DATA_PATH 设置为相对路径,它在最终的 .json 文件中也是相对的。你没看到吗?

标签: python allennlp jsonnet optuna


【解决方案1】:

感谢您尝试 Optuna 集成。 (我是 Optuna 的 AllenNLP 集成的作者)

用 JSON 编写路径表达式很困难,因为 JSON 不支持读取环境变量。

相反,您可以使用 allennlp-optuna 使用原始配置文件(未生成的配置文件)重新训练模型。 https://github.com/himkt/allennlp-optuna#4-retrain-a-model-with-optimized-hyperparameters

安装 allennlp-optuna 后,您可以通过allennlp tune 调整超参数,并通过allennlp retrain 使用优化的超参数训练模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 2010-11-20
    • 2012-03-18
    相关资源
    最近更新 更多