我想我在Encog中做了一些错误。在我见过的所有例子中,他们只是训练,直到达到某个训练错误,然后打印结果。何时计算梯度并更新隐藏层的权重?这是否全部包含在training.iteration()函数中?这是没有意义的,因为尽管我的训练错误在我的程序中持续下降,这似乎意味着权重在变化,但我还没有通过网络运行验证集(我在建立时断开并与训练集分离在开始的数据),以确定验证错误是否仍然随着训练错误而下降。使用Encog正确地进行培训和验证
我也将验证集加载到教练器中,并通过compute()运行它,但验证错误总是与训练错误相似 - 因此很难判断它是否与训练错误相同。同时,测试命中率低于50%(如果没有学习,预期)。
我知道有很多不同类型的反推技术,特别是使用梯度下降和弹性反推技术的常见技术。我们希望自己手动更新网络的哪一部分?
对不起,我对验证阶段发生的事情感到困惑。没有更新权重,但可以使用提前停止来防止过度配合。但是,可以调整体系结构_...神经元/层可以根据验证集添加/删除。它是否正确? –
这有点棘手,有点主观。一般来说,你不希望验证集影响你的训练。一般来说,你必须以实用性来强调这一点。但是,如果修改体系结构以提高验证分数,请更改权重,则您现在正在将验证集合并入训练集。尽早停止违反这条规则,但这是一种常见做法。交叉验证是另一种方法。 – JeffHeaton
再次感谢您。有你的绿色支票! –