卷积操作
一、torch.nn中Convolution Layers函数的介绍
1. 参数介绍
-
nn.Conv1d: Conv取自Convolution的前四个字母,1d代表的是一个一维操作。
-
nn.Conv2d: 2d表示是一个二维的操作,比如图像就是一个二维的。
-
其余参数不常用,见官网文档:torch.nn — PyTorch 2.0 documentation
2. torch.nn和torch.nn.functional的区别
-
torch.nn是对torch.nn.functional的一个封装,让使用torch.nn.functional里面的包的时候更加方便
-
torch.nn包含了torch.nn.functional,打个比方,torch.nn.functional相当于开车的时候齿轮的运转,torch.nn相当于把车里的齿轮都封装好了,为我们提供一个方向盘
-
如果只是简单应用,会torch.nn就好了。但要细致了解卷积操作,需要深入了解torch.nn.functional
-
打开torch.nn.functional的官方文档,可以看到许多跟卷积相关的操作:torch.nn.functional — PyTorch 2.0 documentation
二、torch.nn.functional.conv2d 介绍
torch.nn.functional.conv2d(input, weight, bias=None, stride=1, padding=0, dilation=1, groups=1)
1. 参数详解
-
input: 输入,数据类型为tensor,形状尺寸规定为:(minibatch, 几个通道(in_channels), 高, 宽)
-
weight: 权重。更专业地来说可以叫卷积核,形状尺寸规定为:(输出的通道(out_channel), \(in\_channel\over{groups}\)(groups一般取1), 高, 宽 )
-
bias: 偏置。
-
strids: 步幅。
-
padding: 填充。
2. 举例讲解参数strids
(1)理论
输入一个5×5的图像,其中的数字代表在每个像素中的颜色显示。卷积核设置为3×3的大小。
-
strids参数的输入格式是_单个数_或者形式为 (sH,sW) 的元组,可以理解成:比如输入单个数:strids=1,每次卷积核在图像中向上下或左右移1位;如果输入_strids=(2,3)_,那么每次卷积核在图像中左右移动(横向移动)时,是移动2位,在图像中上下移动(纵向移动)时,是移动3位。
-
本例设置_strids=1_
第一次移位:
-
基于上述的假设,在做卷积的过程中,需要将卷积核将图像的前三行和前三列进行匹配: