pytorch Conv2d令人迷惑的几个参数

本篇仅用来记录nn.Conv2d()中容易令人不解的几个参数

1. nn.Conv2d() 的输出维度的计算

相信大家都看过官网给出的计算方式:
在这里插入图片描述
直接套公式即可, 但需要注意的是, 最终计算的结果要向下取整.

2. dilation

官方解释为:

dilation (int or tuple, optional) – Spacing between kernel elements. Default: 1

翻译过来是卷积元素之间的间距. nn.Conv2d()中默认为1, 但是请注意, 1不是指卷积元素间隔为1, 而是间隔为0, 这个定义确实有点奇怪, 但也有人说如果按照stride理解就还好:
在这里插入图片描述

3. groups

字面意思可能不太好理解, 画个图就明白了:
在这里插入图片描述
即,groups不为1时, conv2d就会拆成groups个,每一个的input channel等于原始输入的groups分之1, output channel也是原始输出的groups分之一(这也是要求groups必须能被input channel和output channel整除的原因), 最后会将各个conv2d的结果concate. groups参数并不影响最终输出的shape, 即以上跟conv2d(4, 8, groups=1)最终输出shape是一致的, 参考以下代码:

	from torch import nn
	x = torch.randn([4, 64, 64])
	conv_grouped = nn.Conv2d(4, 8, 1, groups=2, bias=False)
	output_grouped = conv_grouped(x)
	print(output_grouped.shape)

	
	conv1 = nn.Conv2d(2, 4, 1, bias=False)
	conv2 = nn.Conv2d(2, 4, 1, bias=False)
	output1 = conv1(x[:2,])
	output2 = conv2(x[2:,])
	output_manual = torch.cat((output1, output2), dim=0)
	print(output_manual.shape)

输出:

torch.Size([8, 64, 64])
torch.Size([8, 64, 64])
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值