CNN全连接层怎么转化成一维向量?

正如上一篇文章所述,CNN的最后一般是用于分类是一两个全连接层,对于前面池化层输出的二维特征图是怎么转化成一维的一个向量的呢?

从上图的结构中可以看到,最后两层是两个矩形,也就是一维向量,以MNIST手写数据集为例,上层输出的特征图(Feature Map)为14*14*64大小,经过一个全连接层(这里第一个全连接层的神经元设置为1024个)之后,变成了1*1024的向量。

为什么维数降低了呢?别忘了全连接层的作用在于分类,所以最后需要进行各个类别的概率计算,也就是将该测试样本属于某一类别的可能性计算出来。也没有什么神秘之处,只要对每一张输入的特征图,用一个和图像一样大小的核卷积,这样整幅图就变成了一个数了,其实就是有64*1024个14*14的卷积核卷积出来的,如果厚度是64就是那64个核卷积完了之后相加即可,这样就能把一张图高度浓缩成一个数了。这也就是为什么经过全连接层之后变成一维向量的原因了。

说起卷积核,我们来具体了解一下卷积核。在CNN中,卷积层的卷积核具有长、宽、深三个维度。卷积核本质上就是权重矩阵。

卷积核的长、宽都是人为指定的,长 X 宽也被称为卷积核的尺寸,常用的尺寸为3X3,5X5等;卷积核的深度与当前图像的深度(feather map的张数)相同,所以指定卷积核时,只需指定其长和宽 两个参数。例如,在原始图像层 (输入层),如果图像是灰度图像,其feather map数量为1(MNIST为什么是28*28*1的原因,MNIST数据集中的图像都是灰度图),则卷积核的深度也就是1;如果图像是grb图像,其feather map数量为3(有3个色彩通道),则卷积核的深度也就是3。

其实,这也是和全连接神经网络一样的地方,正是CNN基于权重共享的理念,减少了很多参数,可以看出,全连接的参数实在是太多了,这张图中就有14*14*64*1024个参数,而上面的卷积和池化过程最多也不过28*28*32,所以在后来看到的算法应用方面很多都规避了全连接层,目前主流的一个方法是全局平均值。也就是最后那一层的feature map(最后一层卷积的输出结果),直接求平均值。有多少种分类就训练多少层,这十个数字就是对应的概率或者叫置信度。MNIST数据集可以通过tensorflow框架中的TensorBoard进行可视化,如下图所示。

CNN中的卷积层与全连接层都是计算点乘,所以全连接层和卷积层可以相互转换。卷积层转换成全连接层的过程就是将权值补0,增大矩阵的过程。正是基于卷积神经网络的共享理念,在转换之后会产生许多等值参数。当然,全连接层也可以变成卷积层。

猜你喜欢

转载自blog.csdn.net/baidu_41774120/article/details/117378785
今日推荐