max_pool()中padding参数有两种模式validsame模式。
Tensorflow的padding和卷积层一样也有padding操作,两种不同的操作输出的结果有区别:

函数原型max_pool(value, ksize, strides, padding, data_format="NHWC", name=None)

这一解释除了tf.nn.max_pool,还适用于tf.nn.conv2dtf.layer.*下的相关函数

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] - (window_shape[i] - 1) * dilation_rate[i]) / strides[i]).

也就是说

“VALID” 模式,在剩余行列数小于池化窗口大小时,将最右边和最下面的列或行抛弃,只保留有效值;
“SAME” 模式则是在剩余行列数不足时补充0来满足池化窗口的大小,保持窗口被池化区域相同;
所以输出尺寸不是池化窗口的整数倍时,same模式的输出要比valid的大。

#我们来看看函数的定义
#source code:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/nn_ops.py  line:2116
@tf_export("nn.max_pool")
def max_pool(value, ksize, strides, padding, data_format="NHWC", name=None):"""Performs the max pooling on the input.Args:value: A 4-D `Tensor` of the format specified by `data_format`.ksize: A list or tuple of 4 ints. The size of the window for each dimensionof the input tensor.strides: A list or tuple of 4 ints. The stride of the sliding window foreach dimension of the input tensor.padding: A string, either `'VALID'` or `'SAME'`. The padding algorithm.See the "returns" section of `tf.nn.convolution` for details.data_format: A string. 'NHWC', 'NCHW' and 'NCHW_VECT_C' are supported.name: Optional name for the operation.Returns:A `Tensor` of format specified by `data_format`.The max pooled output tensor."""with ops.name_scope(name, "MaxPool", [value]) as name:value = ops.convert_to_tensor(value, name="input")return gen_nn_ops.max_pool(value,ksize=ksize,strides=strides,padding=padding,data_format=data_format,name=name)#其中pool()函数 padding的代码如下所示
#dilation_rate 默认为1的序列Defaults to [1]*N
#nn_ops.py line876If padding = "SAME":output_spatial_shape[i] = ceil(input_spatial_shape[i] / strides[i])#'same'方法输出尺寸直接为 input_size/strides_sizeIf padding = "VALID":output_spatial_shape[i] =ceil((input_spatial_shape[i] - (window_shape[i] - 1) * dilation_rate[i])/ strides[i]).#'valid'方法输出尺寸为 [input_size-(pooling_win_size-1)*1]/stride_size

用例子解释一下:
1.@MiniQuark

#"VALID" = without padding:inputs:         1  2  3  4  5  6  7  8  9  10 11 (12 13)|________________|                dropped|_________________|
#"SAME" = with zero padding:pad|                                      |padinputs:      0 |1  2  3  4  5  6  7  8  9  10 11 12 13|0  0|________________||_________________||________________|

2.@Olivier Moindrot

x = tf.constant([[1., 2., 3.],[4., 5., 6.]])x = tf.reshape(x, [1, 2, 3, 1])                #先转为张量输入valid_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')valid_pad.get_shape() == [1, 1, 1, 1]  # valid_pad is [5.]       #3,6那一列被丢掉了
|1 2    ...3|
|4 5    ...6|

same_pad.get_shape() == [1, 1, 2, 1]   # same_pad is  [5., 6.]      #加上了第四列,第二个窗口的max是6
|1 2 3 0|
|4 5 6 0|     ->|5,6|


icon from easyicon


ref:
api:https://www.tensorflow.org/api_docs/python/tf/nn/max_pool
blog:https://blog.csdn.net/accumulate_zhang/article/details/78359856
blog:https://blog.csdn.net/wuzqChom/article/details/74785643
stackflow:https://stackoverflow.com/questions/37674306/what-is-the-difference-between-same-and-valid-padding-in-tf-nn-max-pool-of-t
code:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/nn_ops.py
gen_nn_ops.max_pool如何得到:
build:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/BUILD#L273
gen_nn.ops:https://stackoverflow.com/questions/41147734/looking-for-source-code-of-from-gen-nn-ops-in-tensorflow

