2

我对 Chainer 有点陌生,并且编写了一个代码来训练一个简单的前馈神经网络。我有一个验证集和一个训练集,并且想在每个 500 次迭代中测试验证集,如果结果更好,我想保存我的网络权重。谁能告诉我我该怎么做?

这是我的代码:

optimizer = optimizers.Adam()
optimizer.setup(model)

updater = training.StandardUpdater(train_iter, optimizer, device=0)
trainer = training.Trainer(updater, (10000, 'epoch'), out='result')

trainer.extend(extensions.Evaluator(validation_iter, model, device=0))
trainer.extend(extensions.LogReport())
trainer.extend(extensions.PrintReport(['epoch', 'main/loss',  'validation/main/loss', 'elapsed_time']))
trainer.run()
4

1 回答 1

1
  1. 验证集错误

由 报告,由Evaluator打印PrintReport。因此,它应该与上面的代码一起显示。为了控制这些扩展的执行频率,您可以在函数中指定trigger关键字参数。trainer.extend例如,下面的代码指定打印每 500 次迭代。

trainer.extend(extensions.PrintReport(['epoch', 'main/loss', 'validation/main/loss', 'elapsed_time']), trigger=(500, 'iteration'))

您还可以将触发器指定为Evaluator.

  1. 保存网络权重

您可以使用 snapshot_object 扩展。

http://docs.chainer.org/en/stable/reference/generated/chainer.training.extensions.snapshot_object.html

默认情况下,每个 epoch 都会调用它。

如果您想在损失改善时调用它,我认为您可以trigger使用MinValueTrigger.

http://docs.chainer.org/en/stable/reference/generated/chainer.training.triggers.MinValueTrigger.html

于 2017-08-12T09:35:17.063 回答