Tensorflow中的padding操作

转载请注明出处:http://www.jianshu.com/p/fef75002cea2

图示说明


Tensorflow中的padding操作_第1张图片
padding操作图示
  • 用一个3x3的网格在一个28x28的图像上做切片并移动

  • 移动到边缘上的时候,如果不超出边缘,3x3的中心就到不了边界

  • 因此得到的内容就会缺乏边界的一圈像素点,只能得到26x26的结果

  • 而可以越过边界的情况下,就可以让3x3的中心到达边界的像素点

  • 超出部分的矩阵补零

代码说明


根据tensorflow中的conv2d函数,我们先定义几个基本符号

  • 输入矩阵 W×W,若输入宽度与高度不同,推导方法一样

  • filter矩阵 F×F,卷积核

  • stride值 S,步长

  • 输出宽高为 new_height、new_width

在Tensorflow中对padding定义了两种取值:VALID、SAME。下面分别就这两种定义进行解释说明。

VALID

new_height = new_width = (W – F + 1) / S  #结果向上取整

含义:new_height为输出矩阵的高度。
说明:VALID方式不会在原有输入矩阵的基础上添加新的值,输出矩阵的大小直接按照公式计算即可。

SAME

new_height = new_width = W / S    #结果向上取整

含义:new_height为输出矩阵的高度。
说明:对W/S的结果向上取整得到W"包含"多少个S。

pad_needed_height = (new_height – 1)  × S + F - W

含义:pad_needed_height为输入矩阵需要补充的高度。
说明:因为new_height是向上取整的结果,所以先-1得到W可以完全包裹住S的块数,之后乘以S得到这些块数的像素点总和,再加上filer的F并减去W,即得到在高度上需要对W补充多少个像素点才能满足new_height的需求。

pad_top = pad_needed_height / 2    #结果取整

含义:pad_top为输入矩阵上方需要添加的高度。
说明:将上一步得到的pad_needed_height除以2作为矩阵上方需要扩充0的像素点数。

pad_bottom = pad_needed_height - pad_top

含义:pad_bottom为输入矩阵下方需要添加的高度。
说明:pad_needed_height减去pad_top的剩余部分补充到矩阵下方。

类似的,在宽度上需要pad的像素数和左右分别添加的像素数分别为

pad_needed_width = (new_width – 1)  × S + F - W
pad_left = pad_needed_width  / 2    #结果取整
pad_right = pad_needed_width – pad_left

源码示例


tensorflow/python/ops/nn_ops.py中关于padding的源码部分

Tensorflow中的padding操作_第2张图片
padding源码部分

参考


  1. Tensorflow中卷积的padding操作
  2. TensorFlow 深度学习笔记 卷积神经网络
  3. Tensorflow官方API padding说明

你可能感兴趣的:(Tensorflow中的padding操作)