【TensorFlow】池化层max_pool中两种paddding操作相关推荐

  1. Linq中两种更新操作

    方法一:Attach方法 EmployeeDAL /// <summary>         /// 更新雇员信息         /// </summary>         ...

  2. keras中的卷积层池化层

    文章目录 卷积层 创建卷积层 卷积层的格式及参数: 卷积层中的参数数量 卷积层的形状 池化层 keras中的最大池化层 参数 卷积层 创建卷积层 首先导入keras中的模块 from keras.la ...

  3. 【TensorFlow】TensorFlow从浅入深系列之十二 -- 教你深入理解卷积神经网络中的池化层

    本文是<TensorFlow从浅入深>系列之第12篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维 ...

  4. TensorFlow:简单的卷积层、池化层(采样层)示例

    卷积层: ws=tf.get_variable('w',[5,5,3,16],initializer=tf.truncated_normal_initializer(stddev=0.1)) bs=t ...

  5. 卷积神经网络(CNN)中,卷积层、激活函数、池化层、全链接层术语解析

    本文内容转自https://www.cnblogs.com/zf-blog/p/6075286.html和https://www.cnblogs.com/rgvb178/p/6055213.html ...

  6. 深入学习卷积神经网络中卷积层和池化层的意义(转)

    为什么要使用卷积呢? 在传统的神经网络中,比如多层感知机(MLP),其输入通常是一个特征向量:需要人工设计特征,然后将这些特征计算的值组成特征向量,在过去几十年的经验来看,人工找到的特征并不是怎么好用 ...

  7. 深入学习卷积神经网络中卷积层和池化层的意义

    为什么要使用卷积呢? 在传统的神经网络中,比如多层感知机(MLP),其输入通常是一个特征向量:需要人工设计特征,然后将这些特征计算的值组成特征向量,在过去几十年的经验来看,人工找到的特征并不是怎么好用 ...

  8. 『TensorFlow』卷积层、池化层详解

    一.前向计算和反向传播数学过程讲解 这里讲解的是平均池化层,最大池化层见本文第三小节 二.测试代码 数据和上面完全一致,自行打印验证即可. 1.前向传播 import tensorflow as tf ...

  9. 对卷积神经网络中卷积层、激活层、池化层、全连接层的理解

    文章目录 卷积神经网络 输入层 卷积层 激励层 池化层 全连接层 卷积神经网络 举一个卷积神经网络识别汽车的例子如下: 其中数据输入的是一张图片(输入层),CONV表示卷积层,RELU表示激励层,PO ...

最新文章

  1. 走向DBA[MSSQL篇] 面试官最喜欢的问题 ----索引+C#面试题客串
  2. SAP 同一个序列号可以同时出现在2个不同的HU里?
  3. Socket中listen
  4. 更改mssql数据库的名字
  5. Node.js 在本地生成日志文件
  6. cpuz北桥频率和内存频率_内存频率怎样计算?一分钟教会你
  7. 2020牛客暑期多校训练营(第三场)
  8. NotifyMyFrontEnd 函数背后的数据缓冲区(一)
  9. 堆和栈、值类型与引用类型、装箱与拆箱
  10. 【报告分享】2019年中国95后洞察报告.pdf(附下载链接)
  11. 服务器上传至云系统,上传至云服务器命令
  12. 2017全球超算峰会召开 联想以智能超算赋能AI时代
  13. [转载]JAVA操作符
  14. Linux操作系统教学进度计划表
  15. 揭开 gcc 编辑器的面貌
  16. 计算机基础常见八股问题集合(含计算机网络,操作系统,计算机组成,数据结构与算法,数据库)
  17. CAML: FAST CONTEXT ADAPTATION VIA META-LEARNING
  18. Medium无限文章阅读会员插件
  19. 无法删除文件,因为已在Windows资源管理器中打开
  20. 2020年自动驾驶汽车V2V解决方案-设计需求挖掘

热门文章

  1. Linux常用的分区方案及目录结构
  2. PHPCMS商城:模块_购物车+订单模块(资源合集)
  3. Eslint 配置 + 规则说明 - 综合引入篇
  4. 华科网络内容管理系统 v5.6 手机 PC
  5. 程序设计实验与上机考试教程 全国计算机等级考试二级vb模拟试题,程序设计基础实验与上机考试教程...
  6. HTML5响应式吸塑包装定制塑胶制品类织梦模板
  7. 二开微信表情包小程序魔改版源码
  8. Mouse Jiggler – 自动移动光标,防止电脑启动屏保、进入休眠[Windows]
  9. ThinkPHP6内核学生成绩管理系统源码 内附安装说明
  10. WordPress简约博客主题模板Chen主题V1.2