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

相关推荐
余生H25 分钟前
transformer.js(三):底层架构及性能优化指南
javascript·深度学习·架构·transformer
罗小罗同学1 小时前
医工交叉入门书籍分享:Transformer模型在机器学习领域的应用|个人观点·24-11-22
深度学习·机器学习·transformer
孤独且没人爱的纸鹤1 小时前
【深度学习】:从人工神经网络的基础原理到循环神经网络的先进技术,跨越智能算法的关键发展阶段及其未来趋势,探索技术进步与应用挑战
人工智能·python·深度学习·机器学习·ai
阿_旭1 小时前
TensorFlow构建CNN卷积神经网络模型的基本步骤:数据处理、模型构建、模型训练
人工智能·深度学习·cnn·tensorflow
羊小猪~~1 小时前
tensorflow案例7--数据增强与测试集, 训练集, 验证集的构建
人工智能·python·深度学习·机器学习·cnn·tensorflow·neo4j
极客代码1 小时前
【Python TensorFlow】进阶指南(续篇三)
开发语言·人工智能·python·深度学习·tensorflow
Seeklike1 小时前
11.22 深度学习-pytorch自动微分
人工智能·pytorch·深度学习
华清远见IT开放实验室1 小时前
【每天学点AI】实战图像增强技术在人工智能图像处理中的应用
图像处理·人工智能·python·opencv·计算机视觉
只怕自己不够好1 小时前
《OpenCV 图像缩放、翻转与变换全攻略:从基础操作到高级应用实战》
人工智能·opencv·计算机视觉
YRr YRr2 小时前
如何使用 PyTorch 实现图像分类数据集的加载和处理
pytorch·深度学习·分类