如果我在pytorch中有一个非常简单的2d卷积层,那么我们说:
nn.Conv2d(2, 3, 1, groups=1, padding=0, bias=False)
字符串正如我从pytorch文档中所理解的,如果一个集合groups=1,所有输入都卷积到所有输出。这意味着对于每个输出,有2个特征Map需要以某种方式组合。我预计这将以某种方式增加两个特征Map,但情况似乎并非如此。有人知道如何在技术上将两个特征Map合并为一个吗?
groups=1
cwtwac6a1#
使用groups=1,您将获得默认行为,其中每个过滤器(您有3个)考虑所有输入通道(2,在你的情况下)。相反,对于groups=2,一半输入通道与一半输出通道卷积:在你的例子中,3不能被2整除,所以你 * 不能 * 有groups=2。这意味着可学习参数减少了2倍,因为你将一半的输入与一半的过滤器结合在一起。基本上,groups > 1允许实现一个 * 分组卷积 *,这就像在一个均匀划分的输入上使用多个 * 较小的 * 卷积。无论如何,对于groups的任何值,你总是得到 * 一个 * 大小为N x 3 x H x W的输出Tensor,因为你有3个输出过滤器。有谁知道这两个功能Map是如何在技术上合并成一个的?各个组的输出被连接起来以获得最终的特征图。因为就好像多个nn.Conv2d(2, 3 // groups, 1)被应用到2 // groups输入通道。
groups=2
groups > 1
groups
N x 3 x H x W
nn.Conv2d(2, 3 // groups, 1)
2 // groups
jum4pzuy2#
我现在找到了解决方案。特征图是在密集层中完成的。理论可以在卷积演示中找到详细信息在this colab notebook范围内证明
2条答案
按热度按时间cwtwac6a1#
使用
groups=1
,您将获得默认行为,其中每个过滤器(您有3个)考虑所有输入通道(2,在你的情况下)。相反,对于groups=2
,一半输入通道与一半输出通道卷积:在你的例子中,3不能被2整除,所以你 * 不能 * 有groups=2
。这意味着可学习参数减少了2倍,因为你将一半的输入与一半的过滤器结合在一起。基本上,
groups > 1
允许实现一个 * 分组卷积 *,这就像在一个均匀划分的输入上使用多个 * 较小的 * 卷积。无论如何,对于
groups
的任何值,你总是得到 * 一个 * 大小为N x 3 x H x W
的输出Tensor,因为你有3个输出过滤器。有谁知道这两个功能Map是如何在技术上合并成一个的?
各个组的输出被连接起来以获得最终的特征图。因为就好像多个
nn.Conv2d(2, 3 // groups, 1)
被应用到2 // groups
输入通道。jum4pzuy2#
我现在找到了解决方案。特征图是在密集层中完成的。理论可以在卷积演示中找到详细信息
在this colab notebook范围内证明