• CNN中的池化层的理解和实例


      池化操作是利用一个矩阵窗口在输入张量上进行扫描,并且每个窗口中的值通过取最大、取平均或其它的一些操作来减少元素个数。池化窗口由ksize来指定,根据strides的长度来决定移动步长。如果strides都是1,每个矩阵窗口都将被使用,如果strides的值都是2,那么每一维度上的窗口每隔1个被使用。

    举例:

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

    功能:计算池化区域中元素的平均值

    输入参数:

      value:一个四维的Tensor,维度分别表示[batch, height, width, channels]

      ksize:长度不小于4的整形数组,每一维度对应于输入数据张量中每一维的窗口对应值

      strides:长度不小于4的整型数组,表示滑动窗口在输入数据张量每一维度上的步长

      padding:字符串,取值为SAME或者VALID

    输出:一个Tensor,输出维度和value相同

    输出数据的维度计算方法:shape(output) = (shape(value) - ksize + 1) / strides

    取舍方向取决于:padding的值

    padding = 'SAME':向下取舍,输入和输出维度相同

    padding = 'VALID':向上取舍,输入输出维度不同

     1 input_data = tf.Variable(np.random.rand(10, 6, 6, 3), dtype= np.float32)
     2 filter_data = tf.Variable(np.random.rand(2, 2, 3, 1), dtype= np.float32)
     3 y = tf.nn.conv2d(input_data, filter_data, strides =[1,1,1,1], padding='SAME')
     4 output = tf.nn.avg_pool(value=y, ksize=[1,2,2 ,1], strides=[1,2,2,1], padding='SAME')
     5 with tf.Session() as sess:
     6     init = tf.initialize_all_variables()
     7     sess.run(init)
     8     a = sess.run(y)
     9     b = sess.run(output)
    10     print (a)
    11     print (b)

    其中,a的维度:(10,6,6,1),b的维度:(10,3,3,1),b的维度计算方法:由于池化时ksize是2×2,原来张量为6×6,移动步长为2,

    所以最后池化后的张量为(6-2+1)/2=2.5,此时公式不适用。我自己的算法:1+(6-2)/2 = 3

  • 相关阅读:
    BZOJ 1066 [SCOI2007]蜥蜴 (最大流)
    Codeforces 1092 D2 Great Vova Wall (Version 2) (栈)
    BZOJ 1046 [HAOI2007]上升序列(LIS + 贪心)
    牛客练习赛34 D little w and Exchange(归纳)
    BZOJ 1042 [HAOI2008]硬币购物(完全背包+容斥)
    GTMD并查集!
    2018icpc南京现场赛-G Pyramid(打标找规律+逆元)
    drwxr-xr-x 2 root root 4096 06-29 14:30 Test 分段解释
    Linux里面非常重要的目录
    点击 触发 事件 的 jQuery 写法样式
  • 原文地址:https://www.cnblogs.com/demo-deng/p/7509982.html
Copyright © 2020-2023  润新知