tensorflow max_pool(最大池化)应用

1、最大池化

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

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‘

  VALID:边缘不用0填充

  SAME:边缘用0填充

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

2、实现

示例源码:

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

第一个通道:

第二个通道:

用程序去做最大值池化:

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)  

输出结果:

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

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=‘SAME‘)
with tf.Session() as sess:
    print("image:")
    image = sess.run(a)
    print(image)
    print("reslut:")
    result = sess.run(pooling)
    print(result)

输出结果:

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

[[ 8. 7.]
[ 8. 7.]
[ 8. 7.]
[ 6. 5.]]

[[ 4. 4.]
[ 8. 7.]
[ 8. 8.]
[ 7. 8.]]

[[ 3. 4.]
[ 5. 6.]
[ 7. 8.]
[ 7. 8.]]]]

平均池化avg_pool 用法与max_pool一致

时间: 2024-08-11 09:57:32

tensorflow max_pool(最大池化)应用的相关文章

TensorFlow 池化层

在 TensorFlow 中使用池化层 在下面的练习中,你需要设定池化层的大小,strides,以及相应的 padding.你可以参考 tf.nn.max_pool().Padding 与卷积 padding 的原理一样. 说明 完成 maxpool 函数中所有的 TODO. 设定 strides,padding 和 ksize 使得池化的结果维度为 (1, 2, 2, 1). """ Set the values to `strides` and `ksize` such

第十四节,TensorFlow中的反卷积,反池化操作以及gradients的使用

反卷积是指,通过测量输出和已知输入重构未知输入的过程.在神经网络中,反卷积过程并不具备学习的能力,仅仅是用于可视化一个已经训练好的卷积神经网络,没有学习训练的过程.反卷积有着许多特别的应用,一般可以用于信道均衡.图像恢复.语音识别.地震学.无损探伤等未知输入估计和过程辨识方面的问题. 在神经网络的研究中,反卷积更多的是充当可视化的作用,对于一个复杂的深度卷积网络,通过每层若干个卷积核的变换,我们无法知道每个卷积核关注的是什么,变换后的特征是什么样子.通过反卷积的还原,可以对这些问题有个清晰的可视

CNN之池化层tf.nn.max_pool|tf.nn.avg_pool|tf.reduce_mean

摘要:池化层的主要目的是降维,通过滤波器映射区域内取最大值.平均值等操作. 均值池化:tf.nn.avg_pool(input,ksize,strides,padding) 最大池化:tf.nn.max_pool(input,ksize,strides,padding) input:通常情况下是卷积层输出的featuremap,shape=[batch,height,width,channels]              假定这个矩阵就是卷积层输出的featuremap(2通道输出)  他的s

tf.nn的conv2d卷积与max_pool池化

tf.nn.conv2d(value,filter,strides,[...]) 对于图片来说 value :   形状通常是np.array()类型的4维数组也称tensor(张量),  (batch,height,width,channels) 可以理解为(图片样本的个数,高,宽,图片的颜色通道数) value是待卷积的数据 filter: 卷积核 -4元素元组[height,width,in_channels,out_channels],前面的3个参数和value的后面3个参数一一对应.但

tensorflow 卷积/反卷积-池化/反池化操作详解

Plese see this answer for a detailed example of how tf.nn.conv2d_backprop_input and tf.nn.conv2d_backprop_filter in an example. In tf.nn, there are 4 closely related 2d conv functions: tf.nn.conv2d tf.nn.conv2d_backprop_filter tf.nn.conv2d_backprop_i

Tensorflow 池化层(pooling)和全连接层(dense)

一.池化层(pooling) 池化层定义在 tensorflow/python/layers/pooling.py. 有最大值池化和均值池化. 1. 最大池化层 tf.layers.max_pooling2d max_pooling2d( inputs, pool_size, strides, padding='valid', data_format='channels_last', name=None ) inputs: 进行池化的数据.pool_size: 池化的核大小(pool_heigh

学习笔记TF014:卷积层、激活函数、池化层、归一化层、高级层

CNN神经网络架构至少包含一个卷积层 (tf.nn.conv2d).单层CNN检测边缘.图像识别分类,使用不同层类型支持卷积层,减少过拟合,加速训练过程,降低内存占用率. TensorFlow加速所有不同类弄卷积层卷积运算.tf.nn.depthwise_conv2d,一个卷积层输出边接到另一个卷积层输入,创建遵循Inception架构网络 Rethinking the Inception Architecture for Computer Vision https://arxiv.org/ab

卷积+池化+卷积+池化+全连接

#!/usr/bin/env python import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data # In[2]: mnist = input_data.read_data_sets('MNIST_data', one_hot=True) # 每个批次的大小batch_size = 100# 计算一共有多少个批次n_batch = mnist.train.num_examples //

卷积+池化+卷积+池化+全连接2

#!/usr/bin/env python import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data # In[2]: mnist = input_data.read_data_sets('MNIST_data', one_hot=True) # 每个批次的大小batch_size = 100# 计算一共有多少个批次n_batch = mnist.train.num_examples //