如何在 mini-batch 中累积梯度然后在 Chainer 中进行反向传播?

How to accumulate gradient across mini-batch and then back-propagation in Chainer?

我正在对视频序列进行分类,我需要两件事:

  1. 由于GPU显存有限,想跨mini-batch累加梯度,然后平均梯度值,再反向传播

  2. 我需要知道如何在 mini-batch 之间随机播放而不是在每个 mini-batch 内部随机播放,因为我希望视频序列保持顺序。

问题一: 您可以向前和向后每个小批量,但 不调用 optimizer.update(),在对必要的小批量重复向前和向后后,您可以调用 optimizer.update() 根据累积梯度更新。

如果你想用 trainer 模块来实现它,我认为你需要重写 StandardUpdater 来定义你自己的 Updater class 来做上面的事情。

问题二: 你在使用 trainer 模块吗? 如果是这样,您可以定义自己的迭代器来实现这一点。另请参见下文以了解如何定义迭代器 class.