如何在Torch中给我的随机下降加上动量?

我正在Torch中实现一个多层感知器神经网络,按照这个例子实现(从“例子:训练神经网络”到“Torch基础知识:测试你的神经网络”部分)。

现在,我需要向这个神经网络模型添加一些动量,但我无法理解如何做到这一点。 梯度下降部分是:

criterion = nn.MSECriterion()
trainer = nn.StochasticGradient(mlp, criterion)
trainer.learningRate = 0.01
trainer:train(dataset)

我希望有像trainer.momentum = 1这样的命令,但是没有这样的东西。

有人知道如何向我的Torch神经网络模型添加动量吗?

点赞
用户2658050
用户2658050

你可以选择以下两件事情中的一件:

  • 自己实现 SGD——这是一个非常基础的算法,实际上只需要几行 torch 代码,然后再添加动量即可。
  • 使用其他的训练库,比如从 torch 中使用 optimhttps://github.com/torch/optim/blob/master/doc/index.md,它有多种训练方法,包括带动量的 SGD。
2016-01-15 23:51:29
用户5407700
用户5407700

使用optim包(见https://github.com/torch/optim)进行优化,您可以为参数创建一个Lua表。这里是一个例子;

optimState = {
learningRate = 0.001,
weightDecay = 0,
momentum = 0.9,
learningRateDecay = 0
}

然后您可以将参数表传递给optim.method函数(优化您的损失函数),例如;

optim.method(func, x, optimState)
2016-01-23 15:37:34