精华内容
参与话题
问答
  • 卷积层与池化

    万次阅读 多人点赞 2018-08-04 16:08:16
    构建了最简单的网络之后,是时候再加上卷积和池化了。这篇,虽然我还没开始构思,但我知道,一定是很长的文章。 卷积神经网络(Convolutional Neural Layer, CNN),除了全连接层以外(有时候也不含全连接层,因为...

    构建了最简单的网络之后,是时候再加上卷积和池化了。这篇,虽然我还没开始构思,但我知道,一定是很长的文章。

    卷积神经网络(Convolutional Neural Layer, CNN),除了全连接层以外(有时候也不含全连接层,因为出现了Global average pooling),还包含了卷积层和池化层。卷积层用来提取特征,而池化层可以减少参数数量。

    卷积层

    先谈一下卷积层的工作原理。

    我们是使用卷积核来提取特征的,卷积核可以说是一个矩阵。假如我们设置一个卷积核为3*3的矩阵,而我们图片为一个分辨率5*5的图片。那么卷积核的任务就如下所示:

    从左上角开始,卷积核就对应着数据的3*3的矩阵范围,然后相乘再相加得出一个值。按照这种顺序,每隔一个像素就操作一次,我们就可以得出9个值。这九个值形成的矩阵被我们称作激活映射(Activation map)。这就是我们的卷积层工作原理。也可以参考下面一个gif:
    其中,卷积核为

    101010101

    其实我们平时举例的卷积核已经被翻转180度一次了,主要是因为计算过程的原因。详细不用了解,但原理都一样。

    但其实我们输入的图像一般为三维,即含有R、G、B三个通道。但其实经过一个卷积核之后,三维会变成一维。它在一整个屏幕滑动的时候,其实会把三个通道的值都累加起来,最终只是输出一个一维矩阵。而多个卷积核(一个卷积层的卷积核数目是自己确定的)滑动之后形成的Activation Map堆叠起来,再经过一个激活函数就是一个卷积层的输出了。

    卷积层还有另外两个很重要的参数:步长和padding。

    所谓的步长就是控制卷积核移动的距离。在上面的例子看到,卷积核都是隔着一个像素进行映射的,那么我们也可以让它隔着两个、三个,而这个距离被我们称作步长。

    而padding就是我们对数据做的操作。一般有两种,一种是不进行操作,一种是补0使得卷积后的激活映射尺寸不变。上面我们可以看到5*5*3的数据被3*3的卷积核卷积后的映射图,形状为3*3,即形状与一开始的数据不同。有时候为了规避这个变化,我们使用“补0”的方法——即在数据的外层补上0。

    下面是示意图:

    步长2
    步长为2 (图片来自于机器之心
    补0
    补0的变化 (图片来自于机器之心

    了解卷积发展史的人都应该知道,卷积神经网络应用最开始出现是LeCun(名字真的很像中国人)在识别手写数字创建的LeNet-5。

    LeNet-5

    后面爆发是因为AlexNet在ImageNet比赛中拔得头筹,硬生生把误差变成去年的一半。从此卷积网络就成了AI的大热点,一大堆论文和网络不断地发挥它的潜能,而它的黑盒性也不断被人解释。

    能否对卷积神经网络工作原理做一个直观的解释? - Owl of Minerva的回答 - 知乎里面通过我们对图像进行平滑的操作进而解释了卷积核如何读取特征的。

    我们需要先明确一点,实验告诉我们人类视觉是先对图像边缘开始敏感的。在我的理解中,它就是说我们对现有事物的印象是我们先通过提取边界的特征,然后逐渐的完善再进行组装而成的。而我们的卷积层很好的做到了这一点。

    这是两个不同的卷积核滑动整个图像后出来的效果,可以看出,经过卷积之后图像的边界变得更加直观。我们也可以来看下VGG-16网络第一层卷积提取到的特征:

    VGG-16

    由此来看,我们也知道为什么我们不能只要一个卷积核。在我的理解下,假使我们只有一个卷积核,那我们或许只能提取到一个边界。但假如我们有许多的卷积核检测不同的边界,不同的边界又构成不同的物体,这就是我们怎么从视觉图像检测物体的凭据了。所以,深度学习的“深”不仅仅是代表网络,也代表我们能检测的物体的深度。即越深,提取的特征也就越多。

    Google提出了一个项目叫Deepdream,里面通过梯度上升、反卷积形象的告诉我们一个网络究竟想要识别什么。之前权重更新我们讲过梯度下降,而梯度上升便是计算卷积核对输入的噪声的梯度,然后沿着上升的方向调整我们的输入。详细的以后再讲,但得出的图像能够使得这个卷积核被激活,也就是说得到一个较好的值。所以这个图像也就是我们卷积核所认为的最规范的图像(有点吓人):

    Deepdream
    其实这鹅看着还不错,有点像孔雀。

    池化层 (pooling layer)

    前面说到池化层是降低参数,而降低参数的方法当然也只有删除参数了。

    一般我们有最大池化和平均池化,而最大池化就我认识来说是相对多的。需要注意的是,池化层一般放在卷积层后面。所以池化层池化的是卷积层的输出!

    扫描的顺序跟卷积一样,都是从左上角开始然后根据你设置的步长逐步扫描全局。有些人会很好奇最大池化的时候你怎么知道哪个是最大值,emmm,其实我也考虑过这个问题。CS2131n里面我记得是说会提前记录最大值保存在一个矩阵中,然后根据那个矩阵来提取最大值。

    至于要深入到计算过程与否,应该是没有必要的。所以我也没去查证过程。而且给的都是示例图,其实具体的计算过程应该也是不同的,但效果我们可以知道就好了。

    至于为什么选择最大池化,应该是为了提取最明显的特征,所以选用的最大池化。平均池化呢,就是顾及每一个像素,所以选择将所有的像素值都相加然后再平均。

    池化层也有padding的选项。但都是跟卷积层一样的,在外围补0,然后再池化。

    代码解析
    import tensorflow as tf
    import numpy as np
    from tensorflow.examples.tutorials.mnist import input_data
    
    mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
    summary_dir = './summary'
    #批次
    batch_size = 100
    
    n_batch = mnist.train.num_examples // batch_size
    
    x = tf.placeholder(tf.float32, [None, 784], name='input')
    y = tf.placeholder(tf.float32, [None, 10], name='label')
    
    def net(input_tensor):
        conv_weights = tf.get_variable('weight', [3, 3, 1, 32],
                                        initializer=tf.truncated_normal_initializer(stddev=0.1))
        conv_biases = tf.get_variable('biase', [32], initializer=tf.constant_initializer(0.0))
    
        conv = tf.nn.conv2d(input_tensor, conv_weights, strides=[1, 1, 1, 1], padding='SAME')
        relu = tf.nn.relu(tf.nn.bias_add(conv, conv_biases))
    
        pool = tf.nn.max_pool(relu, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1], padding='SAME')
    
        pool_shape = pool.get_shape().as_list()
        nodes = pool_shape[1] * pool_shape[2] * pool_shape[3]
        pool_reshaped = tf.reshape(pool, [-1, nodes])
    
        W = tf.Variable(tf.zeros([nodes, 10]), name='weight')
        b = tf.Variable(tf.zeros([10]), name='bias')
        fc = tf.nn.softmax(tf.matmul(pool_reshaped, W) + b)
    
        return fc
    
    reshaped = tf.reshape(x, (-1, 28, 28, 1))
    prediction = net(reshaped)
    loss_ = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=tf.argmax(y, 1), logits=prediction, name='loss')
    loss = tf.reduce_mean(loss_)
    
    train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)
    
    correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(prediction, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32), name='accuracy')
    
    init = tf.global_variables_initializer()
    
    with tf.Session() as sess:
        sess.run(init)
        for epoch in range(31):
            for batch in range(n_batch):
                batch_xs, batch_ys = mnist.train.next_batch(batch_size)
                sess.run(train_step, feed_dict={x: batch_xs, y: batch_ys})
            acc = sess.run(accuracy, feed_dict={x: mnist.test.images, y: mnist.test.labels})
            print('Iter' + str(epoch) + ",Testing Accuracy" + str(acc))

    这相对于我第一个只用全连接的网络只多了一个net函数,还有因为卷积层的关系进来的数据x需要改变形状。只讲这两部分:

    reshaped = tf.reshape(x, (-1, 28, 28, 1))
    prediction = net(reshaped)

    由于我们feedict上面是,feed_dict={x: mnist.test.images, y: mnist.test.labels},而这样子调用tensorflow的句子我们得到的x固定的形状。因此我们应用tf.reshape(x_need_reshaped,object_shape)来得到需要的形状。

    其中的1表示拉平,不能用None,是固定的。

    conv_weights = tf.get_variable('weight', [3, 3, 1, 32],
                                        initializer=tf.truncated_normal_initializer(stddev=0.1))
    conv_biases = tf.get_variable('biase', [32], initializer=tf.constant_initializer(0.0))
    
    conv = tf.nn.conv2d(input_tensor, conv_weights, strides=[1, 1, 1, 1], padding='SAME')
    relu = tf.nn.relu(tf.nn.bias_add(conv, conv_biases))
    
    pool = tf.nn.max_pool(relu, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1], padding='SAME')

    大部分都是应用内置的函数,来初始化weight(就是卷积核)和biases(偏置项)。偏置项我们没有提到,但其实就是多了一个参数来调控,因此我们讲卷积层的时候也没怎么讲。按照代码就是出来Activation Map之后再分别加上bias。池化也是用到了最大池化。

    注意一下relu。它也是一个激活函数,作用可以说跟之前讲的softmax一样,不过它在卷积层用的比较多,而且也是公认的比较好的激活函数。它的变体有很多。有兴趣大家可以自己去查阅资料。以后才会写有关这方面的文章。

        pool_shape = pool.get_shape().as_list()
        nodes = pool_shape[1] * pool_shape[2] * pool_shape[3]
        pool_reshaped = tf.reshape(pool, [-1, nodes])
    
        W = tf.Variable(tf.zeros([nodes, 10]), name='weight')

    池化层的输出我们并不知道它是如何的形状(当然,你也可以动手算)。因此就算把池化层拉成一维的矩阵,我们也不知道W需要如何的形状。因此,我们查看pool(即池化层的输出)的形状,我暗地里print了一下为[None, 14, 14, 32],因此pool拉平后,就是[None, 14*14*32, 10]。为了接下来进行全连接层的计算,我们的W的形状也应该为[14*14*32, 10]。这段代码的原理就是如此。

    准确率也一样取后15次:

    结果

    emmm, 不用跟之前比了,明显比以前好很多了。下一章决定总结一下,优化的方法好了。

    参考
    https://mlnotebook.github.io/post/CNN1/(可惜是全英)
    能否对卷积神经网络工作原理做一个直观的解释? - Owl of Minerva的回答 - 知乎
    CS231n

    展开全文
  • 池化通俗讲解

    千次阅读 2016-04-26 21:07:05
    来源:...池化 Contents   1 池化: 概述2 池化的不变性3 形式化描述4 中英文对照5 中文译者

    来源:http://ufldl.stanford.edu/wiki/index.php/%E6%B1%A0%E5%8C%96#.E6.B1.A0.E5.8C.96.E7.9A.84.E4.B8.8D.E5.8F.98.E6.80.A7

    池化

    Contents

     
    • 1 池化: 概述
      2 池化的不变性
      3 形式化描述
      4 中英文对照
      5 中文译者

    池化: 概述

    在通过卷积获得了特征 (features) 之后,下一步我们希望利用这些特征去做分类。理论上讲,人们可以用所有提取得到的特征去训练分类器,例如 softmax 分类器,但这样做面临计算量的挑战。例如:对于一个 96X96 像素的图像,假设我们已经学习得到了400个定义在8X8输入上的特征,每一个特征和图像卷积都会得到一个 (96 − 8 + 1) * (96 − 8 + 1) = 7921 维的卷积特征,由于有 400 个特征,所以每个样例 (example) 都会得到一个 892 * 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,并且容易出现过拟合 (over-fitting)。


    为了解决这个问题,首先回忆一下,我们之所以决定使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)。这些概要统计特征不仅具有低得多的维度 (相比使用所有提取得到的特征),同时还会改善结果(不容易过拟合)。这种聚合的操作就叫做池化 (pooling),有时也称为平均池化或者最大池化 (取决于计算池化的方法)。


    下图显示池化如何应用于一个图像的四块不重合区域。

    Pooling schematic.gif


    池化的不变性

    如果人们选择图像中的连续范围作为池化区域,并且只是池化相同(重复)的隐藏单元产生的特征,那么,这些池化单元就具有平移不变性 (translation invariant)。这就意味着即使图像经历了一个小的平移之后,依然会产生相同的 (池化的) 特征。在很多任务中 (例如物体检测、声音识别),我们都更希望得到具有平移不变性的特征,因为即使图像经过了平移,样例(图像)的标记仍然保持不变。例如,如果你处理一个MNIST数据集的数字,把它向左侧或右侧平移,那么不论最终的位置在哪里,你都会期望你的分类器仍然能够精确地将其分类为相同的数字。

    (*MNIST 是一个手写数字库识别库: http://yann.lecun.com/exdb/mnist/)


    形式化描述

    形式上,在获取到我们前面讨论过的卷积特征后,我们要确定池化区域的大小(假定为m \times n),来池化我们的卷积特征。那么,我们把卷积特征划分到数个大小为 m \times n的不相交区域上,然后用这些区域的平均(或最大)特征来获取池化后的卷积特征。这些池化后的特征便可以用来做分类。


    中英文对照

    特征 features
    样例 example
    过拟合 over-fitting
    平移不变性 translation invariant
    池化 pooling
    提取 extract
    物体检测 object detection


    中文译者

    陈玉栓 (chris_chen_cys@hotmail.com) , 刘鸿鹏飞(just.dark@foxmail.com), 邓亚(dengyafeng@gmail.com), 晓风(xiaofeng.zhb@alibaba-inc.com)


    展开全文
  • 深度学习之池化方法(pooling)

    千次阅读 2019-06-02 16:53:11
    首先看一下池化的作用: 1、减少输出的大小和降低过拟合; 2、减少后续参数的数量; 3、对特征图进行压缩,使得特征图变小,简化网络的复杂度,还有就是提取主要特征; 有哪些池化方法? ​​​​​​​​​​...

    首先看一下池化的作用:

    1、减少输出的大小和降低过拟合;

    2、减少后续参数的数量;

    3、对特征图进行压缩,使得特征图变小,简化网络的复杂度,还有就是提取主要特征;

    有哪些池化方法?

    1. ​​​​​​​​​​​​​​平均池化和最大池化
    2. 重叠池化
    3. 空间金字塔池化
    4. 全局最大池化
    5. 全局平均池化

    1、平均池化和最大池化

     

    展开全文
  • 池化

    千次阅读 2019-07-31 15:28:07
    池化 在通过卷积层获得特征(feature map) 之后 ,下一步要做的就是利用这些特征进行整合、分类。理论上来讲,所有经过卷积提取得到的特征都可以作为分类器的输入(比如 softmax 分类器) ,但这样做会面临着巨大的计算...

    池化

         在通过卷积层获得特征(feature map) 之后 ,下一步要做的就是利用这些特征进行整合、分类。理论上来讲,所有经过卷积提取得到的特征都可以作为分类器的输入(比如 softmax 分类器) ,但这样做会面临着巨大的计算量. 比如对于一个 300X300 的输入图像(假设只有一个通道) ,经过 100个 3X3 大小的卷积核进行卷积操作后,得到的特征矩阵大小是 (300 -3+1) X(300 -3+1) = 88804 ,将这些数据一下输入到分类器中显然不好.

         此时我们就会采用 池化层将得到的特征(feature map) 进行降维,假如我们得到一个局部特征,他是一个图像的一个局部放大图,分辨率很大,那么我们就可以将一些像素点周围的像素点(特征值) 近似看待,将平面内某一位置及其相邻位置的特征值进行统计,并将汇总后的结果作为这一位置在该平面的值.

        常见的池化有 最大池化(Max Pooling) , 平均池化(Average Pooling) ,使用池化函数来进一步对卷积操作得到的特征映射结果进行处理。池化会将平面内某未知及其相邻位置的特征值进行统计汇总。并将汇总后的结果作为这一位置在该平面的值。最大池化会计算该位置及其相邻矩阵区域内的最大值,并将这个最大值作为该位置的值,平均池化会计算该位置及其相邻矩阵区域内的平均值,并将这个值作为该位置的值。使用池化不会造成数据矩阵深度的改变,只会在高度和宽带上降低,达到降维的目的。

    池化过程

    下面以最大池化为例,平均池化原理一样。

     

     

    常用的池化函数

       Tensorflow 提供了几个封装有池化操作的函数,如实现最大池化的 nn.max_pool() 函数,实现平均池化的 nn.avg_pool()函数。

    pool(input,window_shape,pooling_type,padding,dilation_rate,strides,name,data_format)
    avg_pool(value,ksize,strides,padding,data_format,name) 
    max_pool(value,ksize,strides,padding,data_format,name) 
    #ksize 参数提供了过滤器的尺寸,strides 参数提供步长信息
    #padding 提供是否使用全0填充 

         以 nn.max_pool() 为例 ,首先需要传入当前层的单位矩阵,这个矩阵是四维矩阵(batch_size , 高度,宽度,深度) ,

    第二个参数为过滤器(池化核)的尺寸。虽然能够将其赋值为长度为4 的一维数组,但是这个数的第一个数和第四个数必须是1 

    。nn.max_pool() 函数的第三个参数是步长。最后一个参数指定了是否使用全0填充。VALD 表示不使用全0 填充。 SAME表示使用全0 填充。

     

    池化层的代码实现 

      1 #!/usr/bin/env python
      2 # Author: xiaxiaosheng
      3 # Created Time: 2019年07月31日 星期三 08时49分28秒
      4 
      5 # icoding:utf-8
      6 import tensorflow as tf
      7 import numpy as np
      8 
      9 M = np.array([[[-2],[2],[0],[3]],
     10             [[1],[2],[-1],[2]],
     11             [[0],[-1],[1],[0]]],dtype="float32").reshape(1,3,4,1)
     12 
     13 filter_weight = tf.get_variable("weights",[2,2,1,1],initializer=
     14         tf.constant_initializer([[2,0],[-1,1]]))
     15 biase = tf.get_variable('biases',[1],initializer= tf.constant_initializer(1>
     16 x = tf.placeholder('float32',[1,None,None,1])
     17 
     18 conv = tf.nn.conv2d(x,filter_weight,strides=[1,1,1,1],padding="SAME")
     19 
     20 add_bias = tf.nn.bias_add(conv,biase)
     21 
    
    
    

     

    展开全文
  • 池化的作用

    万次阅读 2017-07-11 14:29:18
    池化的作用:减小输出大小 和 降低过拟合。降低过拟合是减小输出大小的结果,它同样也减少了后续层中的参数的数量。 近期,池化层并不是很受青睐。部分原因是: 现在的数据集又大又复杂,我们更...
  • 池化方法总结(Pooling)

    万次阅读 多人点赞 2016-01-12 22:55:47
    在卷积神经网络中,我们经常会碰到池化操作,而池化层往往在卷积层后面,通过池化来降低卷积层输出的特征向量,同时改善结果(不易出现过拟合)。 为什么可以通过降低维度呢? 因为图像具有一种“静态性”的...
  • 深度学习 池化的概念

    万次阅读 2018-12-22 11:31:14
    在卷积神经网络中,我们经常会碰到池化操作,而池化层往往在卷积层后面,通过池化来降低卷积层输出的特征向量,同时改善结果(不易出现过拟合)。 为什么可以通过降低维度呢? 因为图像具有一种“静态性”的属性,...
  • [CNN] 卷积、反卷积、池化、反池化

    万次阅读 多人点赞 2018-11-28 17:03:55
    之前一直太忙,没时间整理,这两天抽出点时间整理一下卷积、反卷积、池化、反池化的内容。 一、卷积 1、卷积的简单定义 卷积神经网络中的卷积操作可以看做是输入和卷积核的内积运算。其运算过程非常容易理解,...
  • 卷积神经网络(CNN)由输入层、卷积层、激活函数、池化层、全连接层组成,即INPUT(输入层)-CONV(卷积层)-RELU(激活函数)-POOL(池化层)-FC(全连接层)卷积层用它来进行特征提取,如下: 输入图像是32*32*3...
  • 深入学习卷积神经网络中卷积层池化层的意义

    万次阅读 多人点赞 2018-09-22 22:11:09
    为什么要使用卷积呢?  在传统的神经网络中,比如多层感知机(MLP),其输入通常是一个特征向量:需要人工设计特征,然后将这些特征计算的值组成特征向量,在过去几十年的经验来看,人工找到的特征并不是怎么...
  • 【卷积神经网络】卷积层池化层,全连接层

    万次阅读 多人点赞 2019-02-18 17:50:39
    卷积层是卷积神经网络的核心, 大多数计算都是在卷积层中进行的。 1 卷积层 1.1 概述 首先介绍卷积神经网络的参数。 这些参数是由一些可学习的滤波器集合构成的, 每个滤波器在空间上( 宽度和高度) 都比较小...
  •   2019-01-30 22:32:42 局部连接+权值共享 全连接神经网络需要非常多的计算资源才能支撑它来做反向传播和前向传播,所以说全连接神经网络可以存储非常多的参数,如果你给它的样本如果没有达到它的量级的时候,...
  • 卷积层用于进行特征提取。 池化层用于输入的特征图进行压缩,使特征图变小,简化网络计算复杂度或进行特征压缩,提取主要特征。 但在神经网络中它们会使输入的特征逐步变化成什么样?最终得到正确的结果呢?下面我们...
  • 深入理解CNN卷积层池化层、全连接层

    万次阅读 多人点赞 2019-01-08 00:53:10
    深入理解CNN卷积层池化层、全连接层 文章目录深入理解CNN卷积层池化层、全连接层卷积层(Convolution)池化层(Pooling)全连接层(Fully connected)全连接层到底什么用?首先三点:接下来再主要谈谈全连接层的意义 ...
  • 而对于常见的卷积神经网络,我们经常可以看到卷积层池化层、激活函数、全连接层的身影。直到现在,卷积层+池化层+激活函数+全连接层的结构仍然很实用,似乎已经成为搭建卷积神经网络的基本结构。下面我将从这四个...
  • CNN卷积层池化层、全连接层

    万次阅读 多人点赞 2019-03-02 14:25:00
    卷积神经网络是通过神经网络反向传播自动学习的手段,来得到各种有用的卷积核的过程。 卷积神经网络通过卷积和池化操作,自动学习图像在各个层次上...典型的卷积神经网络通常由以下三种层结构共同组成:卷积层(Conv...
  • CNN的反向传播过程的推导(池化层、卷积层

    万次阅读 多人点赞 2018-08-11 22:51:09
    上一篇文章介绍了DNN的反向传播,对DNN不清楚的可以去看看,CNN在DNN的基础上进行解释。 一、回顾DNN的反向传播 上一篇DNN反向传播过程得出结论: 1、计算每一层的W、b的梯度,需要计算出 2、然后每一层的W的...
  • 总结全连接层,卷积层池化层等。。各自的作用

    万次阅读 多人点赞 2018-08-31 08:54:54
    全连接层到底什么用? ... 全连接层(fully connected ...如果说卷积层池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。在实际使...
  • TensorFlow实现卷积层池化

    千次阅读 2018-06-18 13:27:13
    这里我们将介绍如何实现常见的卷积层池化层这里我们以二维数据为例进行介绍第1步:引入相应的库并创建计算图会话import tensorflow as tf import numpy as np #创建计算图会话 sess = tf.Session()第2步:创建...
  • 卷积神经网络——卷积层池化层意义

    万次阅读 多人点赞 2018-03-10 12:00:05
    本文来自:点击打开链接卷积神经网络(CNN)由输入层、卷积层、激活函数、池化层、全连接层组成,即INPUT-CONV-RELU-POOL-FC(1)卷积层:用它来进行特征提取,如下:输入图像是32*32*3,3是它的深度(即R、G、B),...
  • 理解CNN卷积层池化层计算

    万次阅读 2018-04-27 09:08:25
    深度学习中CNN网络是核心,对CNN网络来说卷积层池化层的计算至关重要,不同的步长、填充方式、卷积核大小、池化层策略等都会对最终输出模型与参数、计算复杂度产生重要影响,本文将从卷积层池化层计算这些相关...
  • Tensorflow基础:卷积层池化

    千次阅读 2017-10-12 15:35:04
    深度学习中的卷积层池化层,已经它们在Tensorflow中的实现
  • cnn的卷积层池化

    千次阅读 2018-03-05 14:37:02
    卷积层池化层卷积神经网络(CNN)由输入层、卷积层、激活函数、池化层、全连接层组成,即INPUT-CONV-RELU-POOL-FC(1)卷积层:用它来进行特征提取,如下:输入图像是32*32*3,3是它的深度(即R、G、B),卷积层是一...
  • 使用TensorFlow搭建CNN卷积层池化

    千次阅读 2018-01-19 22:56:22
    卷积层的过滤器大小设置为5*5,深度为16,步长为1;池化层的过滤器大小设置为3*3,步长为2。import tensorflow as tf# 构建卷积层# 通过tf.get_variable的方式创建过滤器的权重和偏置项 # 卷积层的参数个数之和过滤...
  • 文章目录卷积层定义特点池化层特点上采样反卷积/转置卷积 卷积层 定义 首先需要了解图像是个什么东西? 通道 常用于表示图像的某种组成。一个标准数字相机拍摄的图像会有三通道 - 红、绿和蓝;你可以把它们看作是...
  • 卷积神经网络(CNN)由输入层、卷积层、激活函数、池化层、全连接层组成,即INPUT-CONV-RELU-POOL-FC (1)卷积层:用它来进行特征提取,如下: 输入图像是32*32*3,3是它的深度(即R、G、B),卷积层是一个...
  • 上一篇文章介绍了DNN的反向传播,对DNN不清楚的可以去看看,CNN在DNN的基础上进行解释。 一、回顾DNN的反向传播 上一篇DNN反向传播过程得出结论: 1、计算每一层的W、b的梯度,需要计算出 2、然后每一层的W的梯度和b...
  • keras中的卷积层&池化

    千次阅读 2019-01-21 09:19:32
    文章目录卷积层创建卷积层卷积层的格式及参数:卷积层中的参数数量卷积层的形状池化层keras中的最大池化层参数 卷积层 创建卷积层 首先导入keras中的模块 from keras.layers import Conv2D 卷积层的格式及参数: ...
  • 参考文献: 1、 https://www.zhihu.com/question/58716267 2、 https://www.cnblogs.com/pinard/p/6494810.html 3、 https://blog.csdn.net/qq_21190081/article/details/72871704 4、 ...
  • 深度学习 - 卷积层池化

    千次阅读 2018-06-20 16:23:01
    卷积神经网络常用于计算机视觉当中, 应用在计算机视觉当中, 就要面临一个挑战, 那就是输入数据非常的大, 假如输入图片一个1000 * 1000的, 那么他就有1000 * 1000 * 3(图片的RGB三通道)个数据, 对于300w的...

空空如也

1 2 3 4 5 ... 20
收藏数 97,100
精华内容 38,840
关键字:

池化