CNN卷积神经网络是怎么衔接到全连接dense层的
- 输入的维度确定
- 2维卷积中采用和feature maps尺寸一样的卷积核
- 1维卷积在输入数据维度确定时的一种方法
- 输入的维度不确定
- 1维卷积在输入数据时间维度不确定时的一种方法
- 2维卷积在输入数据时间维度不确定时的一种方法
- 其他方法
- GAP方法
输入的维度确定
一般CNN处理图像的时候输入图像的两个维度都是确定的,这是典型的处理方式
2维卷积中采用和feature maps尺寸一样的卷积核
此图文摘自博客,该博客也详细的介绍了卷积神经网络
1维卷积在输入数据维度确定时的一种方法
该文章介绍来自
https://blog.goodaudience.com/introduction-to-1d-convolutional-neural-networks-in-keras-for-time-sequences-3a7ff801a2cf 该文章也对一维卷积有比较好的诠释,图中最后完成pooling后,数据只剩下一维队列,可以直接与dense层衔接。
输入的维度不确定
用CNN处理时间序列的时候,如语音的频谱,feature是确定的,但是time是动态的,这种情况的卷积方式和全连接方式也有不一样的地方。
1维卷积在输入数据时间维度不确定时的一种方法
下图是自己画的示意图,丑了点。输入数据有三个维度,一维是时间维度,一维是batch size,还有一维是feature dimension,语音中经常采用mfcc的39维数据来表征,这里就假设39维。假设只经过一层卷积和池化。为了方便起见,设batch size=1。从图中可以看出经过1维卷积核的处理,数据并没有像2维卷积分层(卷积完仍然是一维),但原来的维度被扩展到卷积核的深度(128)。1维池化也只是在时间轴上对维度产生影响,128维度没有变化。可以在keras的summary看到
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
speechdata (InputLayer) [(None, None, 39)] 0
_________________________________________________________________
reshape (Reshape) (None, None, 39) 0
_________________________________________________________________
conv1d (Conv1D) (None, None, 128) 75008
_________________________________________________________________
batch_normalization (BatchNo (None, None, 128) 512
_________________________________________________________________
max_pooling1d (MaxPooling1D) (None, None, 128) 0
_________________________________________________________________
输出到dense层,将每个时刻的128维数据做dense(softmax)生成输出概率。
2维卷积在输入数据时间维度不确定时的一种方法
下图没有 画 pooling,但pooling会影响二位卷积后每层数据的维度,到最后与dense衔接的时候,数据量是 last-cnn-depth * input-dimension/(poolingsize * stride)。最简单的办法是数据整个型,最后平铺的尺寸是feature_dim * feature_num。平铺完毕,就可以做全连接层了。
值得注意的是这种卷积是按照时间切片进行的,直接通过reshape方法平铺,然后进行全连接映射,或者再加一层一维卷积,避免平铺带来的feature相关性的局限。但如果进入一维卷积前的feature维度太大,算法引入的参数就会更多,参数量是number of kernel depth 倍的全连接层的参数个数。
其他方法
GAP方法
另外在network· in network还提出了一种叫做Global average Pooling的方法,论文提出了将最后的feature直接平均池化平铺,输出softmax,这样就完全避免了全连接层。
在网络又找了一个彩图,更加直观的说明了这种池化和全连接to softmax的过程。
在时间序列处理的时候,gap方法可能需要变化一下,将每个feature 一个时间切片(feature number)做一个average pooling,这样就迅速的降低了数据维度,使得平铺层的维度和feature的维度一致了。