我目前正在使用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);
是否有适当/推荐的方法来设置这些参数?
答案 0 :(得分:1)
如果你的训练陷入局部最低点,我认为你的问题不在于EarlyStoppingStrategy。相反,您的问题与反向传播算法的动量有关。
当交叉验证错误增加时,EarlyStoppingStrategy会停止训练,因为训练错误会减少,因此这意味着你已经过度训练了#34;。但是,EarlyStoppingStrategy与减少训练过程中的全局训练错误无关。
设置"学习率"非常困难。和Back Propagation算法的动量。
我建议您首先尝试使用ResilientPropagation算法,因为它更容易使用,并且不需要您设置这些参数。您可能还会考虑QuickPropagation训练算法。
如果那不是一个选项,那么我建议你使用" Smart Momentum"反向传播如下所示:
Backpropagation train = new Backpropagation(network, trainingSet);
train.AddStrategy(new SmartMomentum());
SmartMomentum使用先前训练迭代中的误差梯度以及当前训练迭代的误差梯度来帮助训练过程避免局部最小值。
如果您仍然无法将全局错误降低到所需级别,那么您也可以尝试添加SmartLearningRate策略。