我正在从头开始编写一个backprop神经网络迷你库,我需要一些帮助来编写有意义的自动化测试。到目前为止,我已经进行了自动化测试,验证了backprop算法是否正确计算了权重和偏差梯度,但没有测试培训本身是否真正有效。
我到目前为止的代码让我可以执行以下操作:
考虑到所有这些,我可以编写什么样的自动化测试来确保正确实施训练算法。我应该尝试近似什么函数(sin,cos,exp,quadratic等)?我应该在什么范围内以及如何密集地从该函数中采样数据? NN应该采用什么架构?
理想情况下,该函数应该相当简单易学,因此测试不会持续很长时间(1-3秒),但也足够复杂,以确保算法正确实现。
答案 0 :(得分:6)
我正在为我的学位做类似的事情。您正在寻找的是集成测试,而不是单元测试。
单元测试仅告诉您代码是否按您希望的方式工作。要检查算法是否实际正常工作,您应该编写集成测试,在其中创建具有所有必需依赖项的网络(真实的,而不是模拟)。
创建网络后,您可以简单地尝试进行学习。简单数学函数的测试有利于开始。对于更多维度函数,您可以尝试e.q. Rosenbrock function。它非常好,因为你可以用一个参数改变它的维度。我虽然只将其用于GA基准测试。
您还可以在真实数据集上进行测试。我推荐Iris Dataset。它非常小,易于学习。如果测试通过,您可以看到您的网络确实有效,而不仅仅是解决了数学函数。我个人觉得很安慰。 :)
要确保测试运行时间不长,请设置合理的最大纪元数。另请注意,您希望您的测试每次都要通过,直到您搞砸了,所以不要让它们太难以通过。
据我记得,我使用10个隐藏神经元作为虹膜数据集。在大约5次迭代中,您应该能够轻松获得至少95%的正确答案。
这样的测试可能需要几秒钟,但有一些是好的。您不必每次都运行它们。但是,如果你进行大规模的重构,他们仍然通过你,你不必担心。相信我 - 我去过那里。
答案 1 :(得分:2)
神经网络组件实际上为单元测试提供了绝佳的机会。要记住的是“我们确定该软件应该表现出什么样的行为?”。我在my blog post中更详细讨论的一些要验证的关键点是:
当然,使用众所周知的测试问题的集成测试是必不可少的恭维,我在subsequent post中介绍了这一点,但是您的问题是关于单元测试的。