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

前言

在使用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中相关的源码:

    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 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

浏览器中的姿态检测:PoseNet 模型(附代码)

这里附上 Youtube 上这段视频的源代码,作者是 Siraj Raval:https://youtu.be/9KqNk5keyCc

1543
来自专栏目标检测和深度学习

教程 | 先理解Mask R-CNN的工作原理,然后构建颜色填充器应用

选自matterport 作者:Waleed Abdulla 机器之心编译 参与:刘晓坤 上年 11 月,matterport 开源了 Mask R-CNN 实...

2205
来自专栏机器之心

教程 | 先理解Mask R-CNN的工作原理,然后构建颜色填充器应用

选自matterport 作者:Waleed Abdulla 机器之心编译 参与:刘晓坤 上年 11 月,matterport 开源了 Mask R-CNN 实...

3095
来自专栏深度学习思考者

DL开源框架Caffe | 模型微调 (finetune)的场景、问题、技巧以及解决方案

前言 什么是模型的微调?   使用别人训练好的网络模型进行训练,前提是必须和别人用同一个网络,因为参数是根据网络而来的。当然最后一层是可以修改的,因为我们...

4426
来自专栏机器学习实践二三事

fine-tuning的二三事

日常的应用中,我们会很经常遇到一个问题: 如何应用强大的model(比如ResNet)去训练我们自己的数据? 考虑到这样的几个事实: 通常我们自己的数据集都...

18410
来自专栏机器之心

教程 | face-api.js:在浏览器中进行人脸识别的JavaScript接口

号外!号外!现在人们终于可以在浏览器中进行人脸识别了!本文将为大家介绍「face-api.js」,这是一个建立在「tensorflow.js」内核上的 java...

1472
来自专栏贾志刚-OpenCV学堂

SSD网络tensorflow版本源码深入分析

以VGG-16作为特征提取层实现SSD网络的代码,解读SSD网络代码实现的各个细节,从输入参数、默认框的位置匹配、宽高比率、放缩比率、各层默认框的生成、到损失函...

994
来自专栏腾讯Bugly的专栏

机器学习入门之HelloWorld(Tensorflow)

1 环境搭建 (Windows) 安装虚拟环境 Anaconda,方便python包管理和环境隔离。 Anaconda3 4.2 http://mirrors...

4228
来自专栏Small Code

【TensorFlow】TensorFlow 的卷积神经网络 CNN - 无TensorBoard版

前面 有篇博文讲了多层感知器,也就是一般的前馈神经网络,文章里使用 CIFAR10 数据集得到的测试准确率是 46.98%。今天我们使用更适合处理图像的卷积神经...

2297
来自专栏懒人开发

(7.1)James Stewart Calculus 5th Edition:Integration by Parts

注意: 这样做,目的是为了 降阶, 如果转换后,对应的没有起到 降阶 的作用,就没有什么意义了

781

扫码关注云+社区