卷积层中计算滤波器大小和计算步长

卷积层浅析

卷积层:

卷积神经网络中每层卷积层(Convolutional layer)由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法最佳化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网路能从低级特征中迭代提取更复杂的特征。

假定此时有一张图片大小为32 *32 * 3(图像的长,宽,深度)
在这里插入图片描述
卷积的过程就是,在原图的基础上,添加一个滤波器(滤波器的
深度要求和原图一样,例如上方的图片大小,那么滤波器的大小就是三个深度)
在这里插入图片描述
图像经过滤波器之后,输出的就叫做激活层activation

我们用上面的例子来做一个运算,假设添加六个滤波器来过滤原图:

原图滤波器激活层
32 *32 *35 * 5 * 328 * 28 * 1 ( A )
A5 * 5 * 3A与滤波器点乘 ( B )
B5 * 5 * 3B与滤波器点乘 ( C )
C5 * 5 * 3C与滤波器点乘 ( D )
D5 * 5 * 3D与滤波器点乘 ( E )
E5 * 5 * 3E与滤波器点乘
…………28 * 28 * 6

上表进行的运算就叫卷积运算,下图就说明了该表进行的运算:
在这里插入图片描述
如果之后再进行卷积运算时,一定要注意此时图像的深度,根据实际的图像深度来选择滤波器的深度,下图则是根据上图的结果所选择的滤波器大小为五乘五乘六
在这里插入图片描述

卷积运算的同时,我们可以滤波器设置步长,例:
为了方便理解和计算,我们假设有一张7 * 7大小的图片(不看图片的深度)

原图(N)滤波器(F)步长(stride)激励层(activaion)
7 * 73 * 315 * 5
7 * 73 * 323 * 3
7 * 73 * 33不允许

计算上表的公式如下:
(N - F) / stride + 1 (原图-滤波器) / 步长 + 1
stride 1 =>(7 - 3) / 1 + 1 = 5

stride 2 => (7 - 3) / 2 + 1 = 3

stride 3 => (7 - 3) / 3 + 1 = 2.33333……
可以看到当步长为三的时候,激励层的值为无线循环小数了,卷积过程不允许这种情况的出现,所以我们只取可以完整的算出激励层的步长。

填充
上面是卷积运算的过程,但是通常在进行卷积运算之前,会在图像的像素点周围做一个填补操作padding,通常padding的值是零。意思就是在整个原图的像素点外围加上一圈0,这样的作用就是可以使进行卷积运算之后的输出图片的尺寸变得和输入时图片的尺寸一样大,如下图所示:
在这里插入图片描述
填补操作的大小是根据滤波器的大小来定的:
求填补的大小的公式为:(F - 1) / 2 (滤波器 - 1) / 2

滤波器(F)运算填补大小输出大小
3 * 3(3 - 1) / 21+2
5 * 5(5 - 1) / 22+4
7 * 7(7 - 1) / 23+6

可能表格解释的不清楚,用一个例子来说明

  • 输入的大小为32 * 32 * 3 ;
  • 加上十个滤波器,大小为5 * 5;
  • 步长为1;
  • 填充为2:
    求输出大小?

先不看深度,因为填充为2,由上表可知输出大小应该是在原图上加上4再进行运算;大小是36 * 36
然后经过步长的运算
(36 - 5)/ 1 + 1 = 32
得到的图像大小为 32 * 32
然后加上深度,由于是有十个大小为5 * 5的滤波器,所以滤波器为5 * 5 * 10.深度为10,所以原图会经过十次卷积,最终输出的图片大小为:
32 * 32 *10
由此可以看到,添加padding的作用了,如果没有填充的话,输出的图像大小将会变成28 * 28 * 10,虽然可以算出大小,但是如果当卷积的次数越来多,图像会越变越小,很不利于之后的计算。所以填充是非常重要的。

公式

输入的图像大小:W1 * H1 * D1 (宽度 * 高度 * 深度)

K :滤波器的个数 K总是二的指数(32, 64,128 ,512)

F:滤波器的大小

S:步长

P:填充大小

输出的图像大小:W2 * H2 * D2(宽度 * 高度 * 深度)

W2 = (W1 - F + 2P) / S +1
H2 = (H1 - F + 2P) / S + 1
D2 = K

滤波器的尺度(F * F) 乘以深度D,就是每个滤波器的权重的个数;再乘以K(滤波器的个数)就是这一个卷积层权重的总数;另外加上每个滤波器的一个偏置项(一共有K个)

一定要算上偏置项的大小!!!!

具体的过程就如下图所示,就不细说了
在这里插入图片描述

  • 26
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
PyTorch卷积层是神经网络常用的一种层类型,用于处理图像和其他多维数据。卷积层通过对输入数据进行卷积操作来提取特征,并生成输出特征图。卷积操作是指将一个滤波器(也称为卷积核)与输入数据进行逐元素相乘,并将结果相加得到输出特征图的过程。[1] 在PyTorch卷积层的相关参数包括输入通道数、输出通道数、卷积大小步长和边缘填充等。输入通道数指的是输入数据的通道数,例如RGB图像的通道数为3。输出通道数指的是卷积层输出的特征图的通道数,通常可以理解为卷积核的个数。卷积大小指的是卷积核的尺寸,例如3x3的卷积核。步长指的是卷积操作在输入数据上滑动的步长,用于控制输出特征图的尺寸。边缘填充是指在输入数据的边缘周围填充额外的像素,以保持输出特征图的尺寸与输入数据相同。[2] 在使用PyTorch的卷积层时,可以通过定义一个继承自`nn.Module`的神经网络类,并在其定义卷积层的相关参数来创建卷积层。例如,可以使用`nn.Conv2d`类来定义一个二维卷积层,并指定输入通道数、输出通道数、卷积大小步长和边缘填充等参数。然后,在神经网络的前向传播方法,可以通过调用卷积层的`forward`方法来进行卷积操作,并返回输出特征图。[3] 总结起来,PyTorch卷积层是用于处理图像和其他多维数据的一种神经网络层类型。它通过卷积操作来提取特征,并生成输出特征图。在使用PyTorch的卷积层时,需要定义相关参数,并在神经网络的前向传播方法调用卷积层进行卷积操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值