• 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)的移动。

Marilyn_Manson
1 声望0 粉丝

坚持更新,记录学习