zoukankan      html  css  js  c++  java
  • 【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.]]]]
     
  • 相关阅读:
    select2 下拉搜索 可编辑可搜索 / 只可搜索
    获取服务器时间ajax
    table中td 内容超长 自动折行 (含字母数字文字)
    下拉菜单 ,三级联动 ,夹其它下拉菜单
    echarts 添加标线,设置颜色
    table 中的tr 行点击 变换颜色背景
    checkebox 全选 ,子复选框单个全部选择后,全选框也会被选择
    replace替换,全局和局部替换
    字断行
    ydoc 参考系列
  • 原文地址:https://www.cnblogs.com/Ph-one/p/9402062.html
Copyright © 2011-2022 走看看