本文图片大部分来自吴恩达Andrew Ng老师的深度学习课程。

基础操作:

  • 最基本的卷积操作是把卷积核在输入中移动(扫一遍),获得输出。
    在这里插入图片描述

维度:

  • 一维卷积和二维卷积的维度是指,输入数据的维度,比如一维的只有长度(如文本,第一个单词第二个单词),二维的有长宽(如图像,横纵分布的像素矩阵)。
  • 一维卷积的卷积核在一维方向上移动
    • (如文本,第一个单词第二个单词);
  • 二维卷积的卷积核在二维方向上移动
    • (比如图像从左到右从上到下)

channel:

  • 在此基础上,输入可以有不同channel。(例如文本每个单词长度最长为l。 图像有rgb)
  • 因此卷积核也可以增加一维,即channel。
  • 但卷积核的channel数量必须和输入的channel数一致,不然在channel这一维,卷积核也可以移动了。这样维度就升了一维。
  • 因此,一个卷积核的卷积操作完成后,输出的数据只有一个channel。

比如下图,二维卷积,输入和卷积核的channel number都是3,输出只有一个channel。
卷积核之能在长宽方向移动,不能在channel 方向移动。
在这里插入图片描述

下图是nlp,输入和卷积的channel(横向)都是5,输出的channel为1,
卷积核只能纵向移动,不能横向移动。

在这里插入图片描述

多个卷积核输出多channel

  • 如果想要输出多个channel,可以用多个卷积核卷积,把结果排列在一起,作为多个channel。
    在这里插入图片描述

1*1 卷积核的理解

一个1*1的卷积核,相当于把某个单元所有channel的值,和 卷积核所有channel的值,做了一次线性组合,得到一个值。
在这里插入图片描述

1个1*1的卷积核就相当于输出层神经元个数为1的全连接网络(mlp)层:
在这里插入图片描述

多个1*1的卷积核就相当于全连接网络,每个输出单元对应一个卷积核(一套权重):
在这里插入图片描述

pytorch应用

class torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)

in_channels(int) – 输入信号的通道。在文本分类中,即为词向量的维度
out_channels(int) – 卷积产生的通道。有多少个out_channels,就需要多少个1维卷积(这就是上文说的,out_channels=用到的卷积核的数量)
kernel_size(int or tuple) - 卷积核的尺寸,卷积核的大小为(k,),第二个维度是由in_channels来决定的,所以实际上卷积大小为kernel_size*in_channels
stride(int or tuple, optional) - 卷积步长
padding (int or tuple, optional)- 输入的每一条边补充0的层数
dilation(int or tuple, `optional``) – 卷积核元素之间的间距
groups(int, optional) – 从输入通道到输出通道的阻塞连接数
bias(bool, optional) - 如果bias=True,添加偏置
————————————————
版权声明:本文为CSDN博主「若之辰」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sunny_xsc1994/article/details/82969867

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