我认为我对 Encog 做错了什么。在我见过的所有例子中,他们只是简单地训练直到达到某个训练错误,然后打印结果。什么时候计算梯度并更新隐藏层的权重?这是否都包含在 training.iteration() 函数中?这是没有意义的,因为即使我的程序中的 TRAINING 错误不断减少,这似乎意味着权重正在发生变化,但我还没有通过网络运行验证集(我在构建时断开并与训练集分离)开始时的数据)以确定验证误差是否仍然随着训练误差而减小。
我还将验证集加载到训练器中并使用 compute() 通过网络运行它,但验证错误始终与训练错误相似 - 所以很难判断它是否与训练错误相同。同时,测试命中率低于 50%(不学习时预期)。
我知道有很多不同类型的反向传播技术,尤其是使用梯度下降和弹性反向传播的常见技术。我们希望自己手动更新网络的哪一部分?