精华内容
下载资源
问答
  • 卷积神经网络

    千次阅读 2020-01-13 07:49:37
    卷积神经网络卷积神经网络卷积一维卷积二维卷积互相关卷积的变种卷积的数学性质交换性导数卷积神经网络用卷积来代替全连接卷积层汇聚(池化)典型的卷积网络结构参数学习误差项的计算几种典型的卷积...

    第五章 卷积神经网络

    卷积神经网络(Convolutional Neural Network,CNN或ConvNet)是一种具有局部连接、权重共享等特性的深层前馈神经网络。

    卷积神经网络最早是主要用来处理图像信息。在用全连接前馈网络来处理图像时,会存在以下两个问题:

    (1)参数太多:如果输入图像大小为 100 × 100 × 3(即图像高度为 100,宽度 为 100,3 个颜色通道:RGB)。在全连接前馈网络中,第一个隐藏层的每个神经元到输入层都有 100 × 100 × 3 = 30, 000 个互相独立的连接,每个连接都对应一个权重参数。随着隐藏层神经元数量的增多,参数的规模也会急剧增加。这会导致整个神经网络的训练效率非常低,也很容易出现过拟合。

    (2)局部不变性特征:自然图像中的物体都具有局部不变性特征,比如尺度缩放、平移、旋转等操作不影响其语义信息。而全连接前馈网络很难提取这些局部不变性特征,一般需要进行数据增强来提高性能。

    卷积神经网络是受生物学上感受野机制的启发而提出的。感受野(Receptive Field)主要是指听觉、视觉等神经系统中一些神经元的特性,即神经元只接受其所支配的刺激区域内的信号。在视觉神经系统中,视觉皮层中的神经细胞的输出依赖于视网膜上的光感受器。视网膜上的光感受器受刺激兴奋时,将神经冲 动信号传到视觉皮层,但不是所有视觉皮层中的神经元都会接受这些信号。一个 神经元的感受野是指视网膜上的特定区域,只有这个区域内的刺激才能够激活该神经元。

    目前的卷积神经网络一般是由卷积层、汇聚层和全连接层交叉堆叠而成的前馈神经网络,使用反向传播算法进行训练。

    卷积神经网络有三个结构上的特性:局部连接权重共享以及汇聚。这些特性使得卷积神经网络具有一定程度上的平移、缩放和旋转不变性。和前馈神经网络相比,卷积神经网络的参数更少

    卷积神经网络主要使用在图像和视频分析的各种任务(比如图像分类、人脸 识别、物体识别、图像分割等)上,其准确率一般也远远超出了其它的神经网络模 型。近年来卷积神经网络也广泛地应用到自然语言处理、推荐系统等领域。

    卷积

    卷积(Convolution),也叫摺积,是分析数学中一种重要的运算。在信号处理或图像处理中,经常使用一维或二维卷积。

    一维卷积

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    二维卷积

    在机器学习和图像处理领域,卷积的主要功能是在一个图像(或某种特征) 上滑动一个卷积核(即滤波器),通过卷积操作得到一组新的特征。在计算卷积 的过程中,需要进行卷积核翻转。在具体实现上,一般会以互相关操作来代替卷 积,从而会减少一些不必要的操作或开销。

    互相关(Cross-Correlation)是一个衡量两个序列相关性的函数,通常是用滑动窗口的点积计算来实现。

    在这里插入图片描述

    互相关

    在这里插入图片描述
    在这里插入图片描述

    卷积的变种

    在卷积的标准定义基础上,还可以引入滤波器的滑动步长零填充来增加卷积的多样性,可以更灵活地进行特征抽取
    在这里插入图片描述
    在这里插入图片描述

    卷积的数学性质

    卷积有很多很好的数学性质。在本节中,我们介绍一些二维卷积的数学性 质,这些数学性质同样可以适用到一维卷积的情况。

    交换性

    在这里插入图片描述

    导数

    在这里插入图片描述
    在这里插入图片描述

    卷积神经网络

    卷积神经网络一般由卷积层、汇聚层和全连接层构成。

    用卷积来代替全连接

    根据卷积的定义,卷积层有两个很重要的性质:
    在这里插入图片描述
    在这里插入图片描述

    卷积层

    卷积层的作用是提取一个局部区域的特征,不同的卷积核相当于不同的特征提取器。上一节中描述的卷积层的神经元和全连接网络一样都是一维结构。由于卷积网络主要应用在图像处理上,而图像为两维结构,因此为了更充分地利用图像的局部信息,通常将神经元组织为三维结构的神经层,其大小为高度 M × 宽度N×深度D,由D个M ×N大小的特征映射构成。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    汇聚层(池化层)

    汇聚层(Pooling Layer)也叫子采样层(Subsampling Layer),其作用是进行特征选择,降低特征数量,从而减少参数数量。

    卷积层虽然可以显著减少网络中连接的数量,但特征映射组中的神经元个数并没有显著减少。如果后面接一个分类器,分类器的输入维数依然很高,很容易出现过拟合。为了解决这个问题,可以在卷积层之后加上一个汇聚层,从而降低特征维数,避免过拟合。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    典型的卷积网络结构

    一个典型的卷积网络是由卷积层、汇聚层、全连接层交叉堆叠而成。目前常用的卷积网络结构如图5.9所示。一个卷积块为连续 M 个卷积层和 b 个汇聚层(M通常设置为2 ∼ 5,b为0或1)。一个卷积网络中可以堆叠N个连续的卷积块, 然后在后面接着K个全连接层(N的取值区间比较大,比如1 ∼ 100或者更大; K一般为0 ∼ 2)。

    目前,整个网络结构趋向于使用更小的卷积核(比如1 × 1和3 × 3)以及更深的结构(比如层数大于 50)。此外,由于卷积的操作性越来越灵活(比如不同的步长),汇聚层的作用也变得越来越小,因此目前比较流行的卷积网络中,汇聚层的比例正在逐渐降低,趋向于全卷积网络。
    在这里插入图片描述

    参数学习

    在卷积网络中,参数为卷积核中权重以及偏置。和全连接前馈网络类似,卷 积网络也可以通过误差反向传播算法来进行参数学习。

    在全连接前馈神经网络中,梯度主要通过每一层的误差项 δ 进行反向传播, 并进一步计算每层参数的梯度。

    在卷积神经网络中,主要有两种不同功能的神经层:卷积层和汇聚层。而参数为卷积核以及偏置,因此只需要计算卷积层中参数的梯度。

    在这里插入图片描述

    误差项的计算

    卷积层和汇聚层中误差项的计算有所不同,因此我们分别计算其误差项。
    在这里插入图片描述
    在这里插入图片描述

    几种典型的卷积神经网络

    LeNet-5

    LeNet-5[LeCun 等人,1998] 虽然提出的时间比较早,但它是一个非常成功的 神经网络模型。基于 LeNet-5 的手写数字识别系统在 20 世纪 90 年代被美国很多 银行使用,用来识别支票上面的手写数字。LeNet-5 的网络结构如图5.10所示。
    在这里插入图片描述
    LeNet-5共有7层,接受输入图像大小为32 × 32 = 1024,输出对应10个类别的得分。LeNet-5 中的每一层结构如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    AlexNet

    AlexNet[Krizhevsky 等人,2012] 是第一个现代深度卷积网络模型,其首次 使用了很多现代深度卷积网络的技术方法,比如使用 GPU 进行并行训练,采用 了 ReLU 作为非线性激活函数,使用 Dropout 防止过拟合,使用数据增强来提高 模型准确率等。AlexNet 赢得了 2012 年 ImageNet 图像分类竞赛的冠军。

    AlexNet 的结构如图5.12所示,包括 5 个卷积层、3 个汇聚层和 3 个全连接层 (其中最后一层是使用 Softmax 函数的输出层)。因为网络规模超出了当时的单个 GPU 的内存限制,AlexNet 将网络拆为两半,分别放在两个 GPU 上,GPU 间
    只在某些层(比如第 3 层)进行通讯。

    在这里插入图片描述

    AlexNet 的输入为 224 × 224 × 3 的图像,输出为 1000 个类别的条件概率,具体结构如下:
    在这里插入图片描述
    此外,AlexNet 还在前两个汇聚层之后进行了局部响应归一化以增强模型的泛化能力。

    Inception 网络

    在卷积网络中,如何设置卷积层的卷积核大小是一个十分关键的问题。在 Inception网络中,一个卷积层包含多个不同大小的卷积操作,称为Inception模 块。Inception 网络是由有多个 Inception 模块和少量的汇聚层堆叠而成。

    Inception模块同时使用1 × 1、3 × 3、5 × 5等不同大小的卷积核,并将得到 的特征映射在深度上拼接(堆叠)起来作为输出特征映射。

    图5.13给出了 v1 版本的 Inception 模块结构,采用了 4 组平行的特征抽取方 式,分别为1 × 1、3 × 3、5 × 5的卷积和3 × 3的最大汇聚。同时,为了提高计算效 率,减少参数数量,Inception模块在进行3×3、5×5的卷积之前、3×3的最大汇 聚之后,进行一次1 × 1的卷积来减少特征映射的深度。如果输入特征映射之间 存在冗余信息,1 × 1的卷积相当于先进行一次特征抽取。
    在这里插入图片描述
    Inception网络最早的v1版本就是非常著名的GoogLeNet [Szegedy等人,2015]。GoogLeNet 赢得了 2014 年 ImageNet 图像分类竞赛的冠军。

    GoogLeNet由9个Inception v1模块和5个汇聚层以及其它一些卷积层和全 连接层构成,总共为 22 层网络,如图5.14所示。为了解决梯度消失问题,GoogLeNet 在网络中间层引入两个辅助分类器来加强监督信息。

    在这里插入图片描述
    Inception网络有多个改进版本,其中比较有代表性的有Inception v3网络[Szegedy等人,2016]。Inception v3网络用多层的小卷积核来替换大的卷积核,以减少计算量和参数量,并保持感受野不变。具体包括:(1)使用两层3 × 3的卷积 来替换v1中的5 × 5的卷积(;2)使用连续的n × 1和1 × n来替换n × n的卷积。 此外,Inception v3网络同时也引入了标签平滑以及批量归一化等优化方法进行训练。

    残差网络

    在这里插入图片描述
    在这里插入图片描述

    其它卷积方式

    转置卷积

    我们一般可以通过卷积操作来实现高维特征到低维特征的转换。比如在一 维卷积中,一个 5 维的输入特征,经过一个大小为 3 的卷积核,其输出为 3 维特征。 如果设置步长大于 1,可以进一步降低输出特征的维数。但在一些任务中,我们需 要将低维特征映射到高维特征,并且依然希望通过卷积操作来实现。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    微步卷积 我们可以通过增加卷积操作的步长s > 1来实现对输入特征的下采 样操作,大幅降低特征维数。同样,我们也可以通过减少转置卷积的步长s < 1 来实现上采样操作,大幅提高特征维数。步长s < 1的转置卷积也称为微步卷积Fractionally-Strided Convolution)[Long等人,2015]。为了实现微步卷积,我们
    可以在输入特征之间插入 0 来间接地使得步长变小。

    在这里插入图片描述

    在这里插入图片描述

    空洞卷积

    对于一个卷积层,如果希望增加输出单元的感受野,一般可以通过三种方式实现
    (:1)增加卷积核的大小
    (;2)增加层数,比如两层 3 × 3 的卷积可以近似一层 5 × 5 卷积的效果
    (;3)在卷积之前进行汇聚操作。前两种方式会增加参数数量,而第三种方式会丢失一些信息。

    空洞卷积(Atrous Convolution)是一种不增加参数数量,同时增加输出单 元感受野的一种方法,也称为膨胀卷积(Dilated Convolution)[Chen等人; Yu等 人,2018; 2015]。

    空洞卷积通过给卷积核插入“空洞”来变相地增加其大小。如果在卷积核的 每两个元素之间插入d − 1个空洞,卷积核的有效大小为
    在这里插入图片描述
    其中d称为膨胀率(Dilation Rate)。当d = 1时卷积核为普通的卷积核。
    在这里插入图片描述

    展开全文
  • Letnet Alexnet ZFnet VGG ...Resnet: Deep Residual Learning Network fine-tune 第一篇文章介绍了卷积神经网络的数据输入形式和权值的...第三篇介绍了卷积神经网络的池化,可视化理解以及用数学的角度理解卷积操作:
    1. Letnet
    2. Alexnet
    3. ZFnet
    4. VGG
    5. Googlenet
    6. Resnet: Deep Residual Learning Network
    7. fine-tune

    第一篇文章介绍了卷积神经网络的数据输入形式和权值的初始化:CNN)卷积神经网络(一) 第二篇文章介绍了卷积操作,常用的激活函数(CNN)卷积神经网络(二)
    第三篇介绍了卷积神经网络的池化层,可视化理解以及用数学的角度理解卷积操作:[(CNN)卷积神经网络(三)]
    第四篇介绍了dropout的三种不同理解方式:(CNN)卷积神经网络(四)dropout

    这一篇看一下常见的卷积神经网络

    1.Letnet

    这是一开始最简单的卷积神经网络,用来做手写数字识别的。
    这里写图片描述

    这是它的网络结构:
    这里写图片描述
    其实就是最经典的:

    [CONVPOOLCONVPOOLCONVFC]

    2.Alexnet

    这里写图片描述
    第一层卷积层用55个神经元,每次采样采用11X11的滑动窗口,然后得到55个feature map。
    它的top5的准确度超出第二10%。
    这里写图片描述

    3.ZFnet

    这里写图片描述
    ZFnet只是对前面的网络做了一些调整,改动不是很大。
    在第一层卷积层,只是把11X11的滑动窗口改为7X7,步长设为2。

    4.VGG

    这个是VGG-16的
    这里写图片描述
    能训练出一个16层的神经网络,真的很不容易,因为那时候梯度消失还没有得到比较好的解决。

    参数比较:
    这里写图片描述

    消耗内存计算:
    这里写图片描述
    总内存:24M*4bytes -=93MB/image
    总参数:138M parameters

    不要觉得自己有GPU就屌爆了,一次丢太多图片,你的服务器照样受不了。

    5.Googlenet

    这里写图片描述
    它把全连接层换成了小卷积,而且它只有5百万个参数。

    6.Resnet: Deep Residual Learning Network

    这里写图片描述
    resnet的网络深度比VGG还要深8倍,但是它比VGG好训练。
    由上图的中间图,你会发现这是平铺的网络,其实就是

    F(W1,F(W2,F(W3,F(W4,x))))
    这样层层嵌套的结构,这样在求梯度的时候非常容易导致梯度消失,所以就由人想出了下图这样的结构:
    这里写图片描述

    它相当于x这样的输入数据,和经过卷积之后的输出数据F(x)共同作为下一层的输入,让模型学习他们之间的残差,其实就是x和F(x)之间的差异,然后把这样的差异值叠加。

    与之前的差异:求偏导时由:

    F(W1,F(W2,F(W3,F(W4,x))))
    变成了F(x)+x。求偏导函数对于和函数比嵌套函数更好求嘛。

    7.fine-tune

    站在巨人的肩膀上来做自己的事情吧,这里有所有CNN的参数文件下载改改就可以用了。
    Model-Zoo

    展开全文
  • 本节我们介绍卷积神经网络的基础概念,主要是卷积层和池化,并解释填充、步幅、输入通道和输出通道的含义 我们介绍卷积层的两个超参数,即填充和步幅,它们可以对给定形状的输入和卷积核改变输出形状。 二维互相关...
  • 卷积神经网络中某的每个激活值都可以看作是一个分类器,众多的分类结果组成了抽象表示。层级越高,特征抽象程度越高。) 3. 图像风格转换-V1 (1)内容特征&风格特征 内容特征:图像输入到CNN得到的某...

    1. 卷积神经网络的应用

    图像风格转换

    图像修复

    换脸

    图像超清化

    图像翻译

    文字生成图像

    2. 卷积神经网络学到了什么

     

    卷积神经网络的每一层激活值都可以看作是图像的抽象表示。(卷积神经网络中某层的每个激活值都可以看作是一个分类器,众多的分类结果组成了抽象表示。层级越高,特征抽象程度越高。)

    3. 图像风格转换-V1

    3.1 内容特征&风格特征

    内容特征:图像输入到CNN得到的某一层的激活值。

    使用内容特征生成图像:

    保持卷积神经网络的参数不变

    调整图像X的像素值,使之与y图像在CNN中的内容特征距离变小。(图像输入到卷积神经网络中,某一层的激活值F,和对应位置上和待生成的图像提取出来的特征P去相减求和,得到损失函数。)

    风格特征:图像输入到CNN得到的某一层的激活值之间的关联。(是所有内容特征的共性,一般在越高层,就越能得到风格特征的结果。)

    风格特征的计算——Gram矩阵

    3.2 优劣

    慢:每张图都要逐步求导

    逐步调整:能够产生多张效果

    能否只用一次计算就能得到结果?

    4. 图像风格转换-V2

    同样的网络还可以实现图像超清化

    训练:

    X是要转换的图像

    Ys是风格图像

    Yc是内容图像

    X=Yc

    预测:

    输入新图像

    经过transformer

    得到转换结果

    4.1 图像风格转换 V1和V2的异同

    (1)V1和V2的不同

    V1中是随机的。

    V2中是由X经过Image Transform Net得到的。

    (2)V1和V2的相同

    基于Gram矩阵来计算风格损失——>风格损失无法明确定义

     

    4.2 图像风格转换V2的网络细节

    (1)不使用pooling层,使用strided和fractionally strided卷积来做downsampling 和 upsampling

    strided卷积步长=1时,输入和输出的size一致。当strided>1时,比如当strided = 2时,图像size的长宽各降低一半。在卷积层上做strided会比做pooling能保存更多的信息(why)。故一般在图像生成网络中,会用strided=2的卷积层来代替pooling层,以保持更多的信息。

    图像变小之后,还需要将其放大。fractionally strided相当于strided的逆操作。当strided=2时,图像会变为原来的1/2;当strided=1/2时,图像会变为原来的2倍。downsampling降采样,图像变小;upsampling升采样,图像变大。

    为什么先做down-sampling,再做up-sampling?

    减小了feature_map的大小,提高性能

    提高结果图像中的视野域——风格转换会导致物体变形,因而,结果图像中每个图像对应着初始结果中的视野域越大越好          

    (2)使用五个residual blocks

    在生成网络中,使用残差连接(residual blocks)的好处:残差连接为恒等连接,y = x + f(x), 能够尽可能的保留输入图像中更多的信息。f(x)可专注于学习需要变换的部分。

    (3)输出层使用scaled tanh保证输出值在[0, 255]

    (4)第一个和最后一个卷积核使用9*9的核,其它使用3*3

     

    5. 图像风格转换-V3

    1. 摆脱gram矩阵

     

     

    6. 三种风格转换算法的对比

     

     

     

     

    展开全文
  • 卷积神经网络(CNN)

    千次阅读 2019-06-17 08:42:12
    卷积神经网络(CNN) 标签(空格分隔): 深度学习 5.1 卷积神经网络的组成卷积神经网络中,有3种最主要的: 卷积运算 池化 全连接 一个完整的神经网络就是由这三种叠加组成的。 结构...

    第五章 卷积神经网络(CNN)


    5.1 卷积神经网络的组成层

    在卷积神经网络中,有3种最主要的层:

    • 卷积运算层
    • 池化层
    • 全连接层

    一个完整的神经网络就是由这三种层叠加组成的。

    结构示例

    拿CIFAR-10数据集举例,一个典型的该数据集上的卷积神经网络分类器应该有[INPUT - CONV - RELU - POOL - FC]的结构,

    • INPUT[32*32*3]包含原始图片数据中的全部像素,长宽都是32,有RGB 3个颜色通道。
    • CONV卷积层中,没个神经元会和上一层的若干小区域连接,计算权重和小区域像素的内积,举个例子可能产出的结果数据是[32*32*12]的。
    • RELU层,就是神经元激励层,主要的计算就是max(0,x),结果数据依旧是[32*32*12]。
    • POOLing层做的事情,可以理解成一个下采样,可能得到的结果维度就变为[16*16*12]了。
    • 全连接层一般用于最后计算类别得分,得到的结果为[1*1*10]的,其中的10对应10个不同的类别。和名字一样,这一层的所有神经元会和上一层的所有神经元有连接。

    这样,卷积神经网络作为一个中间的通道,就一步步把原始的图像数据转成最后的类别得分了。有一个点我们要提一下,刚才说到了有几种不同的神经网络层,其中有一些层是有待训练参数的,另外一些没有。详细一点说,卷积层和全连接层包含权重和偏移的;而RELU和POOLing层只是一个固定的函数运算,是不包含权重和偏移参数的。不过POOLing层包含了我们手动指定的超参数,这个我们之后会提到。

    总结一下

    • (1)一个卷积神经网络由多种不同类型的层(卷积层/RELU层/POOLing层/全连接层等)叠加而成。
    • (2)每一层的输入结构是3维的数据,计算完输出依旧是3维的数据。
    • (3)卷积层和全连接层包含训练参数,RELU 和 POOLing 层不包含。
    • (4)卷积层,全连接层和 POOLing 层包含超参数,RELU 层没有。

    下图为 CIFAR-10 数据集构建的一个卷积神经网络结构示意图:

    5.2 卷积如何检测边缘信息?

    卷积运算是卷积神经网络最基本的组成部分,神经网络的前几层首先检测边缘,然后,后面的层有可能检测到物体的部分区域,更靠后的一些层可能检测到完整的物体。
    先介绍一个概念,过滤器:

    image

    这是一个3*3的过滤器,是一个矩阵,数值如上所示。

    假设我们有一个6*6的灰度图像:

    image

    把这个图像与过滤器进行卷积运算,卷积运算在此处用“*”表示。

    image

    我们看一下发生了什么事,把过滤器最准图像左上方3*3的范围,逐一相乘并相加,得到-5。

    同理,将过滤器右移进行相同操作,再下移,直到过滤器对准图像右下角最后一格。依次运算得到一个4*4的矩阵。

    OK,了解了过滤器以及卷积运算后,让我们看看为何过滤器能检测物体边缘:

    举一个最简单的例子:

    image

    这张图片如上所示,左半边全是白的,右半边全是灰的,过滤器还是用之前那个,把他们进行卷积:

    image

    可以看到,最终得到的结果中间是一段白色,两边为灰色,于是垂直边缘被找到了。为什么呢?因为在6*6图像中红框标出来的部分,也就是图像中的分界线所在部分,与过滤器进行卷积,结果是30。而在不是分界线的所有部分进行卷积,结果都为0.

    在这个图中,白色的分界线很粗,那是因为66的图像实在太小了,若是换成10001000的图像,我们会发现在最终结果中,分界线不粗且很明显。

    这就是检测物体垂直边缘的例子,水平边缘的话只需将过滤器旋转90度。

    5.3 卷积的几个基本定义?

    首先,我们需要就定义一个卷积层的几个参数达成一致。

    5.3.1 卷积核大小

    (Kernel Size): 卷积核的大小定义了卷积的视图范围。二维的常见选择大小是3,即3×3像素。

    5.3.2 卷积核的步长

    (Stride): Stride定义了内核的步长。虽然它的默认值通常为1,但我们可以将步长设置为2,然后对类似于MaxPooling的图像进行向下采样。

    5.3.3 边缘填充

    (Padding): Padding用于填充输入图像的边界。一个(半)填充的卷积将使空间输出维度与输入相等,而如果卷积核大于1,则未被填充的卷积将会使一些边界消失。

    5.3.4 输入和输出通道

    一个卷积层接受一定数量的输入通道(I),并计算一个特定数量的输出通道(O),这一层所需的参数可以由IOK计算,K等于卷积核中值的数量。

    5.4 卷积的网络类型分类?

    5.4.2 扩张卷积

    又名带洞的(atrous)卷积,扩张的卷积引入了另一个被称为扩张率(dilation rate)的卷积层。这定义了卷积核中值之间的间隔。一个3×3卷积核的扩张率为2,它的视图与5×5卷积核相同,而只使用9个参数。想象一下,取一个5×5卷积核,每两行或两列删除一行或一列。

    这将以同样的计算代价提供更广阔的视角。扩张的卷积在实时分割领域特别受欢迎。如果需要广泛的视图,并且不能负担多个卷积或更大的卷积核,那么就使用它们。
    举例:

    5.4.3 转置卷积

    转置卷积也就是反卷积(deconvolution)。虽然有些人经常直接叫它反卷积,但严格意义上讲是不合适的,因为它不符合一个反卷积的概念。反卷积确实存在,但它们在深度学习领域并不常见。一个实际的反卷积会恢复卷积的过程。想象一下,将一个图像放入一个卷积层中。现在把输出传递到一个黑盒子里,然后你的原始图像会再次出来。这个黑盒子就完成了一个反卷积。这是一个卷积层的数学逆过程。

    一个转置的卷积在某种程度上是相似的,因为它产生的相同的空间分辨率是一个假设的反卷积层。然而,在值上执行的实际数学操作是不同的。一个转置的卷积层执行一个常规的卷积,但是它会恢复它的空间变换(spatial transformation)。

    在这一点上,你应该非常困惑,让我们来看一个具体的例子:
    5×5的图像被馈送到一个卷积层。步长设置为2,无边界填充,而卷积核是3×3。结果得到了2×2的图像。
    如果我们想要逆转这个过程,我们需要反向的数学运算,以便从我们输入的每个像素中生成9个值。然后,我们将步长设置为2来遍历输出图像。这就是一个反卷积过程。

    一个转置的卷积并不会这样做。唯一的共同点是,它保证输出将是一个5×5的图像,同时仍然执行正常的卷积运算。为了实现这一点,我们需要在输入上执行一些奇特的填充。

    正如你现在所能想象的,这一步不会逆转上面的过程。至少不考虑数值。

    它仅仅是重新构造了之前的空间分辨率并进行了卷积运算。这可能不是数学上的逆过程,但是对于编码-解码器(Encoder-Decoder)架构来说,这仍然是非常有用的。这样我们就可以把图像的尺度上推(upscaling)和卷积结合起来,而不是做两个分离的过程。

    如果我们想反转这个过程,我们需要反数学运算,以便从我们输入的每个像素中生成9个值。之后,我们以2步幅的设置来遍历输出图像。这将是一个反卷积。

    5.4.4 可分离卷积

    在一个可分离卷积中,我们可以将内核操作拆分成多个步骤。我们用y = conv(x,k)表示卷积,其中y是输出图像,x是输入图像,k是内核。这一步很简单。接下来,我们假设k可以由下面这个等式计算得出:k = k1.dot(k2)。这将使它成为一个可分离的卷积,因为我们可以通过对k1和k2做2个一维卷积来取得相同的结果,而不是用k做二维卷积。

    我们以通常用于图像处理的Sobel内核为例。你可以通过乘以向量[1,0,-1]和[1,2,1] .T获得相同的内核。在执行相同的操作时,你只需要6个而不是9个参数。

    上面的示例显示了所谓的空间可分离卷积,据我所知,这并不是在深度学习中使用的。我只是想确保在他人费劲地操作时,你不会受到如此困惑。在神经网络中,我们通常使用的是一种叫做深度可分离卷积的神经网络。

    5.5 图解12种不同类型的2D卷积?

    http://www.sohu.com/a/159591827_390227

    5.6 2D卷积与3D卷积有什么区别?

    5.6.1 2D卷积

    2D卷积操作如图所示,为了解释的更清楚,分别展示了单通道和多通道的操作。且为了画图方便,假定只有1个filter,即输出图像只有一个chanel。

    其中,针对单通道,输入图像的channel为1,卷积核尺寸为 (k_h, k_w, 1),卷积核在输入图像上的的空间维度(即(height,width)两维)上进行进行滑窗操作,每次滑窗和 (k_h, k_w) 窗口内的values进行卷积操作(现在都用相关操作取代),得到输出图像中的一个value。针对多通道,假定输入图像的channel为3,卷积核尺寸为 (k_h, k_w, 3), 卷积核在输入图像上的的空间维度(即(h, w)两维)上进行进行滑窗操作,每次滑窗与3个channels上的 (k_h, k_w) 窗口内的所有的values进行相关操作,得到输出图像中的一个value。

    5.6.2 3D卷积

    3D卷积操作如图2所示,同样分为单通道和多通道,且只使用一个filter,输出一个channel。其中,针对单通道,与2D卷积不同之处在于,输入图像多了一个 length 维度,卷积核也多了一个k_l维度,因此卷积核在输入3D图像的空间维度(height和widthw维)和length维度上均进行滑窗操作,每次滑窗与 (k_h, k_w, k_l) 窗口内的values进行相关操作,得到输出3D图像中的一个value.

    针对多通道,则与2D卷积的操作一样,每次滑窗与3个channels上的 (k_h, k_w, k_l) 窗口内的所有values进行相关操作,得到输出3D图像中的一个value。

    5.7 有哪些池化方法?

    在卷积神经网络中,我们经常会碰到池化操作,而池化层往往在卷积层后面,通过池化来降低卷积层输出的特征向量,同时改善结果(不易出现过拟合)。

    为什么可以通过降低维度呢?

    因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)来代表这个区域的特征。[1]

    5.7.1 一般池化(General Pooling)

    池化作用于图像中不重合的区域(这与卷积操作不同),过程如下图。

    我们定义池化窗口的大小为sizeX,即下图中红色正方形的边长,定义两个相邻池化窗口的水平位移/竖直位移为stride。一般池化由于每一池化窗口都是不重复的,所以sizeX=stride。

    最常见的池化操作为平均池化mean pooling和最大池化max pooling:

    • 平均池化:计算图像区域的平均值作为该区域池化后的值。
    • 最大池化:选图像区域的最大值作为该区域池化后的值。

    5.7.2 重叠池化(General Pooling)

    重叠池化正如其名字所说的,相邻池化窗口之间会有重叠区域,此时sizeX>stride。论文中[2]中,作者使用了重叠池化,其他的设置都不变的情况下, top-1和top-5 的错误率分别减少了0.4% 和0.3%。

    5.7.3 空金字塔池化(Spatial Pyramid Pooling)

    空间金字塔池化可以把任何尺度的图像的卷积特征转化成相同维度,这不仅可以让CNN处理任意尺度的图像,还能避免cropping和warping操作,导致一些信息的丢失,具有非常重要的意义。

    一般的CNN都需要输入图像的大小是固定的,这是因为全连接层的输入需要固定输入维度,但在卷积操作是没有对图像尺度有限制,所有作者提出了空间金字塔池化,先让图像进行卷积操作,然后转化成维度相同的特征输入到全连接层,这个可以把CNN扩展到任意大小的图像。

    空间金字塔池化的思想来自于Spatial Pyramid Model,它一个pooling变成了多个scale的pooling。用不同大小池化窗口作用于卷积特征,我们可以得到1X1,2X2,4X4的池化结果,由于conv5中共有256个过滤器,所以得到1个256维的特征,4个256个特征,以及16个256维的特征,然后把这21个256维特征链接起来输入全连接层,通过这种方式把不同大小的图像转化成相同维度的特征。

    对于不同的图像要得到相同大小的pooling结果,就需要根据图像的大小动态的计算池化窗口的大小和步长。假设conv5输出的大小为aa,需要得到nn大小的池化结果,可以让窗口大小sizeX为[a/n],步长为[a/n]。下图以conv5输出的大小为13*13为例。

    疑问:如果conv5输出的大小为1414,[pool11]的sizeX=stride=14,[pool22]的sizeX=stride=7,这些都没有问题,但是,[pool44]的sizeX=5,stride=4,最后一列和最后一行特征没有被池化操作计算在内。

    SPP其实就是一种多个scale的pooling,可以获取图像中的多尺度信息;在CNN中加入SPP后,可以让CNN处理任意大小的输入,这让模型变得更加的flexible。

    5.8 1x1卷积作用?

    1×1的卷积大概有两个方面的作用:

    1. 实现跨通道的交互和信息整合。
    2. 进行卷积核通道数的降维和升维。

    下面详细解释一下:

    1. 1×1的卷积层(可能)引起人们的重视是在NIN的结构中,论文中林敏师兄的想法是利用MLP代替传统的线性卷积核,从而提高网络的表达能力。文中同时利用了跨通道pooling的角度解释,认为文中提出的MLP其实等价于在传统卷积核后面接cccp层,从而实现多个feature map的线性组合,实现跨通道的信息整合。而cccp层是等价于1×1卷积的,因此细看NIN的caffe实现,就是在每个传统卷积层后面接了两个cccp层(其实就是接了两个1×1的卷积层)。

    2. 进行降维和升维引起人们重视的(可能)是在GoogLeNet里。对于每一个Inception模块(如下图),原始模块是左图,右图中是加入了1×1卷积进行降维的。虽然左图的卷积核都比较小,但是当输入和输出的通道数很大时,乘起来也会使得卷积核参数变的很大,而右图加入1×1卷积后可以降低输入的通道数,卷积核参数、运算复杂度也就跟着降下来了。以GoogLeNet的3a模块为例,输入的feature map是28×28×192,3a模块中1×1卷积通道为64,3×3卷积通道为128,5×5卷积通道为32,如果是左图结构,那么卷积核参数为1×1×192×64+3×3×192×128+5×5×192×32,而右图对3×3和5×5卷积层前分别加入了通道数为96和16的1×1卷积层,这样卷积核参数就变成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),参数大约减少到原来的三分之一。同时在并行pooling层后面加入1×1卷积层后也可以降低输出的feature map数量,左图pooling后feature map是不变的,再加卷积层得到的feature map,会使输出的feature map扩大到416,如果每个模块都这样,网络的输出会越来越大。而右图在pooling后面加了通道为32的1×1卷积,使得输出的feature map数降到了256。GoogLeNet利用1×1的卷积降维后,得到了更为紧凑的网络结构,虽然总共有22层,但是参数数量却只是8层的AlexNet的十二分之一(当然也有很大一部分原因是去掉了全连接层)。

    最近大热的MSRA的ResNet同样也利用了1×1卷积,并且是在3×3卷积层的前后都使用了,不仅进行了降维,还进行了升维,使得卷积层的输入和输出的通道数都减小,参数数量进一步减少,如下图的结构。(不然真不敢想象152层的网络要怎么跑起来TAT)

    5.9 卷积层和池化层有什么区别?

    首先可以从结构上可以看出,卷积之后输出层的维度减小,深度变深。但池化层深度不变。同时池化可以把很多数据用最大值或者平均值代替。目的是降低数据量。降低训练的参数。对于输入层,当其中像素在邻域发生微小位移时,池化层的输出是不变的,从而能提升鲁棒性。而卷积则是把数据通过一个卷积核变化成特征,便于后面的分离。

    1:卷积

    当从一个大尺寸图像中随机选取一小块,比如说 8x8 作为样本,并且从这个小块样本中学习到了一些特征,这时我们可以把从这个 8x8 样本中学习到的特征作为探测器,应用到这个图像的任意地方中去。特别是,我们可以用从 8x8 样本中所学习到的特征跟原本的大尺寸图像作卷积,从而对这个大尺寸图像上的任一位置获得一个不同特征的激活值。

    下面给出一个具体的例子:假设你已经从一个 96x96 的图像中学习到了它的一个 8x8 的样本所具有的特征,假设这是由有 100 个隐含单元的自编码完成的。为了得到卷积特征,需要对 96x96 的图像的每个 8x8 的小块图像区域都进行卷积运算。也就是说,抽取 8x8 的小块区域,并且从起始坐标开始依次标记为(1,1),(1,2),…,一直到(89,89),然后对抽取的区域逐个运行训练过的稀疏自编码来得到特征的激活值。在这个例子里,显然可以得到 100 个集合,每个集合含有 89x89 个卷积特征。

    比如上方左侧矩阵A是2020的矩阵要进行大小为1010的池化,那么左侧图中的红色就是10*10的大小,对应到右侧的矩阵,右侧每个元素的值,是左侧红色矩阵每个元素的值得和再处于红色矩阵的元素个数,也就是平均值形式的池化。

    3:上面说了下卷积和池化,再说下计算中需要注意到的。在代码中使用的是彩色图,彩色图有3个通道,那么对于每一个通道来说要单独进行卷积和池化,有一个地方尤其是进行卷积的时候要注意到,隐藏层的每一个值是对应到一幅图的3个通道穿起来的,所以分3个通道进行卷积之后要加起来,正好才能对应到一个隐藏层的神经元上,也就是一个feature上去。

    5.10 卷积核一定越大越好?

    AlexNet中用到了一些非常大的卷积核,比如11×11、5×5卷积核,之前人们的观念是,卷积核越大,receptive field(感受野)越大,看到的图片信息越多,因此获得的特征越好。虽说如此,但是大的卷积核会导致计算量的暴增,不利于模型深度的增加,计算性能也会降低。于是在VGG(最早使用)、Inception网络中,利用2个3×3卷积核的组合比1个5×5卷积核的效果更佳,同时参数量(3×3×2+1 VS 5×5×1+1) 被降低,因此后来3×3卷积核被广泛应用在各种模型中。多个小的卷积核叠加使用要远比一个大的卷积核单独使用效果要好的多,在连通性不变的情况下,大大降低了参数个数和计算复杂度。当然,卷积核也不是越小越好,对于特别稀疏的数据比如下图所示,当使用比较小的卷积核的时候可能无法表示其特征,如果采用较大的卷积核则会导致复杂度极大的增加。总而言之,我们应该选择多个相对小的卷积核来进行卷积。

    5.11 每层卷积只能用一种尺寸的卷积核?

    传统的层叠式网络,基本上都是一个个卷积层的堆叠,每层只用一个尺寸的卷积核,例如VGG结构中使用了大量的3×3卷积层。事实上,同一层feature map可以分别使用多个不同尺寸的卷积核,以获得不同尺度的特征,再把这些特征结合起来,得到的特征往往比使用单一卷积核的要好,谷歌的GoogLeNet,或者说Inception系列的网络,就使用了多个卷积核的结构:

    如上图所示,一个输入的feature map 分别同时经过1×1、3×3、5×5的卷积核的处理,得出的特征再组合起来,获得更佳的特征。

    5.12 怎样才能减少卷积层参数量?

    发明GoogleNet的团队发现,如果仅仅引入多个尺寸的卷积核,会带来大量的额外的参数,受到Network In Network中1×1卷积核的启发,为了解决这个问题,他们往Inception结构中加入了一些1×1的卷积核,如图所示:

    加入1×1卷积核的Inception结构

    根据上图,我们来做个对比计算,假设输入feature map的维度为256维,要求输出维度也是256维。有以下两种操作:

    • (1)256维的输入直接经过一个3×3×256的卷积层,输出一个256维的feature map,那么参数量为:256×3×3×256 = 589,824
    • (2)256维的输入先经过一个1×1×64的卷积层,再经过一个3×3×64的卷积层,最后经过一个1×1×256的卷积层,输出256维,参数量为:256×1×1×64 + 64×3×3×64 + 64×1×1×256 = 69,632。足足把第一种操作的参数量降低到九分之一!

    1×1卷积核也被认为是影响深远的操作,往后大型的网络为了降低参数量都会应用上1×1卷积核。

    5.13 卷积操作时必须同时考虑通道和区域吗?

    标准的卷积过程可以看上图,一个2×2的卷积核在卷积时,对应图像区域中的所有通道均被同时考虑,问题在于,为什么一定要同时考虑图像区域和通道?我们为什么不能把通道和空间区域分开考虑?

    Xception网络就是基于以上的问题发明而来。我们首先对每一个通道进行各自的卷积操作,有多少个通道就有多少个过滤器。得到新的通道feature maps之后,这时再对这批新的通道feature maps进行标准的1×1跨通道卷积操作。这种操作被称为 “DepthWise convolution” ,缩写“DW”。

    这种操作是相当有效的,在imagenet 1000类分类任务中已经超过了InceptionV3的表现,而且也同时减少了大量的参数,我们来算一算,假设输入通道数为3,要求输出通道数为256,两种做法:

    1. 直接接一个3×3×256的卷积核,参数量为:3×3×3×256 = 6,912
    2. DW操作,分两步完成,参数量为:3×3×3 + 3×1×1×256 = 795,又把参数量降低到九分之一!

    因此,一个depthwise操作比标准的卷积操作降低不少的参数量,同时论文中指出这个模型得到了更好的分类效果。

    5.14 采用宽卷积的好处有什么?

    5.14.1 窄卷积和宽卷积

    对于窄卷积来说,是从第一个点开始做卷积,每次窗口滑动固定步幅。比如下图左部分为窄卷积。那么注意到越在边缘的位置被卷积的次数越少。于是有了宽卷积的方法,可以看作在卷积之前在边缘用0补充,常见有两种情况,一个是全补充,入下图右部分,这样输出大于输入的维度。另一种常用的方法是补充一部0值,使得输出和输入的维度一致。这里文中给了一个公式 。这里npadding在全补充里是filter-1,在输入输出相等时,就要主要奇偶性了,注意到卷积核常为奇数。

    5.14.2 为什么采用宽卷积?

    通过将输入边角的值纳入到滑窗中心进行计算,以便损失更少的信息。

    5.15 卷积层输出的深度与哪个部件的个数相同?

    输出深度(通道)与卷积核(过滤器)的个数相等。

    5.16 如何得到卷积层输出的深度?

    参数共享:在卷积层中使用参数共享是用来控制参数的数量。假设在第一个卷积层就有55x55x96=290,400个神经元,每个有11x11x3=364个参数和1个偏差。将这些合起来就是290400x364=105,705,600个参数。单单第一层就有这么多参数,显然这个数目是非常大的。

    作一个合理的假设:如果一个特征在计算某个空间位置(x,y)的时候有用,那么它在计算另一个不同位置(x2,y2)的时候也有用。基于这个假设,可以显著地减少参数数量。换言之,就是将深度维度上一个单独的2维切片看做深度切片(depth slice),比如一个数据体尺寸为[55x55x96]的就有96个深度切片,每个尺寸为[55x55]。在每个深度切片上的神经元都使用同样的权重和偏差。在这样的参数共享下,例子中的第一个卷积层就只有96个不同的权重集了,一个权重集对应一个深度切片,共有96x11x11x3=34,848个不同的权重,或34,944个参数(+96个偏差)。

    w_conv1=weight_variable([5,5,1,32])

    可以看出,上面的32表示的是卷积层输出的深度,因为大家都明白width和height都可以通过公式计算得到,但是很多文献都没有告诉深度是如何得到的,下面是我的认识:

    1. 因为这个深度是没有公式可以计算出来的,因为深度是一个经验值,如上面代码的32 ,其实是一个经验值,是通过调整参数发现32是一个最合适的值,可以得到最好的准确率,但是不同的图像的深度是不一样的。
    2. 这个深度表示用了多少个卷积核,下面这个图可以说明一下:

    上图就可以很有效的说明 :卷积层输出的深度==卷积核的个数。

    5.17 激活函数通常放在卷积神经网络的那个操作之后?

    通常放在卷积层之后。

    5.18 如何理解最大池化层有几分缩小?

    池化层:对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征。

    池化操作一般有两种,一种是Avy Pooling,一种是max Pooling。

    同样地采用一个2*2的filter,max pooling是在每一个区域中寻找最大值,这里的stride=2,最终在原特征图中提取主要特征得到右图。

    注1:(Avy pooling现在不怎么用了,方法是对每一个22的区域元素求和,再除以4,得到主要特征),而一般的filter取22,最大取3*3,stride取2,压缩为原来的1/4.
    注2:这里的pooling操作是特征图缩小,有可能影响网络的准确度,因此可以通过增加特征图的深度来弥补。

    5.19 理解图像卷积与反卷积

    5.19.1 图像卷积

    首先给出一个输入输出结果

    那他是怎样计算的呢?

    卷积的时候需要对卷积核进行180的旋转,同时卷积核中心与需计算的图像像素对齐,输出结构为中心对齐像素的一个新的像素值,计算例子如下:

    image

    这样计算出左上角(即第一行第一列)像素的卷积后像素值。

    给出一个更直观的例子,从左到右看,原像素经过卷积由1变成-8。

    image

    通过滑动卷积核,就可以得到整张图片的卷积结果

    image

    5.19.2 图像反卷积

    这里提到的反卷积跟1维信号处理的反卷积计算是很不一样的,FCN作者称为backwards convolution,有人称Deconvolution layer is a very unfortunate name and should rather be called a transposed convolutional layer. 我们可以知道,在CNN中有con layer与pool layer,con layer进行对图像卷积提取特征,pool layer 对图像缩小一半筛选重要特征,对于经典的图像识别CNN网络,如IMAGENET,最后输出结果是1X1X1000,1000是类别种类,1x1得到的是。FCN作者,或者后来对end to end研究的人员,就是对最终1x1的结果使用反卷积(事实上FCN作者最后的输出不是1X1,是图片大小的32分之一,但不影响反卷积的使用)。

    这里图像的反卷积与full卷积原理是一样的,使用了这一种反卷积手段使得图像可以变大,FCN作者使用的方法是这里所说反卷积的一种变体,这样就可以获得相应的像素值,图像可以实现end to end。

    image
    image
    image

    这里说另外一种反卷积做法,假设原图是33,首先使用上采样让图像变成77,可以看到图像多了很多空白的像素点。使用一个33的卷积核对图像进行滑动步长为1的valid卷积,得到一个55的图像,我们知道的是使用上采样扩大图片,使用反卷积填充图像内容,使得图像内容变得丰富,这也是CNN输出end to end结果的一种方法。韩国作者Hyeonwoo Noh使用VGG16层CNN网络后面加上对称的16层反卷积与上采样网络实现end to end 输出,其不同层上采样与反卷积变化效果如下:

    image

    经过上面的解释与推导,对卷积有基本的了解,但是在图像上的deconvolution究竟是怎么一回事,可能还是不能够很好的理解,因此这里再对这个过程解释一下。 目前使用得最多的deconvolution有2种,上文都已经介绍。

    • 方法1:full卷积, 完整的卷积可以使得原来的定义域变大。
    • 方法2:记录pooling index,然后扩大空间,再用卷积填充。

    图像的deconvolution过程如下:

    image

    输入:2x2, 卷积核:4x4, 滑动步长:3, 输出:7x7

    即输入为2x2的图片经过4x4的卷积核进行步长为3的反卷积的过程

    1. 输入图片每个像素进行一次full卷积,根据full卷积大小计算可以知道每个像素的卷积后大小为 1+4-1=4, 即4x4大小的特征图,输入有4个像素所以4个4x4的特征图
    2. 将4个特征图进行步长为3的fusion(即相加); 例如红色的特征图仍然是在原来输入位置(左上角),绿色还是在原来的位置(右上角),步长为3是指每隔3个像素进行fusion,重叠部分进行相加,即输出的第1行第4列是由红色特阵图的第一行第四列与绿色特征图的第一行第一列相加得到,其他如此类推。

    可以看出翻卷积的大小是由卷积核大小与滑动步长决定, in是输入大小, k是卷积核大小, s是滑动步长, out是输出大小 得到 out = (in - 1) * s + k 上图过程就是, (2 - 1) * 3 + 4 = 7

    5.20 不同卷积后图像大小计算?

    5.20.1 类型划分

    2维卷积的计算分为了3类:1.full 2.same 3. valid

    1、full

    image

    蓝色为原图像,白色为对应卷积所增加的padding,通常全部为0,绿色是卷积后图片。图6的卷积的滑动是从卷积核右下角与图片左上角重叠开始进行卷积,滑动步长为1,卷积核的中心元素对应卷积后图像的像素点。可以看到卷积后的图像是4X4,比原图2X2大了,我们还记1维卷积大小是n1+n2-1,这里原图是2X2,卷积核3X3,卷积后结果是4X4,与一维完全对应起来了。其实这才是完整的卷积计算,其他比它小的卷积结果都是省去了部分像素的卷积

    2、same

    image

    3、valid

    image

    5.20.2 计算公式

    这里,我们可以总结出full,same,valid三种卷积后图像大小的计算公式:

    1. full: 滑动步长为1,图片大小为N1xN1,卷积核大小为N2xN2,卷积后图像大小:N1+N2-1 x N1+N2-1。
    2. same: 滑动步长为1,图片大小为N1xN1,卷积核大小为N2xN2,卷积后图像大小:N1xN1。
    3. valid:滑动步长为S,图片大小为N1xN1,卷积核大小为N2xN2,卷积后图像大小:(N1-N2)/S+1 x (N1-N2)/S+1。

    5.21 步长、填充大小与输入输出关系总结?

    在设计深度学习网络的时候,需要计算输入尺寸和输出尺寸,那么就要设计卷积层的的各种参数。这里有一些设计时候的计算公式,方便得到各层的参数。

    这里简化下,约定:

    image

    5.21.1 没有0填充,单位步长

    image

    5.21.2 零填充,单位步长

    image

    <1>半填充
    image

    <2>全填充
    image

    参考图如下图所示

    image
    image

    5.21.3 不填充,非单位步长

    image

    5.21.4 零填充,非单位步长

    image
    image
    image
    image

    http://blog.csdn.net/u011692048/article/details/77572024
    https://arxiv.org/pdf/1603.07285.pdf

    5.22 理解反卷积和棋盘效应

    5.22.1 为什么出现棋盘现象?

    图像生成网络的上采样部分通常用反卷积网络,不合理的卷积核大小和步长会使反卷积操作产生棋盘效应 (checkerboard artifacts)。

    image
    image

    重叠图案也在二维中形成。两个轴上的不均匀重叠相乘,产生不同亮度的棋盘状图案。

    事实上,不均匀重叠往往在二维上更极端!因为两个模式相乘,所以它的不均匀性是原来的平方。例如,在一个维度中,一个步长为2,大小为3的反卷积的输出是其输入的两倍,但在二维中,输出是输入的4倍。

    现在,生成图像时,神经网络通常使用多层反卷积,从一系列较低分辨率的描述中迭代建立更大的图像。虽然这些堆栈的反卷积可以消除棋盘效应,但它们经常混合,在更多尺度上产生棋盘效应。

    直观地看,假设生成的图像中包含1只黑猫。黑猫身体部分的像素颜色应平滑过渡,或极端地说,该部分应全为黑色。实际生成的图像中该部分却有深深浅浅的近黑方块组成,很像棋盘的网格,即棋盘效应。

    https://distill.pub/2016/deconv-checkerboard/
    http://blog.csdn.net/shadow_guo/article/details/52862161

    5.22.2 有哪些方法可以避免棋盘效应?

    (1)第一种方法是用到的反卷积核的大小可被步长整除,从而避免重叠效应。与最近成功用于图像超分辨率的技术“子像素卷积”(sub-pixel convolution)等价。

    image

    (2)另一种方法是从卷积操作中分离出对卷积后更高分辨率的特征图上采样来计算特征。例如,可以先缩放图像(最近邻插值或双线性插值),再卷积。

    image

    反卷积与不同缩放卷积方法都是线性操作,并可用矩阵去解释。对于每个输出窗口,反卷积操作的输入唯一,缩放卷积会以阻碍高频棋盘效应的方式来隐式地集中权重(weight-tying)。

    缩放卷积

    缩放卷积为线性操作:假设原图像为A,经过插值后的图像为A+B;用卷积核C对插值缩放后的图像卷积,得到最终的图像 ,其中*为卷积操作。则可将缩放卷积分解为原图像卷积和插值增量图像卷积,或卷积的原图像和卷积的插值增量图像。

    C为卷积操作的卷积核。此时为上采样,理解为反卷积操作中的卷积核。

    (1)最近邻缩放卷积

    image

    发现,插值增量图像表示的矩阵为原图像表示的矩阵下移1行。可将原图像矩阵看成环形队列(队列最后1行的输出送入队列的第1行)。

    (2)双线性缩放卷积

    image

    发现,插值增量图像可细分为原图像表示的矩阵下移1行后乘以1/2与原图像表示的矩阵上移1行后乘以1/2。

    5.23 CNN主要的计算瓶颈

    CNN的训练主要是在卷积层和子采样层的交互上,其主要的计算瓶颈是:

    • 1)前向传播过程:下采样每个卷积层的maps;
    • 2)反向传播过程:上采样高层子采样层的灵敏度map,以匹配底层的卷积层输出maps的大小;
    • 3)sigmoid的运用和求导。

    举例:

    对于第一和第二个问题,我们考虑的是如何用Matlab内置的图像处理函数去实现上采样和下采样的操作。对于上采样,imresize函数可以搞定,但需要很大的开销。一个比较快速的版本是使用Kronecker乘积函数kron。通过一个全一矩阵ones来和我们需要上采样的矩阵进行Kronecker乘积,就可以实现上采样的效果。对于前向传播过程中的下采样,imresize并没有提供在缩小图像的过程中还计算nxn块内像素的和的功能,所以没法用。一个比较好和快速的方法是用一个全一的卷积核来卷积图像,然后简单的通过标准的索引方法来采样最后卷积结果。例如,如果下采样的域是2x2的,那么我们可以用2x2的元素全是1的卷积核来卷积图像。然后再卷积后的图像中,我们每个2个点采集一次数据,y=x(1:2:end,1:2:end),这样就可以得到了两倍下采样,同时执行求和的效果。

    对于第三个问题,实际上有些人以为Matlab中对sigmoid函数进行inline的定义会更快,其实不然,Matlab与C/C++等等语言不一样,Matlab的inline反而比普通的函数定义更非时间。所以,我们可以直接在代码中使用计算sigmoid函数及其导数的真实代码。

    5.24 CNN的参数经验设置

    对于卷积神经网络的参数设置,没有很明确的方法,这只是众多学者的一些经验。

    1、learning-rate 学习速率:学习速率越小,模型收敛花费的时间就越长,但是可以提高模型精确度。一般初始设置为0.1,然后每次除以0.2或者0.5来改进,得到最终值;

    2、batch-size 样本批次容量:影响模型的优化程度和收敛速度,需要参考你的数据集大小来设置,具体问题具体分析;

    3、weight-decay 权重衰减:用来在反向传播中更新权重和偏置,一般设置为0.005;

    4、epoch-number 训练次数:包括所有训练样本的一个正向传递和一个反向传递,训练至模型收敛即可;(注:和迭代周期iteration不一样)

    而且,也不是说训练的次数越多,测试精度就会越高,可能会因为预训练的模型太复杂,而我的数据集样本数量太少,种类太单一,而出现过拟合。

    5.25 提高泛化能力的方法总结

    http://blog.csdn.net/u010900574/article/details/51992156

    5.25.1 主要方法

    一般来说,提高泛化能力的方法主要有以下几个:

    • 正则化
    • 增加神经网络层数
    • 使用正确的代价函数
    • 使用好的权重初始化技术
    • 人为拓展训练集
    • 弃权技术

    5.25.2 主要方法

    下面我们通过实验结果给这些参数优化理论一个直观的结果

    (1)普通的全连接神经网络的效果

    我们使用一个隐藏层,包含100个隐藏神经元,输入层是784,输出层是one-hot编码的形式,最后一层是Softmax层。训练过程采用对数似然代价函数,60次迭代,学习速率η=0.1,随机梯度下降的小批量数据大小为10,没有正则化。在测试集上得到的结果是97.8%,代码如下:

    >>> import network3 
    >>> from network3 import Network 
    >>> from network3 import ConvPoolLayer, FullyConnectedLayer, SoftmaxLayer 
    >>> training_data, validation_data, test_data = network3.load_data_shared() 
    >>> mini_batch_size = 10 
    >>> net = Network([FullyConnectedLayer(n_in=784, n_out=100),
             SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size) 
    >>> net.SGD(training_data, 60, mini_batch_size, 0.1, validation_data, test_data)
    

    (2)使用卷积神经网络 — 仅一个卷积层

    输入层是卷积层,55的局部感受野,也就是一个55的卷积核,一共20个特征映射。最大池化层选用2*2的大小。后面是100个隐藏神经元的全连接层。结构如图所示

    image

    在这个架构中,我们把卷积层和chihua层看做是学习输入训练图像中的局部感受野,而后的全连接层则是一个更抽象层次的学习,从整个图像整合全局信息。也是60次迭代,批量数据大小是10,学习率是0.1.代码如下。

    >>> net = Network([
            ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28), 
                          filter_shape=(20, 1, 5, 5), 
                          poolsize=(2, 2)),
            FullyConnectedLayer(n_in=20*12*12, n_out=100),
            SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
    >>> net.SGD(training_data, 60, mini_batch_size, 0.1, 
                validation_data, test_data)
    

    经过三次运行取平均后,准确率是98.78%,这是相当大的改善。错误率降低了1/3,。卷积神经网络开始显现威力。

    (3)使用卷积神经网络 — 两个卷积层

    我们接着插入第二个卷积-混合层,把它插入在之前的卷积-混合层和全连接层之间,同样的55的局部感受野,22的池化层。

    >>> net = Network([
            ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28), 
                          filter_shape=(20, 1, 5, 5), 
                          poolsize=(2, 2)),
            ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12), 
                          filter_shape=(40, 20, 5, 5), 
                          poolsize=(2, 2)),
            FullyConnectedLayer(n_in=40*4*4, n_out=100),
            SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
    >>> net.SGD(training_data, 60, mini_batch_size, 0.1, validation_data, test_data) 
    

    这一次,我们拥有了99.06%的准确率。

    (4)使用卷积神经网络 — 两个卷积层+线性修正单元(ReLU)+正则化

    上面我们使用的Sigmod激活函数,现在我们换成线性修正激活函数ReLU ,f(z)=max(0,z)f(z)=max(0,z),我们选择60个迭代期,学习速率η=0.03,η=0.03, ,使用L2正则化,正则化参数λ=0.1λ=0.1,代码如下:

    >>> from network3 import ReLU
    >>> net = Network([
            ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28), 
                          filter_shape=(20, 1, 5, 5), 
                          poolsize=(2, 2), 
                          activation_fn=ReLU),
            ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12), 
                          filter_shape=(40, 20, 5, 5), 
                          poolsize=(2, 2), 
                          activation_fn=ReLU),
            FullyConnectedLayer(n_in=40*4*4, n_out=100, activation_fn=ReLU),
            SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
    >>> net.SGD(training_data, 60, mini_batch_size, 0.03, 
                validation_data, test_data, lmbda=0.1)
    

    这一次,我们获得了99.23%的准确率,超过了S型激活函数的99.06%. ReLU的优势是max(0,z)max(0,z)中z取最大极限时不会饱和,不像是S函数,这有助于持续学习。

    (5)使用卷积神经网络,即两个卷基层+线性修正单元(ReLU)+正则化+拓展数据集

    拓展训练集数据的一个简单方法是将每个训练图像由一个像素来代替,无论是上一个像素,下一个像素,或者左右的像素。其他的方法也有改变亮度,改变分辨率,图片旋转,扭曲,位移等。我们把50,000幅图像人为拓展到250,000幅图像。使用第4节一样的网络,因为我们是在训练5倍的数据,所以减少了过拟合的风险。

    >>> expanded_training_data, _, _ = network3.load_data_shared(
            "../data/mnist_expanded.pkl.gz")
    >>> net = Network([
            ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28), 
                          filter_shape=(20, 1, 5, 5), 
                          poolsize=(2, 2), 
                          activation_fn=ReLU),
            ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12), 
                          filter_shape=(40, 20, 5, 5), 
                          poolsize=(2, 2), 
                          activation_fn=ReLU),
            FullyConnectedLayer(n_in=40*4*4, n_out=100, activation_fn=ReLU),
            SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
    >>> net.SGD(expanded_training_data, 60, mini_batch_size, 0.03, 
                validation_data, test_data, lmbda=0.1)
    

    这次的到了99.37的训练正确率。

    (6)使用卷积神经网络 — 两个卷基层+线性修正单元(ReLU)+正则化+拓展数据集+继续插入额外的全连接层
    继续上面的网络,我们拓展全连接层的规模,300个隐藏神经元和1000个神经元的额精度分别是99.46%和99.43%. 我们插入一个额外的全连接层

    >>> net = Network([
            ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28), 
                          filter_shape=(20, 1, 5, 5), 
                          poolsize=(2, 2), 
                          activation_fn=ReLU),
            ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12), 
                          filter_shape=(40, 20, 5, 5), 
                          poolsize=(2, 2), 
                          activation_fn=ReLU),
            FullyConnectedLayer(n_in=40*4*4, n_out=100, activation_fn=ReLU),
            FullyConnectedLayer(n_in=100, n_out=100, activation_fn=ReLU),
            SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
    >>> net.SGD(expanded_training_data, 60, mini_batch_size, 0.03, 
                validation_data, test_data, lmbda=0.1)
    

    这次取得了99.43%的精度。拓展后的网络并没有帮助太多。

    (7)使用卷积神经网络 — 两个卷基层+线性修正单元(ReLU)+拓展数据集+继续插入额外的全连接层+弃权技术

    弃权的基本思想就是在训练网络时随机的移除单独的激活值,使得模型对单独的依据丢失更为强劲,因此不太依赖于训练数据的特质。我们尝试应用弃权技术到最终的全连接层(不是在卷基层)。这里,减少了迭代期的数量为40个,全连接层使用1000个隐藏神经元,因为弃权技术会丢弃一些神经元。Dropout是一种非常有效有提高泛化能力,降低过拟合的方法!

    >>> net = Network([
            ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28), 
                          filter_shape=(20, 1, 5, 5), 
                          poolsize=(2, 2), 
                          activation_fn=ReLU),
            ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12), 
                          filter_shape=(40, 20, 5, 5), 
                          poolsize=(2, 2), 
                          activation_fn=ReLU),
            FullyConnectedLayer(
                n_in=40*4*4, n_out=1000, activation_fn=ReLU, p_dropout=0.5),
            FullyConnectedLayer(
                n_in=1000, n_out=1000, activation_fn=ReLU, p_dropout=0.5),
            SoftmaxLayer(n_in=1000, n_out=10, p_dropout=0.5)], 
            mini_batch_size)
    >>> net.SGD(expanded_training_data, 40, mini_batch_size, 0.03, 
                validation_data, test_data)
    

    使用弃权技术,的到了99.60%的准确率。

    (8)使用卷积神经网络 — 两个卷基层+线性修正单元(ReLU)+正则化+拓展数据集+继续插入额外的全连接层+弃权技术+组合网络

    组合网络类似于随机森林或者adaboost的集成方法,创建几个神经网络,让他们投票来决定最好的分类。我们训练了5个不同的神经网络,每个都大到了99.60%的准去率,用这5个网络来进行投票表决一个图像的分类。

    采用这个方法,达到了99.67%的准确率。

    5.26 CNN在CV与NLP领域运用的联系与区别?

    5.26.1 联系

    自然语言处理是对一维信号(词序列)做操作。
    计算机视觉是对二维(图像)或三维(视频流)信号做操作。

    5.26.2 区别

    自然语言处理的输入数据通常是离散取值(例如表示一个单词或字母通常表示为词典中的one hot向量),计算机视觉则是连续取值(比如归一化到0,1之间的灰度值)。CNN有两个主要特点,区域不变性(location invariance)和组合性(Compositionality)。

    1. 区域不变性:滤波器在每层的输入向量(图像)上滑动,检测的是局部信息,然后通过pooling取最大值或均值。pooling这步综合了局部特征,失去了每个特征的位置信息。这很适合基于图像的任务,比如要判断一幅图里有没有猫这种生物,你可能不会去关心这只猫出现在图像的哪个区域。但是在NLP里,词语在句子或是段落里出现的位置,顺序,都是很重要的信息。
    2. 局部组合性:CNN中,每个滤波器都把较低层的局部特征组合生成较高层的更全局化的特征。这在CV里很好理解,像素组合成边缘,边缘生成形状,最后把各种形状组合起来得到复杂的物体表达。在语言里,当然也有类似的组合关系,但是远不如图像来的直接。而且在图像里,相邻像素必须是相关的,相邻的词语却未必相关。

    5.27 CNN凸显共性的手段?

    5.27.1 局部连接

    感受视野:每个神经元仅与输入神经元的一块区域连接,这块局部区域称作感受野(receptive field)。
    在图像卷积操作中,即神经元在空间维度是局部连接,但在深度上是全部连接。对于二维图像本身而言,也是局部像素关联较强。这种局部连接保证了学习后的过滤器能够对于局部的输入特征有最强的响应。局部连接的思想,也是受启发于生物学里面的视觉系统结构,视觉皮层的神经元就是局部接受信息的。

    局部连接使网络可以提取数据的局部特征;

    下图是一个很经典的图示,左边是全连接,右边是局部连接。

    image

    对于一个1000 × 1000的输入图像而言,如果下一个隐藏层的神经元数目为10^6个,采用全连接则有1000 × 1000 × 10^6 = 10^12个权值参数,如此数目巨大的参数几乎难以训练;而采用局部连接,隐藏层的每个神经元仅与图像中10 × 10的局部图像相连接,那么此时的权值参数数量为10 × 10 × 10^6 = 10^8,将直接减少4个数量级。

    5.27.2 权值共享

    权重共享:计算同一个深度切片的神经元时采用的滤波器是共享的。例如图4中计算o[:,:,0]的每个每个神经元的滤波器均相同,都为W0,这样可以很大程度上减少参数。共享权重在一定程度上讲是有意义的,例如图片的底层边缘特征与特征在图中的具体位置无关。但是在一些场景中是无意的,比如输入的图片是人脸,眼睛和头发位于不同的位置,希望在不同的位置学到不同的特征 (参考斯坦福大学公开课)。请注意权重只是对于同一深度切片的神经元是共享的,在卷积层,通常采用多组卷积核提取不同特征,即对应不同深度切片的特征,不同深度切片的神经元权重是不共享。另外,偏重对同一深度切片的所有神经元都是共享的。

    权值共享大大降低了网络的训练难度,一个Filter只提取一个特征,在整个图片(或者语音/文本) 中进行卷积

    尽管减少了几个数量级,但参数数量依然较多。能不能再进一步减少呢?能!方法就是权值共享。具体做法是,在局部连接中隐藏层的每一个神经元连接的是一个10 × 10的局部图像,因此有10 × 10个权值参数,将这10 × 10个权值参数共享给剩下的神经元,也就是说隐藏层中10^6个神经元的权值参数相同,那么此时不管隐藏层神经元的数目是多少,需要训练的参数就是这 10 × 10个权值参数(也就是卷积核(也称滤波器)的大小),如下图。

    image

    这大概就是CNN的一个神奇之处,尽管只有这么少的参数,依旧有出色的性能。但是,这样仅提取了图像的一种特征,如果要多提取出一些特征,可以增加多个卷积核,不同的卷积核能够得到图像的不同映射下的特征,称之为Feature Map。如果有100个卷积核,最终的权值参数也仅为100 × 100 = 10^4个而已。另外,偏置参数也是共享的,同一种滤波器共享一个。

    5.27.3 池化操作

    池化操作与多层次结构一起,实现了数据的降维,将低层次的局部特征组合成为较高层次的特征,从而对整个图片进行表示。如下图:

    image

    5.28 全卷积与Local-Conv的异同点

    如果每一个点的处理使用相同的Filter,则为全卷积,如果使用不同的Filter,则为Local-Conv。

    5.29 举例理解Local-Conv的作用

    这个问题主要针对:为什么很多做人脸的Paper会最后加入一个Local Connected Conv?总体上说,这一步的作用就是使用3D模型来将人脸对齐,从而使CNN发挥最大的效果。

    image

    经过3D对齐以后,形成的图像都是152×152的图像,输入到上述网络结构中,该结构的参数如下:

    • Conv:32个11×11×3的卷积核max-pooling: 3×3, stride=2Conv: 16个9×9的卷积核。
    • Local-Conv: 16个9×9的卷积核,Local的意思是卷积核的参数不共享。
    • Local-Conv: 16个7×7的卷积核,参数不共享Local-Conv: 16个5×5的卷积核,参数不共享
    • Fully-connected: 4096维Softmax: 4030维。

    前三层的目的在于提取低层次的特征,比如简单的边和纹理。其中Max-pooling层使得卷积的输出对微小的偏移情况更加鲁棒。但没有用太多的Max-pooling层,因为太多的Max-pooling层会使得网络损失图像信息。

    后面三层都是使用参数不共享的卷积核,之所以使用参数不共享,有如下原因:

    (1)对齐的人脸图片中,不同的区域会有不同的统计特征,卷积的局部稳定性假设并不存在,所以使用相同的卷积核会导致信息的丢失
    (2)不共享的卷积核并不增加抽取特征时的计算量,而会增加训练时的计算量
    (3)使用不共享的卷积核,需要训练的参数量大大增加,因而需要很大的数据量,然而这个条件本文刚好满足。

    全连接层将上一层的每个单元和本层的所有单元相连,用来捕捉人脸图像不同位置的特征之间的相关性。其中,第7层(4096-d)被用来表示人脸。

    全连接层的输出可以用于Softmax的输入,Softmax层用于分类。

    5.30 简述卷积神经网络进化史

    主要讨论CNN的发展,并且引用刘昕博士的思路,对CNN的发展作一个更加详细的介绍,将按下图的CNN发展史进行描述

    ![image](./img/ch5/img67)

    1. 列表项
      http://mp.weixin.qq.com/s?__biz=MzI1NTE4NTUwOQ==&mid=2650324619&idx=1&sn=ca1aed9e42d8f020d0971e62148e13be&scene=1&srcid=0503De6zpYN01gagUvn0Ht8D#wechat_redirect
      CNN的演化路径可以总结为以下几个方向:
    • 进化之路一:网络结构加深
    • 进化之路二:加强卷积功能
    • 进化之路三:从分类到检测
    • 进化之路四:新增功能模块
    展开全文
  • 从零开始搭建神经网络(卷积神经网络(CNN)

    万次阅读 多人点赞 2018-08-09 17:36:48
    目录 1.基础介绍 2.网络结构 2.1卷积层 2.1.1 Padding 2.1.2 Stride ...2.2池化 ...2.3全连接 ...卷积神经网络的基础内容可以参考:机器学习...卷积神经网络一般包括卷积层,池化和全连接,下面分别介绍一下 2...
  • 卷积神经网络的基础概念,主要是卷积层和池化,并解释填充、步幅、输入通道和输出通道的含义。本节介绍的是最常见的二维卷积层,常用于处理图像数据。 二维互相关运算:二维互相关(cross-correlation)运算的输入...
  • 前言:本章会涉及到许多与卷积神经网络相关的核心知识点,属于对卷积神经网络知识点的一些梳理和总结,所以,需要有一些基础的小伙伴才能很好的理解,刚刚入门的小伙伴,少奶奶建议先阅读其他大牛的博文,然后再来看...
  • 常见的种神经网络(2)-卷积神经网络

    千次阅读 多人点赞 2019-09-04 07:52:18
    文章目录卷积的概念一维卷积二维卷积互相关常见的卷积核及特征常见的卷积核卷积核的特征卷积的变种卷积的数学性质交换性导数卷积神经网络用卷积...网络结构参数学习误差项的计算卷积层汇聚几种典型的卷积神经网络LeNet...
  • 卷积神经网络解决猫狗分类问题(零):总概要 卷积神经网络解决猫狗分类问题(一):V1 简单线性网络 1. 介绍 使用keras搭建简单线性网络,添加数据增强和一dropout,在猫狗数据集上训练,最终得到83%的训练...
  • 卷积神经网络

    2019-03-15 22:28:39
    卷积神经网络 创建日期 星期 15 三月 2019 卷积神经网络的特点在于卷积; 通俗的来说卷积就是局部扫描,然后进行训练识别,将一个图像卷积,从原来的n维矩阵进行折叠,进行降维操作,然后对其进行全连接加权,...
  • cnn.py import torch.nn as nn class CNN(nn.Module): def __init__(self): super(CNN, self).__init__() self.layer1 = nn.Sequential( nn.Conv2d(1, 16, kernel_size=3), ...
  • 卷积神经网络(英文Convolutional Neural Network,简称CNN(PS:和某媒体同名))。这个结构最初设计是为了解决图像识别一类的问题,不过现在CNN也被广泛应用于时间序列类信号如音频和文本数据等等。此外卷积神经网络也是...
  • 魏老师学生——Cecil:学习卷积神经网络CNN之旅 神经网络的结构卷积神经网络 神经网络的结构 神经网络分为输入、中间、输出。如图: 卷积神经网络 Convolutional Neural Networks CNN:可以有效降低...
  • 卷积神经网络解决猫狗分类问题(零):总概要 卷积神经网络解决猫狗分类问题(一):V1 简单线性网络 1. 介绍 使用keras搭建简单线性网络。再猫狗数据集上训练,最终得到99%的训练精度和75%验证集精度,显然我们...
  • 卷积神经网络)-ResNet

    千次阅读 2019-05-06 12:47:01
    卷积神经网络)-ResNet 卷积神经网络(六)-DenseNet 2015年何恺明推出的ResNet在ISLVRC和COCO上横扫所有选手,获得冠军。ResNet在网络结构上做了大创新,而不再是简单的堆积数,ResNe...
  • 在《python深度学习》(弗朗索瓦·肖莱著)这本书中,针对猫狗分类问题,使用kaggle上的猫狗分类数据集的部分数据,作者使用卷积神经网络(使用相同的数据集训练和测试)方法来提高网络精度,在这里我使用V1~V5来...
  • 【手把手TensorFlow】一、从开始使用TensorFlow到弄清楚“搭建神经网络套路” 【手把手TensorFlow】二、神经网络优化 【手把手TensorFlow】三、神经网络搭建完整框架+MNIST数据集实践 【手把手TensorFlow】四、输入...
  • 卷积神经网络 ③循环神经网络 ④深度信念网络(DBN) 深度信念网络(Deep Belief Netword, DBN)是一种深层的概率有向图模型,其图结构有多层的节点构成。每节点的内部没有连接,相邻两的节点之间为全连接 ...
  • 卷积核也叫做感受野(receptive filed)卷积核与局部图像的一次内积求和,是下一图像的一个像素点。那个像素点只看到了之前图像的局部。-----------------------------------------------------------------------...
  • 本文对于卷积神经网络(CNN)做一个总结,包括前向传播、反向传播以及代码实现。01原理深度神经网络(DNN)是深度学习的基础,其本质上是多层神经网络。DNN的训练过程可分为两个步骤,即前向传播与反向传播。卷积神经...
  • #通过tf.get_variable的方式创建过滤的权重变量和偏置项变量。是一个四维矩阵,前面两个维度代表了 #过滤器的尺寸,第三个维度代表当前的深度,第四个代表过滤器的深度 filter_weight = tf.get_variable(name='...
  • 卷积神经网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者其他形式的变形具有高度不变性。这些良好的性能是网络在有监督方式下学会的,网络的结构主要有稀疏连接和权值共享...
  • 卷积神经网络主要由以下种结构组成 输入。输入是整个神经网络的输入 ,在处理图像 的卷积神经网络中,它一般代表了一张图片的像素矩阵。从输入开始 ,卷积神经网络通过不同的神经网络结构将上一的三维...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 375
精华内容 150
关键字:

五层卷积神经网络