pytorch的conv2d函数groups分组卷积使用及理解

本文主要探讨PyTorch中conv2d函数的groups参数,解释了当group分别为1和3时卷积计算的区别。分组卷积在减少参数数量的同时,能够提升网络性能。通过对比标准卷积与分组卷积的计算过程,强调了分组卷积在GPU并行计算上的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

重点在于groups参数的理解

1、groups参数是如何影响卷积计算的

conv = nn.Conv2d(in_channels=6, out_channels=6, kernel_size=1, groups=3)
conv.weight.data.size()

输出:

torch.Size([6, 2, 1, 1])

(此时转置参数Transposed默认为False,源码如下)

当group=1时,该卷积层需要6*6*1*1=36个参数,即需要6个6*1*1的卷积核

计算时就是6*H_in*W_in的输入整个乘以一个6*1*1的卷积核,得到输出的一个channel的值,即1*H_out*W_out。这样经过6次与6个卷积核计算就能够得到6*H_out*W_out的结果了

 

如果将group=3时,卷积核大小为torch.Size([6, 2, 1, 1]),即6个2*1*1的卷积核,只需要需要6*2*1*1=12个参数

那么每组计算就只被in_channels/groups=2个channels的卷积核计算,当然这也会将输入分为三份大小为2*H_in*W_in的小输入,分别与2*1*1大小的卷积核进行三次运算,然后将得到的3个2*H_out*W_out的小输出concat起来得到最后的6*H_out*W_out输出

在实际实验中,同样的网络结构下,这种分组的卷积效果是好于未分组的卷积的效果的。

2、为什么要设置groups参数,有什么优点?

为了在GPU上并行计算:

标准卷积的计算如下图:

举个例子,假设有一个3×3大小的卷积层,其输入通道为16、输出通道为32。
那么一般的操作就是用32个3×3的卷

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值