如何将训练结束回调添加到AllenNLP配置文件中



当前使用AllenNLP 1.2和commandsapi的训练模型:

allennlp train -f --include-package custom-exp /usr/training_config/mock_model_config.jsonnet -s test-mock-out

我正在尝试在训练完成后对测试数据集执行正向传递。我知道如何添加epoch_callback,但不确定end_callback的语法。

在我的config.json中,我有以下内容:

{
...
"trainer": {
...
"epoch_callbacks": [{"type": 'log_metrics_to_wandb',},]
}
...
}

我试过:

"end_callback": [{"type": 'my_custom_function',},]

但是得到了一个非法的论点错误。此外,我不确定如何准确地指定确切的自定义功能并将其传达给培训师。

我认为您可以创建一个新的回调函数/对象,该函数/对象继承自TrainerCallback并覆盖on_end方法,然后如果您以与上面的log_metrics_to_wandb相同的方式注册它,它应该可以正常工作。

对于像我一样使用allennlp迷路的人来说,这只是一个更完整的例子,它对我有效:

定义回调,注册它并覆盖您想要调用的任何方法:

from allennlp.training.callbacks.callback import TrainerCallback
@TrainerCallback.register("log_metrics_to_wandb")
class LogMetricCallback(TrainerCallback):
def on_end(self, trainer, metrics, epoch, is_primary=True, **kwargs):
...

并将其添加到trainer下的配置文件中->回调

{
...
"trainer": {
...
"callbacks": [{"type": 'log_metrics_to_wandb',},]
}
...
}

我用2.4.0版本测试了它,但根据文档,它应该没有太大变化。

最新更新