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

相关推荐
深度学习入门2 小时前
学习深度学习是否要先学习机器学习?
人工智能·深度学习·神经网络·学习·机器学习·ai·深度学习入门
willhu20083 小时前
Tensorflow2保存和加载模型
深度学习·机器学习·tensorflow
Sylvan Ding3 小时前
远程主机状态监控-GPU服务器状态监控-深度学习服务器状态监控
运维·服务器·深度学习·监控·远程·gpu状态
Blossom.1184 小时前
从虚拟现实到混合现实:沉浸式体验的未来之路
人工智能·目标检测·机器学习·计算机视觉·语音识别·vr·mr
赵青临的辉4 小时前
简单神经网络(ANN)实现:从零开始构建第一个模型
人工智能·深度学习·神经网络
2303_Alpha4 小时前
深度学习入门:深度学习(完结)
人工智能·笔记·python·深度学习·神经网络·机器学习
深度学习入门5 小时前
机器学习,深度学习,神经网络,深度神经网络之间有何区别?
人工智能·python·深度学习·神经网络·机器学习·机器学习入门·深度学习算法
埃菲尔铁塔_CV算法5 小时前
深度学习驱动下的目标检测技术:原理、算法与应用创新
深度学习·算法·目标检测
动感光博6 小时前
Unity(URP渲染管线)的后处理、动画制作、虚拟相机(Virtual Camera)
开发语言·人工智能·计算机视觉·unity·c#·游戏引擎
欲掩6 小时前
神经网络与深度学习第六章--循环神经网络(理论)
rnn·深度学习·神经网络