Tensorflow中卷积的padding方式

Posted 起床oO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Tensorflow中卷积的padding方式的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow中padding规则

在pytorch中实现与TensorFlow类似的"same"方式padding

TensorFlow一文弄懂CNN中的padding参数

TensorFlow的 卷积层

Tensorflow之CNN卷积层池化层padding规则

keras中卷积的两种padding方式