1D卷积类的调用参数解释
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维卷积
-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为添加举例代码
import torch from torch import nn kernel_size = 5 padding = kernel_size // 2 # 对kernel_size向下取整 conv1 = nn.Conv1d(1, 1,kernel_size=kernel_size, padding=padding, bias = False) inputs = torch.ones([2, 1, 512]) outputs = conv1(inputs) print(outputs.size()) outputs = outputs.view([2, 512, 1, 1])
因为通常来说1D卷积几乎在图像处理中很少使用,所以官网上对1D卷积的解释也是偏向于NLP处理。conv1只支持三维矩阵输入,分别是N(batch_size)、C(channels)、L(序列长度)。对应于上面的代码而言,N应该是2,C应该是1,L应该是512,所以需要在图像输入时进行转置操作,将C和L的数值交换一下,才能作为输入。又因为padding保证了输入和输出的维度一致,所以输出的shape仍然是[2, 1, 512],此时可以借助view再reshape一下变成正常的图像shape[2, 512, 1, 1]
- 简单理解
1D卷积是在一个维度上(线性)进行卷积核(1D)的移动,2D卷积是在两个维度上(平面)进行卷积核(2D)的移动,3D卷积是在空间上(立体空间)进行卷积核(3D)的移动。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。