转载请标明出处:http://blog.csdn.net/wuzqchom/article/details/74785643


在用tensorflow调用卷积核api的时候,会有填padding方式的参数,找到源码中的函数定义如下(max pooling也是一样):

def conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None,data_format=None, name=None)

源码中对于padding参数的说明如下:

padding: A `string` from: `"SAME", "VALID"`.The type of padding algorithm to use.

源码中说明padding可以用SAMEVALID两种方式,但是对于这两种方式具体是什么并没有多加说明。
这里用Stack Overflow中的一份代码来简单解释一下,代码如下:

import tensorflow as tfx = tf.constant([[1., 2., 3.],[4., 5., 6.]])
x = tf.reshape(x, [1, 2, 3, 1])  # give a shape accepted by tf.nn.max_poolvalid_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='VALID')
same_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='SAME')print(valid_pad.get_shape())
print(same_pad.get_shape())

最后输出的结果为:

(1, 1, 1, 1)
(1, 1, 2, 1)

可以看出SAME的填充方式是比VALID的填充方式多了一列。
让我们来看看变量xxx是一个2×32\times32×3的矩阵,max pooling窗口为2×22\times22×2,两个维度的步长strides=2strides=2strides=2。
第一次由于窗口可以覆盖,橙色区域做max pooling,没什么问题,如下:

接下来就是SAMEVALID的区别所在:由于步长为2,当向右滑动两步之后,VALID方式发现余下的窗口不到2×22\times22×2所以直接将第三列舍弃,而SAME方式并不会把多出的一列丢弃,但是只有一列了不够2×22\times22×2怎么办?填充!

如上图所示,SAME会增加第四列以保证可以达到2×22\times22×2,但为了不影响原始信息,一般以0来填充。这就不难理解不同的padding方式输出的形状会有所不同了。

当CNN用于文本中时,一般卷积层设置卷积核的大小为n×k,其中k为输入向量的维度(即[n,k,input_channel_num,output_channel_num]),这时候我们就需要选择“VALID”填充方式,这时候窗口仅仅是沿着一个维度扫描而不是两个维度。可以理解为统计语言模型当中的N-gram。

我们设计网络结构时需要设置输入输出的shape,源码nn_ops.py中的convolution函数和pool函数给出的计算公式如下:

 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]).

dilation_ratedilation\_ratedilation_rate为一个可选的参数,默认为1,这里我们不管。
整理一下,对于VALID,输出的形状计算如下:
new_height=new_width=⌈(W–F+1)S⌉new\_height = new\_width =\lceil \frac{ (W – F + 1)} { S} \rceilnew_height=new_width=⌈S(W–F+1)​⌉
对于SAME,输出的形状计算如下:
new_height=new_width=⌈WS⌉new\_height = new\_width =\lceil \frac{ W } { S}\rceil new_height=new_width=⌈SW​⌉
其中,WWW为输入的size,FFF为filter的size,SSS为步长,⌈⌉\lceil \rceil⌈⌉为向上取整符号。

