单元测试反向传播神经网络代码

Pau*_*nta 6 unit-testing backpropagation neural-network

我正在从头开始编写一个backprop神经网络迷你库,我需要一些帮助来编写有意义的自动化测试.到目前为止,我已经进行了自动化测试,验证了backprop算法是否正确计算了重量和偏差梯度,但没有测试培训本身是否真正有效.

我到目前为止的代码让我做以下事情:

  • 定义每层具有任意数量的层和神经元的神经网络.
  • 它可以使用任何图层激活功能.
  • 使用偏见也是可能的.
  • 神经元层此刻只能完全连接.
  • 训练只是具有梯度下降的BP.
  • 必须使用训练,验证和测试集(目前这些集合都不能为空).

鉴于所有这些,我可以编写什么样的自动化测试来确保正确实施训练算法.我应该尝试近似什么函数(sin,cos,exp,quadratic等)?我应该在什么范围内以及如何密集地从该函数中采样数据?NN应该采用什么架构?

理想情况下,该函数应该相当简单易学,因此测试不会持续很长时间(1-3秒),但也足够复杂以提供一定程度的确定性,即算法是否正确实现.

And*_*Gis 6

我正在为我的学位做类似的事情.您正在寻找的是集成测试,而不是单元测试.

单元测试仅告诉您代码是否按照您希望的方式工作.要检查算法是否实际正常工作,您应该编写集成测试,在其中创建具有所有必需依赖项的网络(真实的,而不是模拟).

创建网络后,您可以简单地尝试进行学习.简单数学函数的测试有利于开始.对于更多维度函数,您可以尝试eq Rosenbrock函数.它非常好,因为你可以用一个参数来改变它的维度.我用它仅用于GA基准测试.

您还可以在实际数据集上进行测试.我推荐Iris Dataset.它非常小,易于学习.如果测试通过,您可以看到您的网络确实有效,而不仅仅是解决了数学函数.我个人觉得很安慰.:)

为确保测试不会运行太长,请设置合理的最大纪元数.另请注意,您希望您的测试每次都要通过,直到您搞砸了,所以不要让它们太难以通过.

据我记得,我使用10个隐藏神经元作为虹膜数据集.在大约5次迭代中,您应该能够轻松获得至少95%的正确答案.

这样的测试可能需要几秒钟,但有一些是好的.您不必每次都运行它们.但是,如果你进行大规模的重构,他们仍然通过你,你不必担心.相信我 - 我去过那儿.