我正在用 C# 实现 Ng 的 OCR 神经网络示例。 我认为我已经正确实现了所有公式[矢量化版本],并且我的应用程序正在训练网络。
关于如何看到我的网络在识别方面的改进,有什么建议吗 - 无需在训练完成后通过绘制示例来手动测试示例?我想在训练过程中了解我的训练进展情况。
我已经在绘制的数字上测试了我训练的权重,所有神经元的输出都非常相似(大约 0.077,或类似的东西......在所有神经元上),并且最大值位于错误的神经元上。所以结果与绘制的图像不匹配。
这是我迄今为止所做的唯一测试:成本函数随时代的变化
所以,这就是成本函数(有人称之为目标函数?)在 50 个时期内发生的情况。 我的 Lambda 值设置为 3.0 ,学习率为 0.01,5000 个示例,我在每个时期之后进行批处理,即在这 5000 个示例之后。激活函数:sigmoid。
输入:400 隐藏:25 输出:10
我不知道 lambda 和学习率的正确值是多少,以便我的网络可以在不过度拟合或欠拟合的情况下进行学习。
有什么建议可以了解我的网络学习情况吗?
此外,在所有这些训练之后,J 成本函数应该具有什么值? 它应该接近零吗?
我应该有更多的纪元吗?
我的示例全部按数字排序是不是很糟糕?
感谢任何帮助。
最佳答案
问:对于如何确定我的网络学习情况有什么建议吗?
A:将数据分为三组训练、交叉验证和测试。使用测试数据验证您的结果。这实际上是后面类(class)中的地址。
问:另外,在所有这些训练之后,J 成本函数应该具有什么值?它应该接近零吗?
A:我记得Ng在作业中提到什么是期望值。正则化成本不应为零,因为它包括所有权重的总和。
问:我应该有更多的纪元吗?
A:如果你运行你的程序足够长的时间(少于 20 分钟?),你会发现成本并没有变小,我认为它达到了局部/全局最优,所以不需要更多的 epoch。
问:我的例子都是按数字排序的,这样会不会不好?
A:算法修改每个示例的权重,因此不同的数据顺序确实会影响批处理中的每个步骤。不过最终结果应该不会有太大差异。
关于c# - 神经网络 OCR - 需要参数帮助 - Coursera Ng 的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27234259/