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大小的输入中选择最大的值作为输出,这样的效果就是高和宽均缩小为原来的一半

相关推荐
老鱼说AI9 小时前
大规模并发处理器程序设计(PMPP)讲解(CUDA架构):第四期:计算架构与调度
c语言·深度学习·算法·架构·cuda
Hello.Reader11 小时前
深度学习 — 从人工智能到深度学习的演进之路(一)
人工智能·深度学习
做cv的小昊12 小时前
结合代码读3DGS论文(10)——ICLR 2025 3DGS加速&压缩新工作Sort-Free 3DGS论文及代码解读
论文阅读·人工智能·游戏·计算机视觉·3d·图形渲染·3dgs
剑穗挂着新流苏31213 小时前
114_PyTorch 进阶:模型保存与读取的两大方式及“陷阱”避坑指南
人工智能·pytorch·深度学习
棱镜研途15 小时前
EI会议分享 | 2026年图像处理与模式识别国际会议(IC-IPPR 2026)【SPIE出版】
图像处理·人工智能·深度学习·目标检测·计算机·计算机视觉·视觉检测
不懒不懒15 小时前
【实战案例:基于特征匹配的指纹识别系统开发】
人工智能·opencv·计算机视觉
von Neumann16 小时前
大模型从入门到应用——HuggingFace:Transformers-[AutoClass]
人工智能·深度学习·机器学习·ai·大模型·huggingface
羊小猪~~16 小时前
【论文精度】Transformer---大模型基石
人工智能·深度学习·考研·算法·机器学习·transformer
困死,根本不会17 小时前
OpenCV视觉舵机控制系统:从坐标检测到串口控制完整实现
人工智能·opencv·计算机视觉