对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 相关文章推荐
wxPython使用系统剪切板的方法
Jun 16 Python
Python实现的NN神经网络算法完整示例
Jun 19 Python
Python3按一定数据位数格式处理bin文件的方法
Jan 24 Python
Django中使用Whoosh进行全文检索的方法
Mar 31 Python
Python CVXOPT模块安装及使用解析
Aug 01 Python
Python获取时间范围内日期列表和周列表的函数
Aug 05 Python
python爬虫selenium和phantomJs使用方法解析
Aug 08 Python
Pycharm使用远程linux服务器conda/python环境在本地运行的方法(图解))
Dec 09 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
Dec 25 Python
Django静态资源部署404问题解决方案
May 11 Python
利用python 读写csv文件
Sep 10 Python
Python学习之时间包使用教程详解
Mar 21 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
用Flash图形化数据(二)
2006/10/09 PHP
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
分享php多功能图片处理类
2016/05/15 PHP
PHP中OpenSSL加密问题整理
2017/12/14 PHP
传智播客学习之java 反射
2009/11/22 Javascript
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路
2013/05/17 Javascript
使用javascript为网页增加夜间模式
2014/01/26 Javascript
Jquery Ajax解析XML数据(同步及异步调用)简单实例
2014/02/12 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
兼容主流浏览器的JS复制内容到剪贴板
2014/12/12 Javascript
jQuery实现复选框批量选择与反选的方法
2015/06/17 Javascript
详解js数组的完全随机排列算法
2016/12/16 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
three.js中文文档学习之通过模块导入
2017/11/20 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
2018/06/19 Javascript
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
Vue源码解析之数组变异的实现
2018/12/04 Javascript
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
2019/10/14 Javascript
vue设置导航栏、侧边栏为公共页面的例子
2019/11/01 Javascript
[05:02][DOTA2]DOTA进化论 第一期
2013/09/27 DOTA
Python向日志输出中添加上下文信息
2017/05/24 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
python的dict判断key是否存在的方法
2020/12/09 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
工程师自我评价怎么写
2013/09/19 职场文书
食堂厨师岗位职责
2014/08/25 职场文书
暑期培训心得体会
2014/09/02 职场文书
离婚起诉书范本
2015/05/18 职场文书
健康证明
2015/06/19 职场文书
Python Numpy库的超详细教程
2022/04/06 Python