CNN中卷积层和池化层

卷积层

  • 在PyTorch中内置了torch.nn.Conv2d()方法在三维图片输入是应用2D卷积,其中重要参数包括in_channels、out_channels、kernel_size、stride和padding等
  • in_channels:代表输入的特征层数,如输入通道数为3的彩色图像,则in_channels=3
  • out_channels:代表输出的特征层数,也就是卷积核的个数,这是一个超参数。
  • kernel_size:代表卷积核的大小,通常使用3×3或者5×5这样的小卷积核,这个参数是一个元组,如果卷积核的长和宽一样,可以直接指定为int数值,如kernel_size=3.
  • stride:代表跨度,卷积核在图像上是滑动提取特征的,stride代表每次滑动的步长,如果stride为1,表示步长为1个像素,也可以使用其他步长,如设置stride为2,则卷积核在图像上每次滑动2个像素,显然这样会使输出的特征图像 变为大约原来的一半大小,所以stride可影响生成的特征图的大小
  • padding:代表填充,它表示卷积核在图像边缘的处理方式。如果使用3×3的卷积核提取图片特征,stride使用默认值1,那么得到的特征图会比原图小2个像素,这时,如果设置padding为1,那就表示原图的4条变使用0各填充了1个像素,原图大小相当于变为(height+2,width+2,channel),这样使用3×3卷积核得到的特征图大小为(height,width,N)也就是说,得到的特征图大小与原图一致了,所以,可以通过padiing来控制卷积得到的特征图大小

在PyTorch中使用图片的默认形状为(channel,height,width)

构建一个卷积层代码
复制代码
#随机生成输入,形状为(20,3,256,256),可以认为是生成了20张大小为(256,256,3)的彩色图像
input=torch.randn(20,3,256,256)
#输入的channel为3,我们使用16个卷积核,也就是out_channels=16
#卷积核大小设置为3×3,stride跨度为1,padding填充为1
conv_layer=nn.Conv2d(3,16,(3,3),stride=1,padding=1)#初始化卷积层,使用2D卷积
output=conv_layer(input)#在输入时调用这个卷积层
print(output.shape)
结果

上面的代码中可以认为使用随机函数生成了20张大小为(256,256,3)的图片,由于这里的卷积层使用了16个3×3的卷积核(out_channel=16)且padding为1,stride默认也是1,因此经过卷积层计算得到的特征图长和宽不变,通道数为16,最后输出的特征形状为torch.size(20,16,256,256)

池化层

在PyTorch中选择使用nn.MaxPool2d()方法来初始化一个最大池化层,但因池化层并没有可训练的参数,在实际构建卷积神经网络时,为了省去池化层初始化这一步,我们尝尝使用torch.max_pool2d()方法来直接应用最大池化,这个方法最重要的一个参数是kernel_size,也就是池化核的大小,举例来说,如果设置池化核的参数kernel_size=2,池化层计算后,输出的高和宽会变为原来的一半

构建池化层代码
复制代码
#随机生成批次图像
img_batch=torch.randn((64,3,256,256))
pool_out=torch.max_pool2d(img_batch,kernel_size=(2,2)) #应用最大池化
print(pool_out.shape)
结果

上述代码中生成了批次图像,形状为(64,3,256,256),经过最大池化运算后,输出形状为(64,3,128,128),可以看到图像的高和宽均变为原来的一半,这是因为当调用torch.max_pool2d()方法应用最大池化时,设置了kernel_size为(2,2),这表示池化核将从2×2大小的输入中选择最大的值作为输出,这样的效果就是高和宽均缩小为原来的一半

相关推荐
Gigavision5 小时前
基于BUAA-MIHR数据集的噪声解耦对比学习算法
人工智能·python·深度学习·算法
计算机编程-吉哥6 小时前
YOLO26 vs YOLO11 vs YOLOv8:深度学习咖啡果实成熟度分割系统【计算机毕业设计选题推荐】
人工智能·python·深度学习·yolo·django·毕业设计
YOLO数据集集合8 小时前
高铁轨道紧固件损坏检测数据集 | 高铁巡检 紧固件缺陷 轨道安全9093期
人工智能·目标检测·计算机视觉·目标跟踪·轨道·铁轨紧固件·铁轨
金色印象11 小时前
【论文解读】DRSN:把软阈值去噪“内化”进残差网络的强噪声故障诊断方法
深度学习·残差网络·故障诊断·软阈值·收缩函数·强噪声·drsn
Ivanqhz13 小时前
数据搬运是性能关键
java·服务器·网络·人工智能·深度学习
潜心一志14 小时前
HALCON软件——基础语法
学习·计算机视觉
阳明山水14 小时前
校准分位数驱动智能库存决策
人工智能·深度学习·算法·机器学习·架构
xx_xxxxx_14 小时前
论文阅读-Search-R1
人工智能·深度学习·机器学习·强化学习
Ivanqhz14 小时前
Slope One 算法详解:与矩阵分解、共现矩阵的异同
java·服务器·网络·人工智能·深度学习
Ivanqhz15 小时前
Ping-Pong 双缓冲
开发语言·人工智能·python·深度学习·mlir