精华内容
下载资源
问答
  • 最大池化函数 tf.nn.max_pool

    千次阅读 2018-10-27 20:45:59
    tf.nn.max_pool( value, ksize, strides, ...实现最大池化 value: 4维张量,维度顺序参考data_format ksize: value中,对应维度的池化框的大小,一般为[1,f,f,1] strides: 步长,对应维度的步...
    tf.nn.max_pool(
        value,
        ksize,
        strides,
        padding,
        data_format='NHWC',
        name=None
    )
    

    实现最大池化
    value: 4维张量,维度顺序参考data_format
    ksize: value中,对应维度的池化框的大小,一般为[1,f,f,1]
    strides: 步长,对应维度的步长,一般为[1,s,s,1]
    padding:填充方式,一般为‘SAME’或者‘VALID’,string格式
    data_format: 数据导入格式,默认为[个数,高度,宽度,信道数]

    输出,对应池化后的张量

    参考:
    https://tensorflow.google.cn/api_docs/python/tf/nn/max_pool

    展开全文
  • 池化函数(Pooling Function)

    万次阅读 2017-09-22 16:34:14
    在神经网络中,池化函数(Pooling Function)一般在卷积函数的下一层。在经过卷积层提取特征之后,得到的特征图代表了 比 像素 更高级的特征,已经可以交给 分类器 进行训练分类了。但是我们 每一组卷积核 都...

    1. 池化(Pooling)概念

    在神经网络中,池化函数(Pooling Function)一般在卷积函数的下一层在经过卷积层提取特征之后,得到的特征图代表了  比  像素   更高级的特征,已经可以交给 分类器 进行训练分类了。但是我们 每一组卷积核  都生成 一副与原图像素相同大小的  卷积图,节点数一点没少。如果使用了 多个卷积核  还会使得通道数比之前多的多!我靠,这维度不一下子上去了嘛。所以卷积之后我们需要进行池化,也就是进行降维。


    池化操作是利用一个矩阵窗口张量上进行扫描,将每个矩阵中的通过取最大值或者平均值等来减少元素的个数(备注:最大值和平均值的方法可以使得特征提取拥有“平移不变性”,也就说图像有了几个像素的位移情况下,依然可以获得稳定的特征组合,平移不变形对于识别十分重要)。

    池化的过程:如下图所示(左边红色区域里边的数据分别为2 2 2 4,有点不清晰),kernel size 就是矩阵窗口大小,Stides 就是移动的步长。

    Max Pooling就找每个矩阵窗口中的最大值;

    Mean Pooling就是对每个矩阵窗口中取平均值;

    Stochastic Pooling详解见http://www.cnblogs.com/tornadomeet/p/3432093.html


    其他的地方和卷积相似:

    [python] view plain copy
     print?
    1. pool = tf.nn.max_pool(conv, ksize=[1,2,2,1], strides=[1,2,2,1], padding='SAME')  

    展开全文
  • 池化函数

    2019-02-10 11:52:17
    在CNN中,池化函数一般放在卷积层之后,图片经过卷积层,获得的特征更加适合分类器的学习,然而如果进行的是同卷积或者全卷积,得到的特征大小不比原来的小,这样我们就需要降维,为此引入池化函数池化函数tf.nn...

    背景

    在CNN中,池化函数一般放在卷积层之后,图片经过卷积层,获得的特征更加适合分类器的学习,然而如果进行的是同卷积或者全卷积,得到的特征大小不比原来的小,这样我们就需要降维,为此引入池化函数。

    池化函数tf.nn.max_pool(avg_pool)

    在TensorFlow中池化函数如下:
    tf.nn.max_pool(input,ksize,strides,padding,name=None)
    tf.nn.avg_pool(input,ksize,strides,padding,name=None)
    说明:
    input:需要池化的输入,一般池化层接在卷积层之后,所以通常输入的是feature map,依然是[batch,height,width,channels]这样的shape
    ksize:池化窗口的大小,取一个四维向量,一般是[1,height,width,1],因为我们不想在batch和channels上做池化,所以这两个维度设为1.
    strides:和卷积参数含义一样,窗口在每个维度上滑动的步长,一般也是[1,stride,stride,1].
    padding:和卷积参数含义一样,也是取VALID或者SAME,VALID是不padding操作,SAME是padding操作。

    实例:池化函数的使用

    1.定义输入变量
    定义1个输入变量用来模拟输入图片,4×4大小的2通道矩阵,并将其赋予指向的值。2个通道分别为:4个0到4个3组成的矩阵,4个4到4个7组成的矩阵。

     import tensorflow as tf
    img = tf.constant([[[0.0,4.0],[0.0,4.0],[0.0,4.0],[0.0,4.0]],
                       [[1.0,5.0],[1.0,5.0],[1.0,5.0],[1.0,5.0]],
                       [[2.0,6.0],[2.0,6.0],[2.0,6.0],[2.0,6.0]],
                       [[3.0,7.0],[3.0,7.0],[3.0,7.0],[3.0,7.0]]])
    img = tf.reshape(img,shape=[1,4,4,2])
    

    2.定义池化操作
    这里定义了4个池化操作和一个取均值操作。前两个操作是最大池化操作,接下来两个是均值池化操作,最后一个是取均值操作。

    pooling = tf.nn.max_pool(img,[1,2,2,1],[1,2,2,1],padding='VALID')
    pooling1 = tf.nn.max_pool(img,[1,2,2,1],[1,1,1,1],padding='VALID')
    pooling2 = tf.nn.avg_pool(img,[1,4,4,1],[1,1,1,1],padding='SAME')
    pooling3 = tf.nn.avg_pool(img,[1,4,4,1],[1,4,4,1],padding='SAME')
    nt_hpool2_flat = tf.reshape(tf.transpose(img),[-1,16])
    pooling4 = tf.reduce_mean(nt_hpool2_flat,1)#1表示对行求均值(轴是行),0表示对列求均值
    

    3.运行池化操作

    with tf.Session() as sess:
        # tf.global_variables_initializer()
        sess.run(tf.global_variables_initializer())
        print("image:")
        images = sess.run(img)
        print(images)
        result=sess.run(pooling)
        print("result:\n",result)
        result = sess.run(pooling1)
        print("result1:\n",result)
        result = sess.run(pooling2)
        print("result2:\n", result)
        result = sess.run(pooling3)
        print("result3:\n", result)
        flat,result = sess.run([nt_hpool2_flat,pooling4])
        print("result4:\n",result)
        print("flat:\n",flat)
    

    结果:


    image:
    [[[[0. 4.]
    [0. 4.]
    [0. 4.]
    [0. 4.]]

    [[1. 5.]
    [1. 5.]
    [1. 5.]
    [1. 5.]]

    [[2. 6.]
    [2. 6.]
    [2. 6.]
    [2. 6.]]

    [[3. 7.]
    [3. 7.]
    [3. 7.]
    [3. 7.]]]]
    通过上面的输出可以看出,img与我们设置的初始值是一样的,即第一个通道为
    [[0 0 0 0],
    [1 1 1 1],
    [2 2 2 2],
    [3 3 3 3]]
    第二个通道为
    [[4 4 4 4],
    [5 5 5 5],
    [6 6 6 6],
    [7 7 7 7]]。


    result:
    [[[[1. 5.]
    [1. 5.]]

    [[3. 7.]
    [3. 7.]]]]
    这个操作在卷积神经网络中是最常用的,一般步长都会设成与池化滤波器尺寸一致(池化的卷积尺寸为2×2,所以步长为2),生成2个通道的2×2矩阵。矩阵的内容是从原始输入中取最大值,由于池化filter中对应的通道维度是1,所以结果仍然保持源通道数


    result1:
    [[[[1. 5.]
    [1. 5.]
    [1. 5.]]

    [[2. 6.]
    [2. 6.]
    [2. 6.]]

    [[3. 7.]
    [3. 7.]
    [3. 7.]]]]

    result2:
    [[[[1. 5. ]
    [1. 5. ]
    [1. 5. ]
    [1. 5. ]]

    [[1.5 5.5]
    [1.5 5.5]
    [1.5 5.5]
    [1.5 5.5]]

    [[2. 6. ]
    [2. 6. ]
    [2. 6. ]
    [2. 6. ]]

    [[2.5 6.5]
    [2.5 6.5]
    [2.5 6.5]
    [2.5 6.5]]]]
    result1和result2分别演示了VALID和SAME的两种padding的取值。
    1.VALID中使用的filter为2×2,步长为1×1,生成了2×2大小的矩阵。
    2.在SAME中使用的filter,步长仍然为1×1,生成4×4的矩阵,padding之后在计算avg_pool时,是将输入矩阵与filter对应尺寸内的元素总和除以这些元素中非0的个数(而不是filter的总个数)


    result3:
    [[[[1.5 5.5]]]]
    result4:
    [1.5 5.5]
    flat:
    [[0. 1. 2. 3. 0. 1. 2. 3. 0. 1. 2. 3. 0. 1. 2. 3.]
    [4. 5. 6. 7. 4. 5. 6. 7. 4. 5. 6. 7. 4. 5. 6. 7.]]

    result3是常用的操作手法,也叫全局池化法,就是使用一个与原有输入同样尺寸的filter进行池化,一般放在最后一层,用于表达图像通过卷积网络处理后的最终特征。而result4是一个均值操作 ,可以看到将数据转置后的均值操作得到的值,与全局池化平均值是一样的结果。

    展开全文
  • 手动实现最大池化

    2020-07-30 22:05:40
    最大池化(Max Pooling) 网格内的值不取平均值,而是取网格内的最大值进行池化操作。 import imageio import numpy as np import matplotlib.pylab as plt img = imageio.imread("imori.jpg") s = 8 rows,cols,C =...

    最大池化(Max Pooling)

    网格内的值不取平均值,而是取网格内的最大值进行池化操作。

    import imageio
    import numpy as np
    import matplotlib.pylab as plt
    
    img = imageio.imread("imori.jpg")
    s = 8
    rows,cols,C = img.shape
    
    nrows = int(rows/s)
    ncols = int(cols/s)
    img1 = np.zeros((nrows,ncols,C),np.uint8)
    
    for row in range(nrows):
        for col in range(ncols):
            for c in range(C):
                img1[row,col,c] = np.max(img[row*s:(row+1)*s-1,col*s:(col+1)*s-1,c])
    
    
    # imageio.imsave("output.jpg",img1)
    plt.figure(figsize=(8,6))
    plt.subplot(121)
    plt.imshow(img)
    plt.axis('off') 
    plt.subplot(122)
    plt.imshow(img1)
    plt.axis('off') 
    plt.show()
    
    

    结果:
    在这里插入图片描述

    展开全文
  • 深度学习之最大池化操作的实现

    千次阅读 2020-04-25 19:25:32
    } } } } } 其中,函数的参数意义如下: maxpool_layer:池化层(包含layer层的输出) network:网络结构(包含layer层的输入) 下面逐步分析代码: int w_offset = -l.pad; // max pooling层可能会进行padding,...
  • 池化函数应用

    2018-05-12 11:17:11
    池化函数说明1 语法格式tf.nn.max_pool(input,ksize,strides,padding,name=None)tf.nn.avg_pool(input,ksize,strides,padding,name=None)2 参数说明input:需要池化的输入,一般池化层接在卷积层后面,所以输入...
  • TensorFlow 最大池化

    千次阅读 2017-07-10 22:25:48
    TensorFlow 最大池化 由 Aphex34 (自己的作品) CC BY-SA 4.0, 通过 Wikimedia Commons 共享 这是一个最大池化的例子max pooling...
  • cv::Mat average_pooling(cv::Mat img){ int height = img.rows; int width = img.cols; int channel = img.channels(); // prepare output cv::Mat out = cv::Mat::zeros(height, width, CV_8UC3);...
  • 在神经网络中,池化函数一般跟在卷积函数的下一层,池化操作是利用一个矩阵窗口在张量上进行扫描,将每个矩阵窗口中的值通过最大值或者平均值来减少元素的个数,每个池化操作的矩阵窗口大小是由ksize指定的,并且...
  • Tensorflow之池化函数汇总

    千次阅读 2017-09-07 20:43:10
    池化函数: 在神经网络中,池化函数一半都是跟在卷积函数的下一层,它们被定义在tensorflow-1.1.0/tensorflow/python/ops下的nn.py和gen_nn_ops.py文件中; 池化操作是利用一个矩阵窗口在张量上进行扫描,将每个...
  • MATLAB 实现最大池化

    千次阅读 2020-04-03 11:50:05
    MATLAB 实现最大池化 function [dst_img] = max_pooling(img,win_size) % 对影像img进行全局最大池化操作,默认窗口为正方形,边长为win_size % 返回池化后的影像 fun = @(block_struct) max(block_struct.data(:));...
  • 7、TensorFLow 中的池化函数

    千次阅读 2017-11-26 11:14:17
    1、使用池化函数的好处 大大降低特征的维数,避免过拟合 可去除一些冗余信息,得到一个低分辨率的特征图 使得模型更关注是否存在某些特征而不是特征的具体位置,可以容忍一些特征微小的位移 2、具体操作...
  • Python池化操作

    千次阅读 2020-02-27 16:25:38
    对输入图像进行池化操作进行降...最大池化:对池化区域的所有像素值取最大值,这种方法得到的特征数据对纹理信息更加敏感 代码 import numpy as np import cv2 #池化操作,缩放图像 def pooling(data, m, n, key...
  • Pytorch没有对全局平均(最大池化单独封装为一层。需要自己实现。下面有两种简单的实现方式。 使用torch.max_pool1d()定义一个网络层。 使用nn.AdaptiveMaxPool1d(1)并设置输出维度是1 import torch import ...
  • 基于MATLAB的神经网络池化过程示例基于MATLAB的神经网络池化过程示例
  • 池化操作的梯度分两部分介绍,第一部分介绍平均值池化的梯度计算,第二部分介绍最大池化的梯度计算 一.平均值池化的梯度 利用计算梯度的函数gradients实现上述示例,具体代码如下: import tensorflow as tf ...
  • 先贴上效果图: 将读取图片,并将其赋给...因为这里我们进行池化操作的过滤器的尺寸是 3 * 3。 所以对与一些图片尺寸的大小(长宽)不能为3整除的,我们需要进行处理。 while 1==1 if mod(imgsize(1),3)== 0 ...
  • 4.2 Tensorflow笔记:池化函数

    万次阅读 2017-08-04 01:16:22
    池化卷积神经网络的结构其中,input为输入,conv为卷积层,由卷积核构成,pool为池层,由池化函数构成最后是全连接层与输出层,其负责对卷积层提取的特征进行处理以获得我们需要的结果池化函数的意义池化层的输入一般来源...
  • tensorflow中的池化函数解析

    千次阅读 2018-05-05 18:20:01
    2. tensorflow中的池化函数 2.1 tf.nn.max_pool (1)函数功能描述: ax pooling是CNN当中的最大值池化操作 (2)函数原型: tf.nn.max_pool(value, ksize, strides, padding, name=None) (3)函数参数...
  • TensorFlow实践(12)——池化函数详解(一)前 言(二)池化类型(三)卷积函数实现详解(四)卷积...常用的池化函数最大池化,平均池化,其前向计算十分简单,最大池化就是求最大值,平均池化就是求平均值.其效果如...
  • 综述:最大池化,平均池化,全局最大池化和全局平均池化?区别原来是这样
  • 图像最大池化

    2020-03-15 12:55:56
    最大池化 池化:把图片使用均等大小网格分割,并求网格内代表值的操作 最大池化:将网格中的最大值作为这个网格的代表值 二. 使用4*4网格对图像进行最大池化操作 import cv2 import numpy as np # max ...
  • 池化层MaxPool函数详解及反向传播的公式推导 正文 import torch import numpy as np class MaxPool2D: def __init__(self, kernel_size=(2, 2), stride=2): self.stride = stride self.kernel...
  • 最大池化 tf.nn.max_pool() tf.nn.max_pool( value, ksize; strides, padding, data_format='NHWC' ) 均值池化 tf.nn.avg_pool() tf.nn.avg_pool( value, ksize; strides, padding, data_for
  • 1. 池化层——Pooling layer 2. 线性层——Linear layer 3. 激活函数层——Activation layer ...最大池化: import os import torch import random from PIL import Image import numpy as np import
  • 最大池化

    千次阅读 2018-07-04 18:50:00
    TensorFlow 最大池化 由 Aphex34 (自己的作品)CC BY-SA 4.0, 通过 Wikimedia Commons 共享 这是一个最大池化的例子max pooling用了 2x2 的滤波器 stride ...
  • pytorch之卷积模块、池化、激活函数(可视化)

    万次阅读 多人点赞 2018-10-29 18:06:16
    池化的方式有很多种,比如最大池化,均值池化等等,在卷积网络中一般使用最大池化。 在 pytorch 中最大池化的方式也有两种,一种是 nn.MaxPool2d(),一种是 torch.nn.functional.max_pool2d(),他们对于图片...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,251
精华内容 13,700
关键字:

最大池化函数