PyTorch中Conv2d(groups=1)输入特征图的合并机制技术问询
PyTorch中groups=1的Conv2d输入通道合并方式解析
先明确你定义的卷积层参数:输入通道数2,输出通道数3,卷积核大小1×1,分组数groups=1,无偏置。
当groups=1时,每个输出通道对应一组形状为(输入通道数, 核高, 核宽)的卷积核,也就是这里每个输出通道会用到一个(2,1,1)的卷积核——每个输入通道都对应一个独立的权重参数。
你疑惑的合并方式,不是简单的输入特征图直接相加,而是加权求和:每个输入特征图先和对应的卷积核权重做逐元素乘法,再把所有输入通道的运算结果累加起来,得到该输出通道的特征图。
举个可验证的代码例子:
import torch import torch.nn as nn # 初始化你定义的卷积层 conv_layer = nn.Conv2d(2, 3, 1, groups=1, padding=0, bias=False) # 卷积核权重形状为(3,2,1,1):3个输出通道,每个通道对应2个1×1权重 print(conv_layer.weight.shape) # 构造测试输入:batch=1,2个通道,2×2的特征图 test_input = torch.randn(1, 2, 2, 2) # 得到卷积输出 conv_output = conv_layer(test_input) # 手动计算第一个输出通道的结果 w0 = conv_layer.weight[0, 0, 0, 0].item() # 第一个输入通道对应的权重 w1 = conv_layer.weight[0, 1, 0, 0].item() # 第二个输入通道对应的权重 manual_result = test_input[0,0,:,:] * w0 + test_input[0,1,:,:] * w1 # 对比手动计算和卷积层输出的结果 print(torch.allclose(conv_output[0,0,:,:], manual_result)) # 输出True,验证加权求和逻辑
简单来说,groups=1时,每个输出通道的生成逻辑是:对所有输入通道的特征图,分别用对应的卷积核权重加权后,再累加得到最终结果,每个输入通道的权重都是独立可学习的参数,而非固定的等权加法。
内容的提问来源于stack exchange,提问作者Marco Jakob
相关产品推荐
相关产品推荐

