其他分享
首页 > 其他分享> > 卷积神经网络的padding规则

卷积神经网络的padding规则

作者:互联网

卷积函数 tf.nn.conv2d

声明:这里记录的是李金洪老师《深度学习之TensorFlow》一书上的知识点

TensorFlow里使用tf.nn.conv2d函数来实现卷积,其格式如下。
tf . nn. conv2d (input, filter, strides, padding, use_ cudnn on_ gpu=None,name=None)
除去参数name参数用以指定该操作的name,与方法有关的共有5个参数。
(1)input: 指需要做卷积的输入图像,它要求是一个Tensor, 具有[batch, in_height,in_width, in_channels]这样的形状,具体含义是“训练时一个batch的图片数量, 图片高度,图片宽度,图像通道数”,注意这是一个四维的Tensor,要求类型为float32和float64其中之一。
(2)filter: 相当于<font bg-colorCNN中的卷积核,它要求是一个Tensor, 具有[filter_height, filter_width,in_channels, out_channels]这样的形状,具体含义是“卷积核的高度,滤波器的宽度,图像通道数,滤波器个数”,要求类型与参数input相同。有一个地方需要注意,第三维in_channels,就是参数input的第四维。
(3)strides:卷积时在图像每一维的步长, 这是一个一维的向量,长度为4(分别是[batch方向,height方向,width方向,channels方向)很多同学只认为第一维和最后一维默认必须置1,其实strides参数确定了滑动窗口在各个维度上移动的步数。。
(4)padding: 定义元素边框与元素内容之间的空间。string类型的量,只能是SAME和VALID其中之一,这个值决定了不同的卷积方式,padding 的值为VALID时,表示边缘不填充,当其为’SAME时,表示填充到滤波器可以到达图像边缘。
(5)use cudnn on gpu: bool类型,是否使用cudnn加速,默认为true.
(6)返回值: tf.nn.conr2d函数结果返回一个Tensor, 这个输出就是常说的feature map.

注意:在卷积函数中, padding参数是最容易引起歧义的,该参数仅仅决定是否要补0,
因此一定要清楚padding设为SAME的真正含义。在设为SAME的情况下,只有在步长为1时生成的feature map才会与输入值相等。

padding规则介绍

padding属性的意义是定义元素边框与元素内容之间的空间。
在fan.cov2函数中,当交量pdding为VALID和SAME时,丽数具体是怎么计算的呢?其实是有公式的。为了方便演示,先来定义几个变量:

  1. VALID情况
    输出宽和高的公式代码分别为:

output_width = (in_width - filter_width + 1)/strides_width (结果问上取整)
output_height = (in_height - filter_height + 1)/strides_height (结果向上取整)

  1. SAME情况
    输出的宽和高将与卷积核没有关系,具休公式代码如下:

out_height = in_height / strides_height (结果向上取整)
out_width = in_width / strides_width (结果向上取整)

这里有一个很重要的知识点一补零的规则,见如下代码:

pad_height = max( (out_height - 1) X strides_height + filter_height - in_height,0)
pad_width = max((out_width - 1) X strides_width + filter_width - in_width, 0)
pad_top = pad_height / 2
pad_bottom = pad_height - pad_ top
pad_left = pad_width / 2
pad_right = pad_width - pad_left

注:pad_height代表过度方向填充0的行数,以此类推。

标签:filter,strides,卷积,height,padding,width,神经网络,pad
来源: https://blog.csdn.net/ali123aa/article/details/88952330