0

我尝试在 AllenNLP v2.0.1 中实现主动学习过程。但是,在当前的GradientDescentTrainer实施情况下,我无法继续对新一批Instance.

该模型(也使用 AllenNLP 进行了训练)已在初始训练数据集上完成了预定义时期数的训练。Model.from_archive我使用该方法恢复模型,并使用静态构造函数Trainer为它实例化。Trainer.from_params

Instance此后,当我尝试通过调用继续对新批次进行训练时trainer.train(),由于方法中的以下代码片段,它会跳过训练_try_train

for epoch in range(epoch_counter, self._num_epochs)

这是因为epoch_counter恢复到 5,这是从之前对初始训练数据的训练得到的。这是它的相关代码片段,

def _try_train(self) -> Tuple[Dict[str, Any], int]:
    try:
        epoch_counter = self._restore_checkpoint()

self._num_epochs也是 5,我假设这是我的 .jsonnet 训练配置文件中定义的时期数。

简单地说,我的要求是加载一个已经训练过的 AllenNLP 模型,并继续在一批新实例上训练它(实际上是单个实例,我将使用 a 加载SimpleDataLoader

我还在下面附上了 Trainer 的配置。我使用的模型是 BasicClassifier 的自定义包装器,仅用于记录其他指标。

提前致谢。

"trainer": {
  "num_epochs": 5,
  "patience": 1, // for early stopping
  "grad_norm": 5.0,
  "validation_metric": "+accuracy",
  "optimizer": {
    "type": "adam",
    "lr": 0.001
  },
  "callbacks": [
    {
      "type": "tensorboard"
    }
  ]
}
4

1 回答 1

0

一些建议:

  1. 运行命令行或通过脚本时不要打开恢复标志
  2. 为您的第二次培训指定不同的序列化目录
于 2021-03-05T18:07:56.943 回答