zoukankan      html  css  js  c++  java
  • 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的区间里,也就是说我们通常为了确保整个系统的稳定性而倾向于使用较小的学习速率。

      

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

  • 相关阅读:
    偶数求和
    POJ2002Squares
    学习笔记之ulimit
    LeetCode 345. Reverse Vowels of a String
    LeetCode 343. Integer Break
    LeetCode 292. Nim Game
    LeetCode 338. Counting Bits
    LeetCode 344. Reverse String
    [ZZ]良好的编码习惯
    学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程
  • 原文地址:https://www.cnblogs.com/shuaishuaidefeizhu/p/6840502.html
Copyright © 2011-2022 走看看