nn.Conv2d的group参数学习笔记
nn.Conv2d的group参数
卷积,想必冲浪在一线的大家伙们都已经耳熟能详了,自从深度学习火爆全网之后,大家都在学习一线知识,那么今天想来讲讲关于Pytorch这个深度学习框架下的nn.Conv2d的group这个参数。
group这个参数是为分组卷积而创造出来的,分组卷积的好处呢?就是减少参数量,还能够得到更多的feature map。
这篇文章具体是想探讨一下分组卷积和普通的卷积之后的结果是否相同呢?
首先先来说一下答案:当参与卷积的卷积核是一样的时候,结果是一样,否则则是不一样的。
诶诶诶,先别着急喷,这里我想表达的意思,您可能还不够理解,请接着往下看吧。
关于group这个参数,官网给的解释是这样子的。
大意是什么呢?大概是当groups=1的时候,假设此时 输入的通道数为n,输出的通道数为m,那么理解为把输入的通道分成1组(不分组),每一个输出通道需要在所有的输入通道上做卷积,也就是一种参数共享的局部全连接。
如果把groups改成2,可以理解为把 输入的通道分成两组,此时每一个输出通道只需要在其中一组上做卷积。
如果groups=in_channels,也就是把 输入的通道分成in_channels组(每一组也就一个通道),此时每一个输出通道只需要在其中一个输入通道上做卷积。
不太理解吧?
假如group=2的话,就是把输入通道一分为二,比如我现在的输入格式为 2 ∗ 3 ∗ 3 2*3*3 2∗3∗3的话,现在就是将输入改为 1 ∗ 3 ∗ 3 1*3*3 1∗3∗3,同样的我对应的卷积核也会变为原来通道的一半。
那分组卷积和普通卷积的结果还会不会相同呢?
看下面的代码吧。
import torch
import torch.nn as nn
from torch.autograd import Vari