keras中卷积的两种padding方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keras中卷积的两种padding方式相关的知识,希望对你有一定的参考价值。

参考技术A keras中卷积有两种padding方式,一种是 SAME ,一种是 VALID 。 SAME 是在进行卷积前,在图像的周围补一圈0,而用 VALID 则不对输入图像进行填充。因此,这两种的padding方式得到的输出是不同的,假设n为新得到kernel的尺寸,m为原来kernel的尺寸,k为filters的大小,s为步长,除不尽时向下取整(Pooling操作向上取整)。
padding = 'VALID' 的filters尺寸计算公式是:

padding = 'SAME' 的filters尺寸计算公式是:

pooling的设计算公式是:

*注:在pytorch中,卷积核的计算方式不同,pytorch中padding方式只有'valid',并且padding补0的层数可以自己定义(keras只在图像周围增加1层),因此pytorch的卷积核计算方式有些不同:

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

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

PyTorch:卷积/padding/pooling api

一线性回归的两种实现方式:keras实现

keras embeding设置初始值的两种方式

tensor flow 的两种padding方式

Tensorflow中卷积的padding方式

用Keras生成面部Python实现