BP神经网络设计

1、网络层数

  大部分单个隐藏层即可

 

2、输入层神经元个数

  输入变量的个数通常都是由问题的外部描述所确定的。例如,如果有4个外部变量作为网络的输入,那么网络就有4个输入。但是,这是不是意味着输入层的神经元个数就为4呢?答案是否定的! 因为每个神经元的输入可以有无数个,所以,通常当输入变量较多的时候,输入层神经元个数是明显的少于输入变量的个数的!

3、隐藏层神经元个数

  较多的隐藏层神经元个数可以带来更好的性能,但会导致训练时间增加,有这么一些经验公式...

    其中h为隐藏层神经元个数,i表示输入层神经元个数,o表示输出层神经元个数

  (后续补充...)

 

4、输出层神经元个数

  输出层神经元的个数同样需要根据从实际问题中得到的抽象模型来确定。在模式分类问题中,如果共有n种类别,则输出可以采用n个神经元。

  也可以设计log2(n)个神经元,如4个输出,设计2个节点,00 01 10 11覆盖四种状态

5、激活函数的选取

  激活函数一般用在隐藏层,常选用sigmoid函数,也可选用其他的...(如tanh函数、ReLU函数、P-ReLU函数、ELU函数等)

6、初始权值的确定

  一般随机生成,较小的非零随机值

7、学习效率的设置

  学习速率的高低会影响单次循环训练所获取的权值增量。学习的速率太高有可能会直接引起系统的不稳固;而学习的速率过低又会引起训练用时大大的增加,从而可能产生非常慢的抑制速度。在过去的研究中,我们一般都会将学习速率的选取范围设在0.01-0.8的区间里,也就是说我们通常为了确保整个系统的稳定性而倾向于使用较小的学习速率。

  

确定以上参数后,将训练数据进行归一化处理,并输入网络中进行学习,若网络成功收敛,即可得到所需的神经网络。

 

posted @   帅帅的飞猪  阅读(2199)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2016-05-11 转载--一个“码农”自述的血泪史:当了35年程序员,我最大的遗憾就是没抓住机遇转行
点击右上角即可分享
微信分享提示