C# 神经网络最佳设置的近似值?

C# 神经网络最佳设置的近似值?,c#,neural-network,backpropagation,accord.net,C#,Neural Network,Backpropagation,Accord.net,我是一个编程爱好者,请原谅我,并帮助填补任何空白。。 据我所知,神经网络的良好结果要求在学习迭代过程中正确设置sigmoid和学习速率或步进速率(取决于训练方法) 虽然有很多关于这些价值观以及概括和避免过度拟合的原则的教育,但似乎没有太多关注它们与数据和网络的关系 我注意到样本、神经元和输入的数量似乎与这些设置的最佳位置成比例。(例如,更多或更少的输入可能会改变迭代次数) 是否有一种数学方法可以根据样本、输入、输出、层等已知值为sigmoid、学习率、步骤、迭代等找到一个好的(近似的)起点?在深

我是一个编程爱好者,请原谅我,并帮助填补任何空白。。 据我所知,神经网络的良好结果要求在学习迭代过程中正确设置sigmoid和学习速率或步进速率(取决于训练方法)

虽然有很多关于这些价值观以及概括和避免过度拟合的原则的教育,但似乎没有太多关注它们与数据和网络的关系

我注意到样本、神经元和输入的数量似乎与这些设置的最佳位置成比例。(例如,更多或更少的输入可能会改变迭代次数)


是否有一种数学方法可以根据样本、输入、输出、层等已知值为sigmoid、学习率、步骤、迭代等找到一个好的(近似的)起点?

在深度学习爆发之前,确定网络中最佳参数数量的一种常用方法是使用贝叶斯正则化。贝叶斯正则化是一种避免过度拟合的方法,即使您的网络比需要的大

关于学习/步进率,问题是选择一个小的步进率会使学习速度非常慢,而一个大的步进率可能会使你的网络产生分歧。因此,一种常见的技术是使用一种可以自动调整学习速率的学习方法,以便在必要时加速,并在梯度的某些区域减速

因此,在处理这两个问题的同时学习神经网络的一种常见方法是使用with。Levenberg-Marquardt算法是一种自适应算法,因为它可以在每次迭代后调整学习速率,能够根据需要从高斯-牛顿更新(使用二阶信息)切换回梯度下降算法(仅使用一阶信息)

它还可以估计网络中真正需要的参数数量。参数个数是考虑网络中所有神经元的权重总数。然后,您可以使用此参数来估计首先应该使用多少个神经元


此方法由实现。但是,由于您还包括accord net标记,我还应该说它是由实现的(您可能希望在NuGet中使用最新的alpha版本,以防处理多个输出问题)。

如果您的模型是反向传播的,我可以告诉您,您只需要一个隐藏层。关于您询问的其他问题,我确信正确的参数取决于(并调整到)输入和输出空间。至少这是我十年前从文献中记得的。即使你的模型使用反向传播,你可能想要使用多个隐藏层。虽然具有一个隐藏层的神经网络是通用近似器,但更多的层可能是有益的,这取决于您使用的激活函数,请参阅深度学习。感谢Cesar花时间回答,非常感谢您的库和对它的贡献。我假设参数是指有效参数?是的,这个属性应该给出网络有效使用的参数的大概数量-顺便说一下,谢谢!我希望这个框架能对你有用!