代码之家  ›  专栏  ›  技术社区  ›  efwefwefwefwefw wefwefwefwef

如何在PyTorch Conv1d层中仅在一侧应用填充?

  •  0
  • efwefwefwefwefw wefwefwefwef  · 技术社区  · 1 年前

    我正在使用PyTorch的CNN API来制作1D卷积层。例如,考虑以下内容:

    CNN = nn.Conv1d(
      in_channels=1,
      out_channels=1,
      kernel_size=10,
      padding=?
    )
    

    暂时忽略填充组件。

    所以这一层将采用一系列 N 元素(例如N=100)。并使用大小为10的滑动卷积窗口来输出大小为 M .

    我只想在序列的左侧添加填充,这样输出的大小就完全一样了 N-1 .

    我发现这个公式 left_hand_padding = kernel_size - 2 能够输出实现这一点的正确填充。

    但我似乎找不到关于如何实际编码这种不对称填充的资源。如果我尝试在中设置填充参数 nn.Conv1d() kernel_size - 2 ,输入的右侧和左侧都被填充。

    我还试着输入一个元组 (kernel_size - 2, 0) ,(元素0是LHS填充,元素1是RHS填充)。但这给了我一个错误:

    RuntimeError:期望padding为单个整数值或1个值的列表以匹配卷积维度,但得到的padding=[8,0]

    是不是不支持这种不对称填充?

    1 回复  |  直到 1 年前
        1
  •  1
  •   MinhNH    1 年前

    您需要明确地填充它。将卷积的填充设置为0并使用 x = nn.funtional.pad(x, (kernel_size - 2, 0), ...) 。你可以阅读更多 here .