对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 相关文章推荐
简单介绍Python中的len()函数的使用
Apr 07 Python
python负载均衡的简单实现方法
Feb 04 Python
TensorFlow实现简单卷积神经网络
May 24 Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 Python
Python定时任务APScheduler的实例实例详解
Jul 22 Python
numpy.array 操作使用简单总结
Nov 08 Python
python时间与Unix时间戳相互转换方法详解
Feb 13 Python
150行Python代码实现带界面的数独游戏
Apr 04 Python
Django实现微信小程序支付的示例代码
Sep 03 Python
Python类成员继承重写的实现
Sep 16 Python
python boto和boto3操作bucket的示例
Oct 30 Python
想学画画?python满足你!
Dec 24 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
图象函数中的中文显示
2006/10/09 PHP
深入解析php之sphinx
2013/05/15 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
jQuery 渐变下拉菜单
2009/12/15 Javascript
javascript面向对象的方式实现的弹出层效果代码
2010/01/28 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
2011/02/23 Javascript
jQuery版Tab标签切换
2011/03/16 Javascript
ajax 同步请求和异步请求的差异分析
2011/07/04 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
一个简单的弹性返回顶部JS代码实现介绍
2013/06/09 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
浅析javascript的return语句
2015/12/15 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
前端js实现文件的断点续传 后端PHP文件接收
2016/10/14 Javascript
原生js实现电商侧边导航效果
2017/01/19 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
详解微信小程序Radio选中样式切换
2017/07/06 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
2017/09/08 Javascript
vue.js element-ui validate中代码不执行问题解决方法
2017/12/18 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
python图像常规操作
2017/11/11 Python
Python 3.7新功能之dataclass装饰器详解
2018/04/21 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
Python3 翻转二叉树的实现
2019/09/30 Python
python如何求100以内的素数
2020/05/27 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
2014年学校卫生工作总结
2014/11/20 职场文书
质量保证书怎么写
2015/02/27 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
介绍一下28个JS常用数组方法
2022/05/06 Javascript