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

如何在PyTorch的conv2d函数中使用自定义卷积核完成矩阵卷积运算

PyTorch conv2d 单通道矩阵卷积正确调用方式

错误原因

  • 参数名错误:torch.nn.functional.conv2d 没有mode参数,控制填充模式的参数为padding,传padding='same'即可实现输出尺寸和输入一致。
  • 张量维度不符合要求:conv2d是为批量多通道卷积设计的,维度要求为:
    • 输入张量:(批量大小, 输入通道数, 高度, 宽度)
    • 卷积核张量:(输出通道数, 输入通道数, 卷积核高度, 卷积核宽度)
      当前你持有的输入矩阵是形状为(6,6)的二维张量,卷积核是形状为(3,3)的二维张量,均缺少批量、通道维度。

正确实现代码

首先修正原代码中Z_numpy的笔误(应为m_numpy),再调整张量维度后调用即可:

import numpy as np
import torch
import torch.nn.functional as F

# 构造输入矩阵
np.random.seed(0)
m_numpy = np.random.choice([0,1],p=(0.5,0.5),size=(6,6))
m = torch.from_numpy(m_numpy).type(torch.FloatTensor)
# 扩充维度:变为 [批量大小=1, 输入通道数=1, 高度=6, 宽度=6]
m = m.unsqueeze(0).unsqueeze(0)

# 构造卷积核
krnl = torch.tensor([[1,1,1],
                    [1,0,1],
                    [1,1,1]]).type(torch.FloatTensor)
# 扩充维度:变为 [输出通道数=1, 输入通道数=1, 卷积核高=3, 卷积核宽=3]
krnl = krnl.unsqueeze(0).unsqueeze(0)

# 执行卷积运算
output = F.conv2d(m, krnl, bias=None, padding='same', stride=1)
# 提取二维卷积结果(去掉批量、通道维度)
output_2d = output.squeeze()

补充说明

如果使用的PyTorch版本较低,不支持字符串形式的padding='same',可以手动传入填充数值:3x3卷积核要实现输入输出尺寸一致,只需设置padding=1即可,兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:45:02