对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程序设计入门(2)变量类型简介
Jun 16 Python
python实现定时播放mp3
Mar 29 Python
详谈Pandas中iloc和loc以及ix的区别
Jun 08 Python
Python SMTP发送邮件遇到的一些问题及解决办法
Oct 24 Python
Django 数据库同步操作技巧详解
Jul 19 Python
pycharm新建Vue项目的方法步骤(图文)
Mar 04 Python
python实现引用其他路径包里面的模块
Mar 09 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
Apr 20 Python
详解scrapy内置中间件的顺序
Sep 28 Python
python调用摄像头的示例代码
Sep 28 Python
python将图片转为矢量图的方法步骤
Mar 30 Python
OpenCV-Python实现轮廓拟合
Jun 08 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比较多维数组中值的大小排序实现代码
2012/09/08 PHP
PHP中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
基于jQuery的图片大小自动适应实现代码
2010/11/17 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
原生js做的手风琴效果的导航菜单
2013/11/08 Javascript
javascript实现图片自动和可控的轮播切换特效
2015/04/13 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
2016/06/17 Javascript
js绘制购物车抛物线动画
2020/11/18 Javascript
jQuery滚动插件scrollable.js用法分析
2017/05/25 jQuery
node.js中cluster的使用教程
2017/06/09 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
基于jQuery.i18n实现web前端的国际化
2018/05/04 jQuery
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
解决vue单页面修改样式无法覆盖问题
2019/08/05 Javascript
JavaScript中this函数使用实例解析
2020/02/21 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
详解在Python中处理异常的教程
2015/05/24 Python
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
pandas实现选取特定索引的行
2018/04/20 Python
解决Python pandas df 写入excel 出现的问题
2018/07/04 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
详解Python做一个名片管理系统
2019/03/14 Python
Pandas中DataFrame的分组/分割/合并的实现
2019/07/16 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
2020/04/08 Python
医科学校毕业生自荐信
2013/11/09 职场文书
酒店管理专业毕业生推荐信
2013/11/10 职场文书
施工工地安全标语
2014/06/07 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
解除租房协议书
2014/12/03 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript