当前位置: 首页 > news >正文

【TensorFlow】tf.nn.max_pool实现池化操作

max pooling是CNN当中的最大值池化操作,其实用法和卷积很类似

有些地方可以从卷积去参考【TensorFlow】tf.nn.conv2d是怎样实现卷积的? 

 

tf.nn.max_pool(value, ksize, strides, padding, name=None)

参数是四个,和卷积很类似:

 

第一个参数value:需要池化的输入,一般池化层接在卷积层后面,所以输入通常是feature map,依然是[batch, height, width, channels]这样的shape

第二个参数ksize:池化窗口的大小,取一个四维向量,一般是[1, height, width, 1],因为我们不想在batch和channels上做池化,所以这两个维度设为了1

第三个参数strides:和卷积类似,窗口在每一个维度上滑动的步长,一般也是[1, stride,stride, 1]

第四个参数padding:和卷积类似,可以取'VALID' 或者'SAME'

返回一个Tensor,类型不变,shape仍然是[batch, height, width, channels]这种形式


示例源码:

假设有这样一张图,双通道

第一个通道:

第二个通道:

用程序去做最大值池化:

 
import tensorflow as tf
 
 
 
a=tf.constant([
 
[[1.0,2.0,3.0,4.0],
 
[5.0,6.0,7.0,8.0],
 
[8.0,7.0,6.0,5.0],
 
[4.0,3.0,2.0,1.0]],
 
[[4.0,3.0,2.0,1.0],
 
[8.0,7.0,6.0,5.0],
 
[1.0,2.0,3.0,4.0],
 
[5.0,6.0,7.0,8.0]]
 
])
 
 
 
a=tf.reshape(a,[1,4,4,2])
 
 
 
pooling=tf.nn.max_pool(a,[1,2,2,1],[1,1,1,1],padding='VALID')
 
with tf.Session() as sess:
 
print("image:")
 
image=sess.run(a)
 
print (image)
 
print("reslut:")
 
result=sess.run(pooling)
 
print (result)

 

 这里步长为1,窗口大小2×2,输出结果:

 
image:
 
[[[[ 1. 2.]
 
[ 3. 4.]
 
[ 5. 6.]
 
[ 7. 8.]]
 
 
 
[[ 8. 7.]
 
[ 6. 5.]
 
[ 4. 3.]
 
[ 2. 1.]]
 
 
 
[[ 4. 3.]
 
[ 2. 1.]
 
[ 8. 7.]
 
[ 6. 5.]]
 
 
 
[[ 1. 2.]
 
[ 3. 4.]
 
[ 5. 6.]
 
[ 7. 8.]]]]
 
reslut:
 
[[[[ 8. 7.]
 
[ 6. 6.]
 
[ 7. 8.]]
 
 
 
[[ 8. 7.]
 
[ 8. 7.]
 
[ 8. 7.]]
 
 
 
[[ 4. 4.]
 
[ 8. 7.]
 
[ 8. 8.]]]]

 

 

池化后的图就是:

 

证明了程序的结果是正确的。

 

我们还可以改变步长

 

pooling=tf.nn.max_pool(a,[1,2,2,1],[1,2,2,1],padding='VALID')

最后的result就变成:

 

 
reslut:
 
[[[[ 8. 7.]
 
[ 7. 8.]]
 
 
 
[[ 4. 4.]
 
[ 8. 8.]]]]
 

 

转载于:https://www.cnblogs.com/Ph-one/p/9402062.html

相关文章:

  • git博客好的例子
  • 桌面版Ubuntu系统固定IP设置和Network-manager设置
  • ubuntu----VMware 鼠标自由切换问题及主机虚拟机共享剪切板问题
  • markdownpad2-注册码-2017-02-23
  • zynq基础--linux下软件应用
  • tftp 传输文件
  • TensorFlow模型保存和加载方法
  • OpenCV常用库函数[典]
  • https://blog.csdn.net/dayancn/article/details/54692111
  • 用C++调用tensorflow在python下训练好的模型(centos7)
  • 如何用Tensorflow训练模型成pb文件和和如何加载已经训练好的模型文件
  • TensorFlow 自定义模型导出:将 .ckpt 格式转化为 .pb 格式
  • 模型文件后缀介绍
  • 【专家坐堂QA】在 petalinux-config 中选择外部来源时,可将符号链路添加内核来源目录树...
  • 动态存储区、静态存储区、堆和栈的区别
  • 【Leetcode】101. 对称二叉树
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【node学习】协程
  • crontab执行失败的多种原因
  • express.js的介绍及使用
  • MaxCompute访问TableStore(OTS) 数据
  • mysql innodb 索引使用指南
  • php的插入排序,通过双层for循环
  • Vue.js-Day01
  • 从零开始的无人驾驶 1
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 微信小程序设置上一页数据
  • 延迟脚本的方式
  • 用 Swift 编写面向协议的视图
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 06-01 点餐小程序前台界面搭建
  • gunicorn工作原理
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • #NOIP 2014# day.2 T2 寻找道路
  • #QT(串口助手-界面)
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (C)一些题4
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (windows2012共享文件夹和防火墙设置
  • (第27天)Oracle 数据泵转换分区表
  • (二十四)Flask之flask-session组件
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (六)c52学习之旅-独立按键
  • (生成器)yield与(迭代器)generator
  • (十)T检验-第一部分
  • (一)kafka实战——kafka源码编译启动
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)Oracle 9i 数据库设计指引全集(1)
  • *Django中的Ajax 纯js的书写样式1
  • .net core 控制台应用程序读取配置文件app.config
  • .net 反编译_.net反编译的相关问题
  • .netcore 获取appsettings