深度学习-TF、keras两种padding方式:vaild和same

2018-06-22 16:26:34 浏览数 (1)

前言

在使用Keras的时候会遇到这样的代码x = Conv2D(filters, kernel_size=5, strides=2, padding='same')(x),与pytorch不同,keras和TensorFlow设置卷积层的过程中可以设置padding参数,vaild和same。“valid”代表只进行有效的卷积,对边界数据不处理。“same”代表保留边界处的卷积结果,通常会导致输出shape与输入shape相同。

分析

那vaild和same有什么区别,两者本质区别就是padding过程中采取的策略不同。

“valid”

valid即只对图像中像素点“恰好”与卷积层对齐的部分进行卷积。上图中一维演示中输入宽度为13,卷积宽度为6,每次前进5格,当进行到(12、13)的时候因为每次步伐为5,5>2,所以(12、13)就不进行卷积了,舍弃了最右边的这两个数。

“same”

same则不同,尽可能对原始的输入左右两边进行padding从而使卷积核刚好全部覆盖所有输入,当进行padding后如果输入的宽度为奇数则会在右边再padding一下(如上图15 1=16,右边两个pad,左边一个pad)。

上面是按照1D的形式来进行讲解的,2D的形式原理也相同。

valid:

same:

其中W为输入的宽度、F为卷积filter的size,S为步长(Stride)。

下面是TensorFlow中相关的源码:

代码语言:javascript复制
    If padding == "SAME":
      output_spatial_shape[i] = ceil(input_spatial_shape[i] / strides[i])

    If padding == "VALID":
      output_spatial_shape[i] =
        ceil((input_spatial_shape[i] -
              (spatial_filter_shape[i]-1) * dilation_rate[i])
             / strides[i]).

  Raises:
    ValueError: If input/output depth does not match filter shape, if padding
      is other than "VALID" or "SAME", or if data_format is invalid.

参考链接: https://stackoverflow.com/questions/37674306/what-is-the-difference-between-same-and-valid-padding-in-tf-nn-max-pool-of-t http://keras-cn.readthedocs.io/en/latest/layers/convolutional_layer/ https://blog.csdn.net/wuzqchom/article/details/74785643

此文由腾讯云爬虫爬取,文章来源于Oldpan博客

欢迎关注Oldpan博客公众号,持续酝酿深度学习质量文:

0 人点赞