我尝试在AllenNLP v2.0.1中实现了一个主动学习过程。但是,由于目前的GradientDescentTrainer实现,我无法继续培训新一批Instance。
该模型(也使用AllenNLP进行训练)已经在初始训练数据集上完成了预定数量的历元的训练。我使用Model.from_archive方法恢复了模型,并使用Trainer.from_params静态构造函数为它实例化了一个Trainer。
此后,当我试图通过调用trainer.train()来继续训练一批新的Instance时,它会跳过训练,因为_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模型,并在新的一批实例(实际上是我将使用SimpleDataLoader加载的单个实例)上继续训练它。
我还附加了下面训练器的配置。我使用的模型是围绕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"
}
]
}发布于 2021-03-06 02:07:57
下面是几条建议:
指定不同的序列化目录时,不要打开恢复标志
https://stackoverflow.com/questions/66408517
复制相似问题