二维卷积nn.Conv2d()函数的用法
nn.Conv2d(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True))
参数:
in_channel
: 输入数据的通道数,当输入为RGB图片时,in_channels=3
。out_channel
:输出数据的通道数,这个根据模型调整。kennel_size
: 卷积核大小,可以是int
,或tuple
。
kennel_size = 3
,表示卷积核的大小3×3
。
kennel_size =(3,5)
,表示卷积核的大小为3×5
,是矩形的卷积核。卷积核的高度为3
,宽度为5
。stride
:步长,默认stride = 1
。
stride=2
:表示卷积核上下左右移动的步长均为2
。
stride=(2,3)
,表示上下移动步长为2
,左右为3
。| ->2
,一 -> 3
padding
:表示在被卷积对象上下左右填充的数量。padding=0
,则表示不填充,padding=2
,则表示上下左右各填充2
。bias
:表示是否添加偏置项。
例如
import torch
import torch.nn as nn
x = torch.randn(12,18,45,36) # 输入通道数为18
layer = nn.Conv2d(in_channels=18, out_channels=28, kernel_size = (3,5), stride = (2,3))
y = layer(x)
print(y.shape)
输出:
torch.Size([12, 28, 22, 11])
计算方法:
待处理数据的高度
H
=
45
H = 45
H=45,宽度
W
=
36
W = 36
W=36,则卷积之后的高度和宽度分为:
h = H − k e r n e l s i z e [ 0 ] + 2 ∗ p a d d i n g [ 0 ] s t r i d e [ 0 ] + 1 h = \frac{H-kernel_size[0] + 2*padding[0]}{stride[0]}+1 h=stride[0]H−kernelsize[0]+2∗padding[0]+1 → \to → h = 45 − 3 + 2 ∗ 0 2 + 1 = 22 h = \frac{45 - 3 + 2*0}{2}+1 = 22 h=245−3+2∗0+1=22
w = W − k e r n e l s i z e [ 1 ] + 2 ∗ p a d d i n g [ 1 ] s t r i d e [ 1 ] + 1 w = \frac{W-kernel_size[1] + 2*padding[1]}{stride[1]}+1 w=stride[1]W−kernelsize[1]+2∗padding[1]+1 → \to → w = 36 − 5 + 2 ∗ 0 3 + 1 = 11 w = \frac{36-5 + 2*0}{3}+1 = 11 w=336−5+2∗0+1=11