最近开始使用了一维卷积,之前在本科做毕设的时候,虽然跟着师兄也用了一点一维卷积的东西,但是那个时候并不是真的明白一维卷积究竟是如何操作的。今天结合Pytorch特来了解一下。
Pytorch一维卷积Conv1d的官方文档在这里可以找到。下面说下自己的理解。
该函数的声明如下:
1 | torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros') |
重点介绍一下几个参数:
- in_channels:输入数据的通道数,在文本应用中,该参数即为词向量的维度
- out_channels:卷积产生的通道数,有多少个out_channels,就需要多少个一维卷积核
- kernel_size:卷积核的尺寸,其维度为
(in_channels, kernel_size)
该层要求的输入大小为$(\rm batch_size,C_{in},L_{in})$。其中,$\rm C_{in}$在文本使用中为词向量的维度;$\rm L_{in}$在文本应用中为句子的最大长度。
该层的输出大小为$(\rm batch_size,C_{out},L_{out})$。其中,$\rm C_{out}$大小为上面参数中out_channels
的值,而$\rm L_{out}$为卷积核在$\rm L_{in}$维度上滑窗得到的尺寸。
该层总的参数量为(out_channels, in_channels, kernel_size)
。
具体过程可以参考下图,不过值得注意的是,下面的输入和Pytorch中的输入维度在后面两个维度是相反的。