【TensorFlow】池化层max_pool中两种paddding操作
max_pool()
中padding参数有两种模式valid
和same
模式。
Tensorflow的padding和卷积层一样也有padding操作,两种不同的操作输出的结果有区别:
函数原型max_pool(value, ksize, strides, padding, data_format="NHWC", name=None)
这一解释除了tf.nn.max_pool
,还适用于tf.nn.conv2d
和tf.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操作相关推荐
- Linq中两种更新操作
方法一:Attach方法 EmployeeDAL /// <summary> /// 更新雇员信息 /// </summary> ...
- keras中的卷积层池化层
文章目录 卷积层 创建卷积层 卷积层的格式及参数: 卷积层中的参数数量 卷积层的形状 池化层 keras中的最大池化层 参数 卷积层 创建卷积层 首先导入keras中的模块 from keras.la ...
- 【TensorFlow】TensorFlow从浅入深系列之十二 -- 教你深入理解卷积神经网络中的池化层
本文是<TensorFlow从浅入深>系列之第12篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维 ...
- TensorFlow:简单的卷积层、池化层(采样层)示例
卷积层: ws=tf.get_variable('w',[5,5,3,16],initializer=tf.truncated_normal_initializer(stddev=0.1)) bs=t ...
- 卷积神经网络(CNN)中,卷积层、激活函数、池化层、全链接层术语解析
本文内容转自https://www.cnblogs.com/zf-blog/p/6075286.html和https://www.cnblogs.com/rgvb178/p/6055213.html ...
- 深入学习卷积神经网络中卷积层和池化层的意义(转)
为什么要使用卷积呢? 在传统的神经网络中,比如多层感知机(MLP),其输入通常是一个特征向量:需要人工设计特征,然后将这些特征计算的值组成特征向量,在过去几十年的经验来看,人工找到的特征并不是怎么好用 ...
- 深入学习卷积神经网络中卷积层和池化层的意义
为什么要使用卷积呢? 在传统的神经网络中,比如多层感知机(MLP),其输入通常是一个特征向量:需要人工设计特征,然后将这些特征计算的值组成特征向量,在过去几十年的经验来看,人工找到的特征并不是怎么好用 ...
- 『TensorFlow』卷积层、池化层详解
一.前向计算和反向传播数学过程讲解 这里讲解的是平均池化层,最大池化层见本文第三小节 二.测试代码 数据和上面完全一致,自行打印验证即可. 1.前向传播 import tensorflow as tf ...
- 对卷积神经网络中卷积层、激活层、池化层、全连接层的理解
文章目录 卷积神经网络 输入层 卷积层 激励层 池化层 全连接层 卷积神经网络 举一个卷积神经网络识别汽车的例子如下: 其中数据输入的是一张图片(输入层),CONV表示卷积层,RELU表示激励层,PO ...
最新文章
- 走向DBA[MSSQL篇] 面试官最喜欢的问题 ----索引+C#面试题客串
- SAP 同一个序列号可以同时出现在2个不同的HU里?
- Socket中listen
- 更改mssql数据库的名字
- Node.js 在本地生成日志文件
- cpuz北桥频率和内存频率_内存频率怎样计算?一分钟教会你
- 2020牛客暑期多校训练营(第三场)
- NotifyMyFrontEnd 函数背后的数据缓冲区(一)
- 堆和栈、值类型与引用类型、装箱与拆箱
- 【报告分享】2019年中国95后洞察报告.pdf(附下载链接)
- 服务器上传至云系统,上传至云服务器命令
- 2017全球超算峰会召开 联想以智能超算赋能AI时代
- [转载]JAVA操作符
- Linux操作系统教学进度计划表
- 揭开 gcc 编辑器的面貌
- 计算机基础常见八股问题集合(含计算机网络,操作系统,计算机组成,数据结构与算法,数据库)
- CAML: FAST CONTEXT ADAPTATION VIA META-LEARNING
- Medium无限文章阅读会员插件
- 无法删除文件,因为已在Windows资源管理器中打开
- 2020年自动驾驶汽车V2V解决方案-设计需求挖掘
热门文章
- Linux常用的分区方案及目录结构
- PHPCMS商城:模块_购物车+订单模块(资源合集)
- Eslint 配置 + 规则说明 - 综合引入篇
- 华科网络内容管理系统 v5.6 手机 PC
- 程序设计实验与上机考试教程 全国计算机等级考试二级vb模拟试题,程序设计基础实验与上机考试教程...
- HTML5响应式吸塑包装定制塑胶制品类织梦模板
- 二开微信表情包小程序魔改版源码
- Mouse Jiggler – 自动移动光标,防止电脑启动屏保、进入休眠[Windows]
- ThinkPHP6内核学生成绩管理系统源码 内附安装说明
- WordPress简约博客主题模板Chen主题V1.2