0

我使用.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"),
...
}

渲染的.json:

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

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

4

1 回答 1

0

感谢您尝试 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

于 2021-07-23T04:35:10.827 回答