九、Tensorflow算法之全连接层
Tensorflow,cnn,dnn中的全连接层的理解
上一篇我们讲了使用cnn实现cifar10图像分类,模型经过隐藏层中的卷积、归一化、**、池化之后提取到主要的特征变量,就会到全连接层,那么全连接层是什么意思呢?通过自己的努力终于理解了全连接层的意思。
1. 全连接层
以上图为例,我们仔细看上图全连接层的结构,全连接层中的每一层都是由许多神经元组成的。
他是怎么把 3 * 3 * 5 的输出 转换为1 * 4096 的形式的呢?很简单,可以理解成咋i中间做了一个卷积
从上图可以看出,我们用 3 * 3 * 5 的filter去卷积**函数的输出,得到的是一个fully connected layer 的一个神经元的输出,这个输出就是一个值
因为我们有4096个神经元 我们实际就是使用 3* 3 * 5 * 4096 的卷积层去卷积**函数的输出 重要的理解:这一步的卷积是一个非常重要的作用,就是把分布式特征representation映射到样本标记空间 通俗理解就是把特征representation整合到一起,输出为一个值,这样可以大大减少特征的位置不同而分类错误 我们只需要去计算预测对象的值是否和我们已知对象的值是否相等即可,因为他们的位置不同可能会造成影响,但是值是相同的
例:第一幅图是我们训练的数据,第二幅图是我们的测试数据,但是两幅图中猫的位置不一样,但是图片内容一样,当我们使用全连接时,会根据图片的内容得出一个值,也就是分类结果,但是不会因为图片的位置不同而造成影响。这样大大增强了模型预测的鲁棒性。
2、使用多层全连接层
在平时的模型建设中很多时候我们都是用两层全连接层,这个是为什么呢?
我们在使用许多神经元去拟合数据分布时,有时候只是用一层fully connected layer没法解决非线性问题,但是如果使用两层或者以上的fully connected layer就可以很好地解决非线性问题了。
根据泰勒公式可知,可以使用多项式函数去拟合光滑函数,我们在这里的全连接层中一层的一个神经元就是可以看成时一个多项式。
在全连接层之前的作用时特征的提取,全连接层的作是分类
举个例子
假设有一个神经网络模型已经训练完成
并且全连接层已经知道,当我们得到以下特征是,结果为一只猫
之前已经说过全连接层的作用是去分类
所以从下图我们可以看出
红色的神经元表示该特征已经被找到,已经被** 同一层的其他神经元,没有被**的要么是猫的特征不明显,要么是没找到 当我们把找到的特征组合在一起时,发现最符合要求的是猫 分类更细时,我们对子特征进行分类,如,猫头,猫尾巴,猫眼进行分类
例如对猫头进行分类
猫头有以上的这几种特征,于是我们把猫头的几种特征找到,比如说,猫眼,猫耳朵
道理和找猫的道理一样,当我们找到这些特征,神经元就被**了,这些子特征就是从前面的卷积层,下采样层得来的。
3、总结
全连接层的参数很多,可以占整个网络参数的80%,近期一些性能优异的网络模型如ResNet和GoogLeNet等军用全局平均池化,取代全连接层来融合学到的深度特征,而且,使用GAP替代FC的网络通常有较好的预测性能。
全连接层对模型的影响首先全连接层的模型组成如上,那么全连接层对模型影响的参数就是三个:
1、全连接层的总层数 2、单个全连接层的神经元数 3、**函数
我们先理解**函数的作用:是增加模型的非线性表达能力
如果全连接层的宽度不变,增加长度
优点:神经元个数增加,模型复杂度提升,全连接层数加深,模型非线性表达能力加强,理论上可以提高模型的学习能力
如果全连接层的长度不变,宽度增加
优点:神经元的个数增加, 增加模型的复杂性,理论上可以提高模型的学习能力
全连接层的长度和宽度并不是越多越好,学习能力太好的话容易过拟合,也会增加运算的时间,效率变低
通过预测的结果进行判断,在其他条件理想的情况下,如果 training accuracy高, validation accuracy比较低,也就是发生了过拟合,可以尝试去减少层数或者参数,如果training accuracy比较低,说明模型的学习能力不强,可以尝试增加模型的层数,或者改变参数,根据实际情况而顶,很多时候会设计一个网络模型, 不光考虑准去率,也在AccuracyEfficiency中寻找一个较好的平衡点。
望您:
“情深不寿,强极则辱,谦谦君子,温润如玉”。