1.当设置group=1时:
conv = nn.Conv2d(in_channels=6, out_channels=6, kernel_size=1, groups=1) conv.weight.data.size()
返回:
torch.Size([6, 6, 1, 1])
另一个例子:
conv = nn.Conv2d(in_channels=6, out_channels=3, kernel_size=1, groups=1) conv.weight.data.size()
返回:
torch.Size([3, 6, 1, 1])
可见第一个值为out_channels的大小,第二个值为in_channels的大小,后面两个值为kernel_size
2.当设置为group=2时
conv = nn.Conv2d(in_channels=6, out_channels=6, kernel_size=1, groups=2) conv.weight.data.size()
返回:
torch.Size([6, 3, 1, 1])
3.当设置group=3时
conv = nn.Conv2d(in_channels=6, out_channels=6, kernel_size=1, groups=3) conv.weight.data.size()
返回:
torch.Size([6, 2, 1, 1])
4.当设置group=4时
conv = nn.Conv2d(in_channels=6, out_channels=6, kernel_size=1, groups=4) conv.weight.data.size()
报错:
ValueError: in_channels must be divisible by groups
groups的值必须能整除in_channels
注意:
同样也要求groups的值必须能整除out_channels,举例:
conv = nn.Conv2d(in_channels=6, out_channels=3, kernel_size=1, groups=2) conv.weight.data.size()
否则会报错:
ValueError: out_channels must be divisible by groups
5.当设置group=in_channels时
conv = nn.Conv2d(in_channels=6, out_channels=6, kernel_size=1, groups=6) conv.weight.data.size()
返回:
torch.Size([6, 1, 1, 1])
所以当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输出
在实际实验中,同样的网络结构下,这种分组的卷积效果是好于未分组的卷积的效果的。
以上这篇对pytorch的函数中的group参数的作用介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
本文向大家介绍Swift中的可变参数函数介绍,包括了Swift中的可变参数函数介绍的使用技巧和注意事项,需要的朋友参考一下 可变参数函数指的是可以接受任意多个参数的函数,我们最熟悉的可能就是 NSString 的 -stringWithFormat:方法了。在 Objective-C 中,我们使用这个方法生成字符串的写法是这样的: 这个方法中的参数是可以任意变化的,参数的第一项是需要格式化的字符串
本文向大家介绍详细介绍Python函数中的默认参数,包括了详细介绍Python函数中的默认参数的使用技巧和注意事项,需要的朋友参考一下 最近我在一段Python代码中发现了一个因为错误的使用默认参数而产生的非常恶心的bug。如果您已经知道关于默认参数的全部内容了,只是想嘲笑一下我这可笑的错误,请直接跳到本文末尾。哎,这段代码是我写的,但是我非常确定那天我被恶魔附体了。你懂的,有时候就是这样。 本文
本文向大家介绍java 中函数的参数传递详细介绍,包括了java 中函数的参数传递详细介绍的使用技巧和注意事项,需要的朋友参考一下 java中函数的参数传递 总结: 1.将对象(对象的引用)作为参数传递时传递的是引用(相当于指针)。也就是说函数内对参数所做的修改会影响原来的对象。 2.当将基本类型或基本类型的包装集作为参数传递时,传递的是值。也就是说函数内对参数所做的修改不会影响原来的变
本文向大家介绍Python中函数的参数传递与可变长参数介绍,包括了Python中函数的参数传递与可变长参数介绍的使用技巧和注意事项,需要的朋友参考一下 1.Python中也有像C++一样的默认缺省函数 定义有默认参数的函数时,这些默认值参数 位置必须都在非默认值参数后面。 调用时提供默认值参数值时,使用提供的值,否则使用默认值。 2.Python可以根据参数名传参数 第4行,没有指定参数名,按照顺
在使用Pytorch的DataLoader实用程序时,在sampler中,的用途是什么?在中有一个参数。
本文向大家介绍javascript中函数作为参数调用的方法,包括了javascript中函数作为参数调用的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript中函数作为参数调用的方法。分享给大家供大家参考。具体分析如下: 先来看示例: 这段代码执行的顺序是:从上往下顺序解释执行,这是JS的规定。 这里主要说明一下m.eachMap()中函数做为参数是怎么传递并执行的: