卷积核


以一张图片作为开始吧:




这里的输入数据是大小为(8×8)的彩色图片,其中每一个都称之为一个feature map,这里共有3个。所以如果是灰度图,则只有一个feature map。


进行卷积操作时,需要指定卷积核的大小,图中卷积核的大小为3,多出来的一维3不需要在代码中指定,它会自动扩充至图片的channel数。这里一共定义了5个卷积核,进行卷积操作后,得到了5个feature map。 需要注意的是,**feature map的数量就等于卷积核的数量**。

卷积层尺寸的计算原理
输入矩阵格式:四个维度,依次为:样本数、图像高度、图像宽度、图像通道数
输出矩阵格式:与输出矩阵的维度顺序和含义相同,但是后三个维度(图像高度、图像宽度、图像通道数)的尺寸发生变化。
权重矩阵(卷积核)格式:同样是四个维度,但维度的含义与上面两者都不同,为:卷积核高度、卷积核宽度、输入通道数、输出通道数(卷积核个数)
输入矩阵、权重矩阵、输出矩阵这三者之间的相互决定关系
卷积核的输入通道数(in depth)由输入矩阵的通道数所决定。
输出矩阵的通道数(out depth)由卷积核的输出通道数所决定。
输出矩阵的高度和宽度(height, width)这两个维度的尺寸由输入矩阵、卷积核、扫描方式所共同决定。计算公式如下。
\(height_{out} = (height_{in} - height_{kernel} + 2*padding) / stride + 1\)
\(width_{out} = (width_{in} - width_{kernel} + 2*padding) / stride + 1\)




下面这张图展示了卷积操作具体是如何计算的:




这里用到的就是Conv2D,事实上还有Conv1D,Conv3D。这里再介绍一下Conv1D。

Conv1D是专门针对序列信息的,上面的输入为seq_len=3,dim=3,卷积核的大小为2,由于词向量维度为3,所以卷积核会自动扩充到3维,这和上面自动等于通道个数是相似的。


举个栗子:

这里定义了两个Conv1D,卷积核的大小分别设为5和3,随机生成input,代表的意义分别为【batch,seq_len,dim】。
运行的结果:



特别值得注意的是,1*1的卷积核可以用来代替全连接层来使用。它的好处有很多,可以参考:一文读懂卷积神经网络中的1x1卷积核
要求是卷积核的个数等于全连接层的神经元个数
每一个卷积核都可以生成一个feature map,但是在全连接层中就变成了一个值,破坏了空间信息,卷积核的话可以保留空间信息。同时可以简化参数,因为卷积核是权重共享的。





参考:
【1】CNN中卷积层的计算细节
【2】一维卷积tensorflow2版本的Conv1D以及Pytroch的nn.Conv1d用法
【3】一文读懂卷积神经网络中的1x1卷积核

posted @ 2020-12-03 22:38  Kayden_Cheung  阅读(3281)  评论(0编辑  收藏  举报
//目录