我正在从头开始编写一个backprop神经网络迷你库,我需要一些帮助来编写有意义的自动测试。到目前为止,我已经进行了自动化测试,以验证backprop算法是否正确计算了权重和偏差梯度,但没有测试训练本身是否有效。
到目前为止,我使用的代码可以执行以下操作:
鉴于所有这些,我可以编写什么样的自动化测试来确保训练算法被正确实施。我应该尝试近似什么函数(sin、cos、exp、二次等)?我应该在什么范围内以及如何密集地从这个函数中采样数据?NN应该有什么架构?
理想情况下,该函数应该相当简单易学,因此测试不会持续很长时间(1-3秒),但也足够复杂,以提供一定程度的确定性,确保算法正确实现。
神经网络组件实际上为单元测试提供了极好的机会。要记住的是“我们确定这个软件应该表现出什么样的行为?”。我在博客中详细讨论了一些需要验证的关键点,包括:
当然,使用众所周知的测试问题进行集成测试是一种不可或缺的补充,我会在随后的帖子中介绍这一点,但您的问题是关于单元测试的。
我正在为我的学位做类似的事情。您需要的是集成测试,而不是单元测试。
单元测试只告诉您代码是否按您希望的方式工作。要检查算法是否实际正常工作,您应该编写集成测试,在其中创建具有所有所需依赖项(真实的,而不是模拟的)的网络。
创建网络后,您可以简单地尝试执行学习。简单数学函数的测试有利于开始。对于更多维度的函数,您可以尝试e. q. Rosenbrock函数。它非常好,因为您只需一个参数即可更改它的维度。不过,我仅将其用于GA基准测试。
您还可以在实际数据集上测试它。我推荐Iris数据集。它很小,很容易学。如果测试通过,您可以看到您的网络真正工作,而不仅仅是求解数学函数。我个人觉得这很安慰。:)
为了确保您的测试不会运行太久,请设置一个合理的最大历元数。还要注意,您希望每次测试都能通过,直到您搞砸了一些事情,所以不要让它们太难通过。
据我记忆所及,我使用了10个隐藏神经元作为虹膜数据集。在大约5次迭代中,您应该能够轻松获得至少95%的正确答案。
这样的测试可能需要几秒钟,但有一些是好的。你不必每次都运行它们。但是如果你进行了大规模的重构,它们仍然通过了,你就不必担心了。相信我——我经历过。
我正在尝试实现一个简单的神经网络。我知道已经有很多可用的库,这不是重点。 我的网络只有3层:一个输入层一个隐藏层一个输出层 输出层有8个神经元,每个神经元代表不同的类。 我知道如何实现feedfoward算法,但我真的很难实现反向传播算法。 这是我到目前为止得出的结论: 我尝试使用Iris数据集进行测试:https://en.wikipedia.org/wiki/Iris_flower_data_
我很难构建好的神经网络教学算法,因为有一些人工操作。第一件事:我的目标是教nn-xor函数,我使用sigmoid作为激活函数和简单的梯度下降。前馈很容易,但backprop在某种程度上令人困惑——大多数算法描述中常见的步骤有:1。计算输出层上的错误。2、将此错误传播到有关权重3的隐藏层。更新突触上的权重 所以我的问题:1。偏差也应该更新吗?如果是,如何更新?目前我随机选择偏差[0.5;1]?2.在
我正在尝试用RELU实现神经网络。 输入层- 以上是我的神经网络结构。我对这个relu的反向传播感到困惑。对于RELU的导数,如果x 有人能解释一下我的神经网络架构的反向传播“一步一步”吗?
考虑具有以下架构的卷积神经网络: Standford的深度学习教程使用以下等式来实现这一点: 然而,在使用这个等式时,我面临以下问题: 我做错了什么?有人能解释一下如何通过卷积层传播错误吗? 简单的MATLAB示例将受到高度赞赏。
我们首先回顾DNN的反向传播算法。在DNN中,我们是首先计算出输出层的$$deltaL:deltaL = frac{partial J(W,b)}{partial zL} = frac{partial J(W,b)}{partial aL}odot sigma{'}(zL)$$ 利用数学归纳法,用$$delta{l+1}$$的值一步步的向前求出第l层的$$deltal$$,表达式为:$$delta
拥有大量输入的神经网络会导致我的网络出现如下问题 神经网络陷入困境,前馈计算总是给出1.0的输出,因为输出和太大,而在进行反向传播时,梯度和太高,导致学习速度太快。 神经网络在所有层中使用tanh作为主动函数。经过深思熟虑,我想出了以下解决方案: 初始化较小的随机权重值(WeightRandom/PreviousLayerNeuronCount) 或 我对自己提出的解决方案感到不舒服。 解决方案1