You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PyTorch Conv1d层中仅对单侧添加填充?

解决方案:PyTorch 1D卷积实现不对称左填充

PyTorch的nn.Conv1d本身不支持直接传入左右不对称的padding参数——它要求padding是单个整数或长度为1的列表,作用是对输入序列的左右两侧进行等量填充,这也是你传入(8,0)时报错的原因。

要实现仅左侧填充、输出大小为N-1的需求,最直接的方式是手动对输入进行填充预处理,再执行卷积操作,具体步骤如下:

步骤1:计算所需左填充值

根据你的需求,左填充值为kernel_size - 2,当kernel_size=10时,左填充值为8。

步骤2:手动左填充输入

可以使用torch.nn.functional.pad或nn.ConstantPad1d实现单侧填充,再传入padding=0的卷积层:

示例代码

import torch
import torch.nn as nn
import torch.nn.functional as F

# 定义卷积层,padding设为0(不再依赖内置填充)
cnn = nn.Conv1d(
    in_channels=1,
    out_channels=1,
    kernel_size=10,
    padding=0
)

# 模拟输入:batch_size=2,通道数=1,序列长度N=100
input_seq = torch.randn(2, 1, 100)

# 手动添加左侧填充:参数格式为(left_pad, right_pad)
left_pad = 10 - 2  # 计算得到8
padded_input = F.pad(input_seq, (left_pad, 0))

# 执行卷积
output = cnn(padded_input)

# 验证输出长度:100+8-10+1=99,即N-1
print(output.shape)  # 输出:torch.Size([2, 1, 99])

原理验证

卷积输出长度公式(步长stride=1时):
输出长度 = 输入长度 + 左填充 + 右填充 - 卷积核大小 + 1
代入数值:100 + 8 + 0 -10 +1 =99,正好符合你要求的N-1。

内容的提问来源于stack exchange,提问作者efwefwefwefwefw wefwefwefwef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:12:39