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

相关推荐
高洁012 小时前
AI智能体搭建(3)
人工智能·深度学习·算法·数据挖掘·知识图谱
Coovally AI模型快速验证3 小时前
仅192万参数的目标检测模型,Micro-YOLO如何做到目标检测精度与效率兼得
人工智能·神经网络·yolo·目标检测·计算机视觉·目标跟踪·自然语言处理
Hcoco_me4 小时前
大模型面试题71: DPO有什么缺点?后续对DPO算法有哪些改进?
人工智能·深度学习·算法·自然语言处理·transformer·vllm
Mrs.Gril4 小时前
目标检测: rtdetr在RK3588上部署
人工智能·目标检测·计算机视觉
qunaa01014 小时前
【计算机视觉】YOLOv10n-SPPF-LSKA托盘识别与检测
人工智能·yolo·计算机视觉
管牛牛4 小时前
图像的几何变换
人工智能·opencv·计算机视觉
哥布林学者5 小时前
吴恩达深度学习课程五:自然语言处理 第一周:循环神经网络 课后习题与代码实践
深度学习·ai
TTGGGFF5 小时前
人工智能:[特殊字符] Bert-Base-Chinese预训练模型部署手册
人工智能·深度学习·bert
kebijuelun5 小时前
DeepSeek Engram:给大模型新增一条“记忆稀疏”轴
人工智能·深度学习·语言模型·transformer
香草泡芙5 小时前
AI Agent 深度解析:原理、架构与未来应用浪潮
人工智能·深度学习·机器学习