我目前正在使用Encog 3.3 (Java实现)来使用BPROP和RPROP (在两个不同的场景中)来训练一个2^N-10-10-2-MLP网络。
我把我的数据分成40/20/40 (训练/验证/测试)随机分组。
因为我有一个验证集,所以我可以将Encog的EarlyStoppingStrategy添加到我的培训中。
碰巧,我对如何设置这3个参数感到有点困惑:
这种方法常常陷入局部极小值。
培训方法配置如下:
// configure learning rule (backpropagation)
Backpropagation train = new Backpropagation(network, trainingSet, 1e-6, 0.9);
// configure training strategy
EarlyStoppingStrategy early = new EarlyStoppingStrategy(validationSet, trainingSet, trainingSet.size(), 1, 0.01);
train.addStrategy(early);是否有适当的/推荐的方法来设置这些参数?
发布于 2015-12-30 22:42:08
如果你的培训被困在当地的最低限度,我不认为你的问题是与EarlyStoppingStrategy。相反,您的问题与反向传播算法的动量有关。
当交叉验证错误增加时,EarlyStoppingStrategy停止训练,这是您不希望发生的,因为训练错误会减少,因为这意味着您正在“过度训练”。但是,EarlyStoppingStrategy与减少培训过程中的全局培训错误无关。
反向传播算法很难同时设置“学习速率”和“动量”。
我建议您首先尝试ResilientPropagation算法,因为它更容易使用,并且不需要您设置这些参数。您还可以考虑QuickPropagation训练算法。
如果这不是一个选项,那么我建议您使用具有反向传播的“智能动量”,如下所示:
Backpropagation train = new Backpropagation(network, trainingSet);
train.addStrategy(new SmartMomentum());SmartMomentum使用以前训练迭代中的误差梯度以及当前训练迭代中的误差梯度来帮助训练过程避免局部极小。
如果您仍然在将全局错误降到期望的水平上有问题,那么您也可以尝试添加SmartLearningRate策略,found 这里。
https://stackoverflow.com/questions/34161646
复制相似问题