如何在 mini-batch 中累积梯度然后在 Chainer 中进行反向传播?
How to accumulate gradient across mini-batch and then back-propagation in Chainer?
我正在对视频序列进行分类,我需要两件事:
由于GPU显存有限,想跨mini-batch累加梯度,然后平均梯度值,再反向传播
我需要知道如何在 mini-batch 之间随机播放而不是在每个 mini-batch 内部随机播放,因为我希望视频序列保持顺序。
问题一:
您可以向前和向后每个小批量,但 不调用 optimizer.update(),在对必要的小批量重复向前和向后后,您可以调用 optimizer.update() 根据累积梯度更新。
如果你想用 trainer
模块来实现它,我认为你需要重写 StandardUpdater
来定义你自己的 Updater
class 来做上面的事情。
问题二:
你在使用 trainer
模块吗?
如果是这样,您可以定义自己的迭代器来实现这一点。另请参见下文以了解如何定义迭代器 class.
我正在对视频序列进行分类,我需要两件事:
由于GPU显存有限,想跨mini-batch累加梯度,然后平均梯度值,再反向传播
我需要知道如何在 mini-batch 之间随机播放而不是在每个 mini-batch 内部随机播放,因为我希望视频序列保持顺序。
问题一: 您可以向前和向后每个小批量,但 不调用 optimizer.update(),在对必要的小批量重复向前和向后后,您可以调用 optimizer.update() 根据累积梯度更新。
如果你想用 trainer
模块来实现它,我认为你需要重写 StandardUpdater
来定义你自己的 Updater
class 来做上面的事情。
问题二:
你在使用 trainer
模块吗?
如果是这样,您可以定义自己的迭代器来实现这一点。另请参见下文以了解如何定义迭代器 class.