由于项目需要需要自己实现卷积算法的逻辑,下面介绍padding填充规则,并且可以用最后面的数据进行简单的验证。
padding属性的意义是定义元素边框和元素内容之间的空间。
在tf.nn.conv2d函数中,当变量padding为VALID和SAME,函数具体是怎么计算的呢?其实是有公式的。为了方便演示,先定义几个变量:
- 输入的尺寸高和宽定义成:in_height,in_width
- 卷积核的高和宽定义成filter_height、filter_width
- 输入的尺寸中高和宽定义成output_height、out_width
- 步长的高宽方向定义成strides_height、strides_width.
一 VALID情况:边缘不填充
输入宽和高的公式分别为:
output_width=(in_width-filter_width+1)/strides_width #(结果向上取整)
output_height=(in_height-filter_height+1)/strides_height #(结果向上取整)
二 SAME情况:边缘填充
# 输出的宽和高将与卷积核没关系,具体公式如下:
output_width=in_width/strides_width #(结果向上取整)
output_height=in_height/strides_height #(结果向上取整)
# 这里有一个很重要的知识点——补零的规则,见如下公式:
pad_height=ma