对pytorch的函数中的group参数的作用介绍


Posted in Python onFebruary 18, 2020

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参数的作用介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
Oct 18 Python
举例讲解Python中字典的合并值相加与异或对比
Jun 04 Python
Django URL传递参数的方法总结
Aug 28 Python
Python文件操作,open读写文件,追加文本内容实例
Dec 14 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
Jan 20 Python
浅析Python四种数据类型
Sep 26 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
Dec 15 Python
Python使用统计函数绘制简单图形实例代码
May 15 Python
python 实现Flask中返回图片流给前端展示
Jan 09 Python
深入浅析python 中的self和cls的区别
Jun 20 Python
python用分数表示矩阵的方法实例
Jan 11 Python
python实现股票历史数据可视化分析案例
Jun 10 Python
基于python3实现倒叙字符串
Feb 18 #Python
Python日期格式和字符串格式相互转换的方法
Feb 18 #Python
Python数组并集交集补集代码实例
Feb 18 #Python
通过python检测字符串的字母
Feb 18 #Python
Python安装whl文件过程图解
Feb 18 #Python
python下载卫星云图合成gif的方法示例
Feb 18 #Python
如何使用python传入不确定个数参数
Feb 18 #Python
You might like
PHP var_dump遍历对象属性的函数与应用代码
2010/06/04 PHP
js防止表单重复提交实现代码
2012/09/05 Javascript
js showModalDialog 弹出对话框的简单实例(子窗体)
2014/01/07 Javascript
简单js代码实现selece二级联动(推荐)
2014/02/18 Javascript
Js实现动态添加删除Table行示例
2014/04/14 Javascript
Js实现网页键盘控制翻页的方法
2014/10/30 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
浅谈几种常用的JS类定义方法
2016/06/08 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
2016/09/09 Javascript
快速解决js开发下拉框中blur与click冲突
2016/10/10 Javascript
vue移动端实现红包雨效果
2020/06/23 Javascript
微信小程序实现富文本图片宽度自适应的方法
2019/01/20 Javascript
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
vue watch关于对象内的属性监听
2019/04/22 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
JavaScript逻辑运算符相关总结
2020/09/04 Javascript
一分钟学会JavaScript中的try-catch
2020/12/14 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
[02:48]DOTA2英雄基础教程 暗夜魔王
2013/12/12 DOTA
[54:02]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 IG vs VGJ.T
2018/04/03 DOTA
[原创]使用豆瓣提供的国内pypi源
2017/07/02 Python
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
TensorFlow安装及jupyter notebook配置方法
2017/09/08 Python
使用numpy和PIL进行简单的图像处理方法
2018/07/02 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
python 删除字符串中连续多个空格并保留一个的方法
2018/12/22 Python
Python版中国省市经纬度
2020/02/11 Python
在keras下实现多个模型的融合方式
2020/05/23 Python
Pandas中两个dataframe的交集和差集的示例代码
2020/12/13 Python
期中考试后的反思
2014/02/08 职场文书
《小小竹排画中游》教学反思
2014/02/26 职场文书
如何撰写创业策划书
2019/06/27 职场文书
Python实现滑雪小游戏
2021/09/25 Python
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android