pytorch的函数中的group参数的作用
1.当设置group=1时:
conv = nn.Conv2d(in_channels=, out_channels=, kernel_size=, groups=)
conv.weight.data.size()
返回:
torch.Size([, , , ])
另一个例子:
conv = nn.Conv2d(in_channels=, out_channels=, kernel_size=, groups=)
conv.weight.data.size()
返回:
torch.Size([, , , ])
可见第一个值为out_channels的大小,第二个值为in_channels的大小,后面两个值为kernel_size
2.当设置为group=2时
conv = nn.Conv2d(in_channels=, out_channels=, kernel_size=, groups=)
conv.weight.data.size()
返回:
torch.Size([, , , ])
3.当设置group=3时
conv = nn.Conv2d(in_channels=, out_channels=, kernel_size=, groups=)
conv.weight.data.size()
返回:
torch.Size([, , , ])
4.当设置group=4时
conv = nn.Conv2d(in_channels=, out_channels=, kernel_size=, groups=)
conv.weight.data.size()
报错:
ValueError: in_channels must be divisible by groups
groups的值必须能整除in_channels
注意:
同样也要求groups的值必须能整除out_channels,举例:
conv = nn.Conv2d(in_channels=, out_channels=, kernel_size=, groups=)
conv.weight.data.size()
否则会报错:
ValueError: out_channels must be divisible by groups
5.当设置group=in_channels时
conv = nn.Conv2d(in_channels=, out_channels=, kernel_size=, groups=)
conv.weight.data.size()
返回:
torch.Size([, , , ])
所以当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参数的作用的更多相关文章
- pytorch的函数中的dilation参数的作用
如果我们设置的dilation=0的话,效果如图: 蓝色为输入,绿色为输出,可见卷积核为3*3的卷积核 如果我们设置的是dilation=1,那么效果如图: 蓝色为输入,绿色为输出,卷积核仍为3*3, ...
- linux中probe函数中传递的参数来源(上)
点击打开链接 上一篇中,我们追踪了probe函数在何时调用,知道了满足什么条件会调用probe函数,但probe函数中传递的参数我们并不知道在何时定义,到底是谁定义的,反正不是我们在驱动中定义的(当然 ...
- Python函数中如何定义参数
一.位置参数:根据函数定义时的参数位置传递参数#形参和实参的个数必须一致def fun1(): print("运行结果") print("this is fun1(),n ...
- 从Win32程序中的主函数中获取命令行参数
在标准C或者Win32控制台程序的main函数中,它们都有两个参数:"argc" 和 "argv",如下所示: int main(int argc, char ...
- python:函数中五花八门的参数形式(茴香豆的『回』字有四种写法)
毫不夸张的说,python语言中关于函数参数的使用,是我见过最为灵活的,随便怎么玩都可以,本文以数学乘法为例,演示几种不同的传参形式: 一.默认参数 def multiply1(x, y): retu ...
- Python函数中的可变参数
在Python函数中,还可以定义可变参数. 如:给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……. 要定义出这个函数,我们必须确定输入的参数.由于参数个数不确定,我们首先想到可以把 ...
- C/C++函数中使用可变参数
先说明可变参数是什么,先回顾一下C++里面的函数重载,如果重复给出如下声明: int func(); int func(int); int func(float); int func(int, int ...
- function(函数)中的动态参数
我们可向函数传递动态参数,*args,**kwargs,首先我们来看*args,示例如下: 1.show(*args) def show(*args): print(args,type(arg ...
- 在C/C++函数中使用可变参数
原文链接地址:http://blog.csdn.net/djinglan/article/details/8425768 下面介绍在C/C++里面使用的可变参数函数. 先说明可变参数是什么,先回顾一下 ...
随机推荐
- Linux iptables用法与NAT
1.相关概念 2.iptables相关用法 3.NAT(DNAT与SNAT) 相关概念 防火墙除了软件及硬件的分类,也可对数据封包的取得方式来分类,可分为代理服务器(Proxy)及封包过滤机制(IP ...
- 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识
什么是REST REST 是 Representational State Transfer 的缩写. 它是一种架构的风格, 这种风格基于一套预定义的规则, 这些规则描述了网络资源是如何定义和寻址的. ...
- Google 工程师:为什么 CDN 对移动客户端加速“没有”效果
王者荣耀是近两年来比较火的手游,不少小伙伴都有玩过.玩这个游戏最怕的不是遇到猪一般的队友,也不是怕遇到神一样的对手.最让我们感到害怕和绝望的是,团战爆发时,而你 460 了.460 是一个玩家常用的词 ...
- 《IDEO,设计改变一切》(Change By Design)- 读书笔记
一.关于IDEO与设计思维 IDEO是一家世界顶级创意公司,而作者蒂姆布朗是IDEO的CEO.当然,在未阅读本书之前,我都是不知道的,也不会主动去了解IDEO和蒂姆布朗的.那么,我为什么要去读这样一本 ...
- 把ABP框架部署到Docker中
本文旨在将Abp项目部署到Docker容器中,借助Gitee存储,Jenkins持续构建,利用Docker Compose生成镜像.启动镜像,在官网给定的Abp项目中,虽然用到了Dockerfile. ...
- Vue父子组件传参新写法
以前我在写接受自定义事件是这么写的: 后来我在官网看到这样一种说法:可以用$event代替emit事件传入的参数,于是我写成了这样: 直到昨天Vetur更新,给我报了这么一个错误: 报错原因:事件不能 ...
- sublime text3插件解决输入法不跟随的问题
快捷键ctrl + shift +p 输入 install package 回车,调出插件搜索器, 在搜索栏中输入 IMESupport 回车安装插件. 即可解决问题.
- 校园生活app结对开发第二天
昨天进行了android studio的安装与配置遇到很多问题,在gradel处遇到很多问题,安装版本错误等等,在百度和书籍的帮助下成功安装 今天要做登陆界面开发
- centos安装jenkins
1.安装jdk yum install java java -version 2.安装jenkins 添加Jenkins库到yum库,Jenkins将从这里下载安装. wget -O /etc/yum ...
- PHP+nginx 启动后访问超时
场景 在Windows上, nginx配置并启动后, 访问报504超时 解决 很尴尬, php-cgi没启动 php-cgi -b