经网络中隐层数和隐层节点数问题的讨论
来源:互联网 发布:网络舆情软件 编辑:程序博客网 时间:2024/06/06 09:00
神经网络中隐层数和隐层节点数问题的讨论
一 隐层数
一般认为,增加隐层数可以降低网络误差(也有文献认为不一定能有效降低),提高精度,但也使网络复杂化,从而增加了网络的训练时间和出现“过拟合”的倾向。一般来讲应设计神经网络应优先考虑3层网络(即有1个隐层)。一般地,靠增加隐层节点数来获得较低的误差,其训练效果要比增加隐层数更容易实现。对于没有隐层的神经网络模型,实际上就是一个线性或非线性(取决于输出层采用线性或非线性转换函数型式)回归模型。因此,一般认为,应将不含隐层的网络模型归入回归分析中,技术已很成熟,没有必要在神经网络理论中再讨论之。
二 隐层节点数
在BP 网络中,隐层节点数的选择非常重要,它不仅对建立的神经网络模型的性能影响很大,而且是训练时出现“过拟合”的直接原因,但是目前理论上还没有一种科学的和普遍的确定方法。 目前多数文献中提出的确定隐层节点数的计算公式都是针对训练样本任意多的情况,而且多数是针对最不利的情况,一般工程实践中很难满足,不宜采用。事实上,各种计算公式得到的隐层节点数有时相差几倍甚至上百倍。为尽可能避免训练时出现“过拟合”现象,保证足够高的网络性能和泛化能力,确定隐层节点数的最基本原则是:在满足精度要求的前提下取尽可能紧凑的结构,即取尽可能少的隐层节点数。研究表明,隐层节点数不仅与输入/输出层的节点数有关,更与需解决的问题的复杂程度和转换函数的型式以及样本数据的特性等因素有关。
在确定隐层节点数时必须满足下列条件:
(1)隐层节点数必须小于N-1(其中N为训练样本数),否则,网络模型的系统误差与训练样本的特性无关而趋于零,即建立的网络模型没有泛化能力,也没有任何实用价值。同理可推得:输入层的节点数(变量数)必须小于N-1。
(2) 训练样本数必须多于网络模型的连接权数,一般为2~10倍,否则,样本必须分成几部分并采用“轮流训练”的方法才可能得到可靠的神经网络模型。
总之,若隐层节点数太少,网络可能根本不能训练或网络性能很差;若隐层节点数太多,虽然可使网络的系统误差减小,但一方面使网络训练时间延长,另一方面,训练容易陷入局部极小点而得不到最优点,也是训练时出现“过拟合”的内在原因。因此,合理隐层节点数应在综合考虑网络结构复杂程度和误差大小的情况下用节点删除法和扩张法确定。
- 经网络中隐层数和隐层节点数问题的讨论
- 神经网络中隐层数和隐层节点数问题的讨论
- 神经网络中隐层数和隐层节点数问题的讨论
- Struts中扫描包的层数问题
- 删除和修改caffe模型中任意最后一层或者任意层数网络的参数的方法
- 二叉树--创建,删除,交换;查找节点的层数,某层多少节点,叶子节点到根节点的路径,LCA
- [树]输出二叉树的节点层数
- easyui 获得选中tree节点的层数
- 计算指定节点*p所在的层数
- 二叉树遍历的应用--求叶数,非叶数,层数,所有数的和,查找某个数,插入
- 隐含层节点数的设置
- myeclipse包的层数和package的层数不一致
- 两层和三层的讨论
- 两层和三层的讨论
- 二叉树的递归实现(前序,中序,后序,层序,高度,叶子节点数,第k层节点数)
- 奇偶节点的排序和完全平方数问题
- 网络中隐含层神经元节点的个数(需要学习的特征数目)
- 第十周 项目3-4返回二叉链b中data值为x的节点的层数
- 多线程基础 ios
- 【LeetCode从零单刷】Same Tree
- 对《Python核心编程》中“第一个Python程序”的改进
- 计蒜客--第35题:灌溉
- Integer to Roman - LeetCode
- 经网络中隐层数和隐层节点数问题的讨论
- 使用PHP生成二维码的两种方法(带logo图像)
- c语言 vs2013 安全检查
- ThreadLocal详解
- C++ STL学习之stack。
- 第五周项目三:-用多文件组织多个类的程序
- POJ 2227 -- The Wedding Juicer(bfs+优先队列)
- 毕晓英第二章17题
- hdu 1226 超级密码 BFS 挺不错的题啊!