如何判断反向传播算法是否能成功训练?

我有一个AI项目,使用了反向传播神经网络。

它已经训练了大约一个小时,从全部100个输入中训练了60到70个输入。我的意思是,在反向传播的条件下,60到70个输入是正确的。(训练的输入数量在60到70之间波动)。

目前,已经完成了超过10000个周期,每个周期大约需要0.5秒。

如果我让它长时间运行,如何知道这个神经网络是否能成功训练?(或者它是否无法进一步训练?)


回答:

查看我对这个问题的回答:在神经网络中,训练集、验证集和测试集有什么区别?

你应该使用三组数据:

  • 训练集
  • 验证集
  • 测试集

验证数据集可以告诉你何时应该停止训练(正如我在另一个回答中所说):

验证数据集用于最小化过拟合。你不会用这个数据集调整网络的权重,你只是在验证训练数据集上的准确性提高是否真的在未展示给网络的数据集上也提高了准确性,或者至少网络没有在其上训练过(即验证数据集)。如果训练数据集上的准确性提高了,但验证数据集上的准确性保持不变或下降,那么你就在过拟合神经网络,你应该停止训练。

一个好的验证方法是使用10折(k折)交叉验证。此外,还有特定的“策略”来将你的数据集分割成训练、验证和测试集。这本身就是一门科学,所以你也应该阅读相关内容。

更新

关于你对错误的评论,我会推荐一些资源,这些资源可以帮助你更好地理解神经网络(这有点数学密集,但请看下面的更多信息):

  1. http://www.colinfahey.com/neural_network_with_back_propagation_learning/neural_network_with_back_propagation_learning_en.html
  2. http://www.willamette.edu/~gorr/classes/cs449/linear2.html

科林·法希文章的第5.9节对此描述得最好:

反向误差传播公式:
使用以下公式计算神经网络输出的误差值:

Error = (Output - Desired);  // 源自:Output = Desired + Error;

神经元体内的误差累积根据神经元体的输出和输出误差(由连接到神经元体的链接指定)进行调整。每个输出误差值以以下方式贡献给误差累加器:

ErrorAccumulator += Output * (1 - Output) * OutputError;

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注