'''
groups:定义为分组:
计算公司:输出与输入通道同时分为整数的倍数,一一对应卷积。
表现:
groups=2:torch.Size([6, 2, 1, 1])
如果将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输出
groups=3:torch.Size([6, 3, 1, 1])
groups=1:torch.Size([6, 6, 1, 1])
当group=1时,该卷积层需要6*6*1*1=36个参数,即需要6个6*1*1的卷积核.
也就是6个卷积核与6个输入相乘。是6*H_in*W_in的输入整个乘以一个6*1*1的卷积核,乘以6次。
总结:就是输入,输出的深度同时除以groups。
效果:在实际实验中,同样的网络结构下,这种分组的卷积效果是好于未分组的卷积的效果的。
2、为什么要设置groups参数,有什么优点?
为了在GPU上并行计算:
普通的