TensorFlow中CNN的两种padding方式“SAME”和“VALID”相关推荐

  1. TF、keras两种padding方式:vaild和same

    TF.keras两种padding方式:vaild和same TF.keras两种padding方式:vaild和same:https://oldpan.me/archives/tf-keras-pa ...

  2. PCBA加工中常见的两种焊接方式详解

    PCBA加工中常见的两种焊接方式详解 PCBA加工,两种常见的焊接方式就是回流焊和波峰焊,与手动焊接技术相比,自动焊接技术具有减少人为因素的影响.提高效率.降低成本.提高质量等优势,在PCBA加工中, ...

  3. java匿名内部类_java中匿名内部类的两种实现方式

    使用匿名内部类课使代码更加简洁.紧凑,模块化程度更高.内部类能够访问外部内的一切成员变量和方法,包括私有的,而实现接口或继承类做不到.然而这个不是我说的重点,我说的很简单,就是匿名内部类的两种实现方式 ...

  4. python wait until_荐selenium显示等待怎么写之WebDriverWait中until的两种实现方式及原理分析...

    关于显示等待WebDriverWait是什么,可以看selenium-wait源码解析 话不多说,先上实现代码: 第一种实现方式(官方提供): from selenium.webdriver.supp ...

  5. android编程fragment,详解Android中Fragment的两种创建方式

    onCreate():在创建fragment时系统会调用此方法.在实现代码中,你可以初始化想要在fragment中保持的那些必要组件,当fragment处于暂停或者停止状态之后可重新启用它们. onC ...

  6. C语言中字符串的两种定义方式

    我们知道C语言中是没有字符串这种数据类型的,我们只能依靠数组进行存储,即字符数组,而我们定义并且初始化数组有两种方式.下面将给大家介绍这两种方式并且介绍这两种方式的区别: 方式1 前两种是正确的定义方 ...

  7. SAP License:SAP系统中本年利润的两种结转方式

    结转本年利润的方法(SAP使用表解法) 会计期末结转本年利润的方法有表结法和账结法两种. 1.表结法 表结法下,各损益类科目每月月末只需结计出本月发生额和月末累计余额,不结转到"本年利润&q ...

  8. 类中方法的两种调用方式

    class Foo(object):def func(self, name):print(name)# 第一种,通过实例对象调用func方法 foo = Foo() foo.func('allin') ...

  9. Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)

    第一种代理即Java的动态代理方式上一篇已经分析,在这里不再介绍,现在我们先来了解下GCLIB代理是什么?它又是怎样实现的?和Java动态代理有什么区别? cglib(Code Generation ...

  10. Myeclipse中Tomcat的两种部署方式

    一.在Myeclipse软件中部署 1. 在Myeclipse中,创建好工程后,在Myeclipse菜单栏中选择 Windows -> Preferences -> Myeclipse - ...

最新文章

  1. 服务器拷贝文件提示ms-dos功能无效,win7系统复制文件提示“MS-DOS功能无效”的解决方法...
  2. 程序员为什么会有职业瓶颈?
  3. ubuntu彻底卸载软件
  4. AM2320 温湿度计 单总线读取数据
  5. android 自定义wifi设置在哪里,Android Wifi的设置、连接操作
  6. Node.js抓取网页信息(cheerio网络爬虫)
  7. 如何修改was的java路径_在eclipse中修改tomcat的部署路径操作
  8. 为什么用TreeView绑定XML文件时总是提示:根级别上的数据无效。
  9. 矫情的C++——不明确行为(undefined behavior)
  10. collectors 求和_Java-Collectors常用的20个方法
  11. matlab 有约束最小化,求解带等式约束和最小化目标的LMI
  12. 发动机冒黑烟_发动机冒黑烟常见的24个原因和解决方法!
  13. Python: scipy.signal.coherence的用法及代码示例
  14. python counter怎么用_Counter的基本用法
  15. 回归模型+自变量和因变量之间的关系、回归模型的种类、回归模型的输出类型、个数角度
  16. [WIN32]MessageBox用法
  17. iOS视频 压缩过程 AVAssetExportSessionStatusFailed 文件创建失败
  18. MySql使用if语句例子
  19. 使用idea将dev分支合并到master分支
  20. BGP简介,以及使用BGP的原因

热门文章

  1. 视频的传输方式【转】
  2. rocketMq配置外网IP
  3. 基于matlab的文字识别算法-课程设计
  4. 用计算机发射wifi经常很卡,电脑WiFi上网速度慢原因解决办法
  5. 最新iPhone X设计规范,详细完整的了解IOS设计规范。
  6. Android Studio使用WIFI调试应用
  7. 如何让计算机断开网络连接网络设置,电脑怎样设置定时断网,教您怎么设置
  8. matlab怎么计算泰尔指数,求助:泰尔指数怎么算呢
  9. Axure制作倒计时
  10. access里面的表达式运用_Access 如何使用表达式生成器