【发布时间】:2021-01-26 14:55:27
【问题描述】:
我希望通过使用 jsonnet 配置文件在标准 AllenNLP 模型训练中禁用序列化所有模型/状态权重。
原因是我正在使用 Optuna 运行自动超参数优化。
测试数十个模型很快就会填满驱动器。
我已经通过将num_serialized_models_to_keep 设置为0 来禁用检查点:
trainer +: {
checkpointer +: {
num_serialized_models_to_keep: 0,
},
我不希望将serialization_dir 设置为None,因为我仍然想要关于记录中间指标等的默认行为。我只想禁用默认模型状态、训练状态和最佳模型权重写作。
除了我上面设置的选项之外,是否有任何默认的训练器或检查点选项来禁用模型权重的所有序列化?我检查了 API 文档和网页,但找不到任何内容。
如果我需要自己定义此类选项的功能,我应该在我的模型子类中覆盖 AllenNLP 中的哪些基本函数?
或者,它们在训练结束时对清理中间模型状态有什么用处吗?
编辑:@petew's answer 显示了自定义检查点的解决方案,但我不清楚如何让 allennlp train 找到我的用例中的此代码。
我希望通过如下配置文件调用 custom_checkpointer:
trainer +: {
checkpointer +: {
type: empty,
},
调用allennlp train --include-package <$my_package> 时加载检查点的最佳做法是什么?
我的 my_package 包含子目录中的子模块,例如 my_package/modelss 和 my_package/training。
我想将自定义检查点代码放在my_package/training/custom_checkpointer.py
我的主模型位于my_package/models/main_model.py。
我是否必须在我的 main_model 类中编辑或导入任何代码/函数才能使用自定义检查点?
【问题讨论】:
标签: allennlp