Tensorflow中卷积的padding方式

根据tensorflow中的Conv2D函数,先定义几个基本符号:

  1. 输入矩阵W*W,这里只考虑输入宽高相等的情况,如果不相等,推导方法一样
  2. filter矩阵F*F,卷积核
  3. stride值S,步长
  4. 输出宽高为new_height,new_width

在tensorflow中padding的方式有两种,一种是valid,一种是same

padding='valid'

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

也就是说,Conv2D的valid方式不会在原有输入的基础上添加新的像素

padding='same'

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

在高度上需要pad的像素数为:

pad_needed_height = (new_height - 1 ) * S + F - W

pad_needed_height = (new_width - 1 ) * S + F - W

根据上式, 输入矩阵上方添加的像素数为:

pad_top = pad_needed_height / 2 (结果取整)

输入矩阵下方需要添加的像素数为:

pad_down = pad_needed_height - pad_top

输入矩阵左方需要添加的像素数为:

pad_left = pad_needed_width / 2 (结果取整)

输入矩阵右方需要添加的像素数为:

pad_right = pad_needed_width - pad_left