我有一个使用反向传播神经网络的 AI 项目。
它训练了大约 1 个小时,它已经从所有 100 个输入中训练了 60-70 个输入。我的意思是,在反向传播的情况下,60-70 个输入是正确的。(训练输入的数量在 60 到 70 之间移动)。
而目前,已经完成了 10000 多个 epoch,每个 epoch 耗时近 0.5 秒。
久而久之,如何知道神经网络能否训练成功?(或者它不能训练得更好?)
我有一个使用反向传播神经网络的 AI 项目。
它训练了大约 1 个小时,它已经从所有 100 个输入中训练了 60-70 个输入。我的意思是,在反向传播的情况下,60-70 个输入是正确的。(训练输入的数量在 60 到 70 之间移动)。
而目前,已经完成了 10000 多个 epoch,每个 epoch 耗时近 0.5 秒。
久而久之,如何知道神经网络能否训练成功?(或者它不能训练得更好?)
查看我对这个问题的回答:在神经网络中训练、验证和测试集之间有什么区别?
您应该使用 3 组数据:
验证数据集告诉您何时应该停止(正如我在另一个答案中所说):
验证数据集用于最小化过度拟合。您不是在使用此数据集调整网络的权重,您只是在验证训练数据集的准确性的任何提高实际上都会对之前未向网络显示的数据集产生准确性的提高,或者至少网络没有对其进行训练(即验证数据集)。如果训练数据集的准确度增加,但验证数据集的准确度保持不变或降低,那么您的神经网络过度拟合,您应该停止训练。
一个很好的验证方法是使用10-fold (k-fold) 交叉验证。此外,还有一些特定的“策略”可以将数据集拆分为训练、验证和测试。它本身就是一门科学,所以你也应该阅读它。
关于您对错误的评论,我会向您指出一些可以让您更好地理解神经网络的资源(这有点数学重,但请参阅下文了解更多信息):
Colin Fahey 文章的第 5.9 节对其进行了最好的描述:
反向误差传播公式:
使用以下公式计算神经网络输出处的误差值:
Error = (Output - Desired); // Derived from: Output = Desired + Error;
根据神经元体的输出和输出误差(由连接到神经元体的链接指定)调整神经元体中的误差累积。每个输出错误值以下列方式对错误累加器产生影响:
ErrorAccumulator += Output * (1 - Output) * OutputError;