您的位置:首页 > 理论基础 > 计算机网络

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

2017-04-19 18:34 615 查看
TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程。TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。

TensorFlow可被用于语音识别图像识别等多项机器深度学习领域,对2011年开发的深度学习基础架构DistBelief进行了各方面的改进,它可在小到一部智能手机、大到数千台数据中心服务器的各种设备上运行。TensorFlow将完全开源,任何人都可以用。

原生接口文章

【Tensorflow】tf.placeholder函数
【TensorFlow】tf.nn.conv2d是怎样实现卷积的
【TensorFlow】tf.nn.max_pool实现池化操作
【Tensorflow】tf.nn.relu函数
【Tensorflow】tf.reshape
函数
【Tensorflow】tf.nn.dropout函数
【Tensorflow】tf.argmax函数
【Tensorflow】tf.cast
类型转换 函数
【Tensorflow】tf.train.AdamOptimizer函数
【Tensorflow】tf.Graph()函数
【TensorFlow】tf.nn.softmax_cross_entropy_with_logits的用法

【Tensorflow】tf.dynamic_partition
函数 分拆数组

     原生接口实例

【Tensorflow】实现简单的卷积神经网络CNN实际代码
【Tensorflow
实战】实现欧式距离

        slim接口文章

【Tensorflow】tensorflow.contrib.slim


【Tensorflow
slim】 slim.arg_scope的用法

【Tensorflow
slim】slim.data包

【Tensorflow
slim】slim evaluation 函数

【Tensorflow
slim】slim layers包

【Tensorflow
slim】slim learning包
【Tensorflow
slim】slim losses包

【Tensorflow
slim】slim nets包

【Tensorflow
slim】slim variables包

【Tensorflow
slim】slim metrics包
       slim
实例

【Tensorflow
slim 实战】写MobileNet

【Tensorflow
slim 实战】写Inception-V4 Inception-ResNet-v2结构
        kera
接口文章

【Tensorflow
keras】Keras:基于Theano和TensorFlow的深度学习库

【Tensorflow
keras】轻量级深度学习框架 Keras简介

        tensorflow使用过程中的辅助接口或通过tensorflow实现的批量操作接口

将非RGB图片转换为RGB图片

【opencv】python3
将图片生成视频文件

【opencv】selective_search函数

=========================================================================

原文地址:http://blog.csdn.net/mao_xiao_feng/article/details/53453926

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]
这种形式

示例源码:

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

第一个通道:



第二个通道:



用程序去做最大值池化:

[python] view
plain copy

 





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,输出结果:

[python] view
plain copy

 





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

池化后的图就是:





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

我们还可以改变步长

[python] view
plain copy

 





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



最后的result就变成:

[python] view
plain copy

 





reslut:  

[[[[ 8.  7.]  

   [ 7.  8.]]  

  

  [[ 4.  4.]  

   [ 8.  8.]]]]  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息