ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

卷积神经网络的padding规则

2019-04-01 17:53:12  阅读:291  来源: 互联网

标签:filter strides 卷积 height padding width 神经网络 pad


卷积函数 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时,丽数具体是怎么计算的呢?其实是有公式的。为了方便演示,先来定义几个变量:

  • 输入的尺寸中高和宽定义成in_height、in_width。
  • 卷积核的高和宽定义成filter_height、filter_width。
  • 输出的尺寸中高和宽定义成output_height、output_widh。
  • 步长的高宽方向定义成strides_height、 strides_width。
  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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有