如何在pybrain中实现正则化
有没有人能给我一个在pybrain中实现正则化技术的示例代码?我想防止我的数据出现过拟合,目前正在寻找像提前停止这样的办法来做到这一点。谢谢!
3 个回答
0
正则化就是改变成本函数。用户在PyBrain中的选择会影响成本函数,比如选择层是线性的还是sigmoid(S形)的,但成本函数本身似乎并没有直接暴露出来。
不过,在StackOverflow的其他地方,有人说可以通过weightdecay参数实现L2正则化。(L2范数是将每个坐标差值的平方相加,而L1范数则是将它们的正绝对值相加。)
0
下面的内容不是 L1/L2 正则化。但它可以通过提前停止来防止过拟合。
来自 trainer 的文档,
trainUntilConvergence(dataset=None, maxEpochs=None, verbose=None, continueEpochs=10, validationProportion=0.25)
在数据集上训练模块,直到它收敛。
返回参数使得验证错误最小的模块。
如果没有提供数据集,则使用在 Trainer 初始化时传入的数据集。validationProportion 是用于验证数据集的数据集比例。
如果给定了 maxEpochs,最多训练那么多轮。每次验证错误达到最低值时,尝试继续训练 continueEpochs 轮,以寻找更好的结果。
如果你使用的是默认参数,那么你已经启用了 75:25 的训练和验证数据集划分。验证数据集用于提前停止。
0
在pybrain中,有一个叫做权重衰减的变量,这其实就是L2正则化。除此之外,我还会把提前停止(early stopping)和权重衰减结合起来使用。
下面是你如何设置权重衰减的方式。
trainer = RPropMinusTrainer(net, dataset=trndata, verbose=True, weightdecay=0.01)