如何知道反向传播能否成功训练?

Mah*_*asi 2 artificial-intelligence backpropagation

我有一个AI项目,它使用Backpropagation神经网络.

它训练了大约1个小时,并且已经训练了来自所有100个输入的60-70个输入.我的意思是,在反向传播的条件下,60-70输入是正确的.(受过训练的输入数量在60到70之间).

目前,已完成超过10000个时期,每个时期花费近0.5秒.

如果长时间离开它,如何知道神经网络是否能够成功训练?(或者它不能更好地训练?)

Kir*_*ril 7

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

你应该使用3组数据:

  • 训练
  • 验证
  • 测试

验证数据集会告诉您何时应该停止(正如我在另一个答案中所述):

验证数据集用于最小化过度拟合.您没有使用此数据集调整网络的权重,您只是验证训练数据集的准确度的任何提高实际上都会提高准确性,而不是之前未向网络显示的数据集,或者至少网络没有接受过培训(即验证数据集).如果训练数据集的准确度增加,但是验证数据集的准确度保持不变或降低,那么你的神经网络就过度拟合,你应该停止训练.

一种好的验证方法是使用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

Colin Fahey文章第5.9节最好地描述了它:

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

Error = (Output - Desired);  // Derived from: Output = Desired + Error;
Run Code Online (Sandbox Code Playgroud)

根据神经元体的输出和输出误差(由连接到神经元体的链节指定)调节神经元体中的误差累积.每个输出错误值以下列方式对错误累加器有贡献:

ErrorAccumulator += Output * (1 - Output) * OutputError;
Run Code Online (Sandbox Code Playgroud)