• 【Python深度学习】Python全栈体系(二十九)


    深度学习

    第五章 卷积神经网络

    一、卷积函数

    1. 什么是卷积?

    在这里插入图片描述

    2. 离散卷积与多维卷积

    在这里插入图片描述

    3. 生活中的卷积

    在这里插入图片描述

    二、卷积神经网络

    1. 全连接神经网络的局限

    • 之前介绍的神经网络,相邻层所有神经元之间都有连接,这称为全连接(fully-connected)。全连接神经网络有以下几个问题:
      • 未考虑数据的“形状”,会破坏数据空间结构。例如:输入数据是图像时,图像通常是高长通道方向上的3维形状。但是,向全连接层输入时,需要将3维数据拉平为1维数据。
      • 全连接网络层次深度受限,一般不超过七层。
      • 全连接网络参数量庞大,需要降低参数量。
        在这里插入图片描述

    2. 什么是卷积神经网络?

    • 卷积神经网络(Convolutional Neural Network, CNN)针对全连接网络的局限做出了修正,加入了卷积层(Convolution层)和池化层(Pooling层)。

    3. 卷积神经网络的用途

    • CNN被广泛应用于图像识别、语音识别等各种场合,在图像识别的比赛中,基于深度学习的方法几乎都以CNN为基础(比如,AlexNet、VGGNet、Google Inception Net及微软的ResNet等)上。近几年深度学习大放异彩,CNN功不可没。

    4. 卷积运算

    • 单通道、二维卷积运算示例
      在这里插入图片描述
      在这里插入图片描述

    5. 带填充的卷积运算

    在这里插入图片描述

    6. 步幅为2的卷积运算

    在这里插入图片描述

    7. 输入输出大小计算公式

    在这里插入图片描述

    8. 多通道卷积

    在这里插入图片描述

    9. 卷积运算的效果

    • 通过卷积运算,能对输入数据起到加强或平滑效果。在图像处理中,通过选取合适的卷积核(或称算子),可以将图像进行锐化、去噪、模糊、加强边沿。
      在这里插入图片描述
    • 卷积运算能提取深层次复杂特征
      在这里插入图片描述
      在这里插入图片描述

    10. 代码

    # 图像卷积示例
    import cv2
    from scipy import signal
    from scipy import misc
    import imageio
    import matplotlib.pyplot as plt
    import numpy as np
    import scipy.ndimage as sn
    
    # im = misc.imread("../../OpenCV/data/lily.png")
    im = cv2.imread("../../OpenCV/data/lily.png",0)
    
    flt = np.array([[-1, 0, 1],
                    [-2, 0, 2],
                    [-1, 0, 1]])  # 卷积核(过滤器)
    flt2 = np.array([[1, 2, 1],
                    [0, 0, 0],
                    [-1, -2, -1]])  # 另一个卷积核(对垂直方向上的色彩变化敏感)
    grad = signal.convolve2d(im,  # 输入数据
                             flt,  # 卷积核
                             boundary="symm",  # 边沿处理方式
                             mode="same").astype("int32")  # same表示同维卷积
    grad2 = signal.convolve2d(im,  # 输入数据
                             flt2,  # 卷积核
                             boundary="symm",  # 边沿处理方式
                             mode="same").astype("int32")  # same表示同维卷积
    # 可视化
    plt.figure("Conv2D")
    plt.subplot(131)  # 第一个子图,显示原图
    plt.imshow(im, cmap="gray")  # 显示灰度图
    plt.xticks([])
    plt.yticks([])
    
    plt.subplot(132)  # 第二个子图,显示flt1卷积后的图像
    plt.imshow(grad, cmap="gray")  # 显示卷积后的图像
    plt.xticks([])
    plt.yticks([])
    
    plt.subplot(133)  # 第二个子图,显示flt2卷积后的图像
    plt.imshow(grad2, cmap="gray")  # 显示卷积后的图像
    plt.xticks([])
    plt.yticks([])
    
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    在这里插入图片描述

    11. 卷积神经网络结构

    • 通常情况下,卷积神经网络由若干个卷积层(Convolutional Layer)、激活层(Activation Layer)、池化层(Pooling Layer)及全连接层(Fully Connected Layer)组成。
      在这里插入图片描述
    11.1 卷积层
    • 它是卷积神经网络的核心所在,通过卷积运算,达到降维处理和提取特征两个重要目的
      在这里插入图片描述
    11.2 激活层
    • 其作用在于将前一层的线性输出,通过非线性的激活函数进行处理,这样用以模拟任意函数,从而增强网络的表征能力。前面章节中介绍的激活函数,如挤压函数Sigmoid也是可用的,但效果并不好。在深度学习领域,ReLU(Rectified-Linear Unit,修正线性单元)是目前使用较多的激活函数,主要原因是它收敛更快,次要原因在于它部分解决了梯度消失问题。
    11.3 池化层(Pooling Layer)
    • 也称子采样层或下采样层(Subsampling Layer),目的是缩小高、长方向上的空间的运算,以降低计算量,提高泛化能力。如下的示例,将44的矩阵缩小成22的矩阵输出
      在这里插入图片描述
      (提取最大的值)
    11.3.1 池化层计算
    • 对于每个输入矩阵,我们将其切割成若干大小相等的正方形小块,对每一个区块取最大值或者平均值,并将结果组成一个新的矩阵
    • Max池化:对各个参与池化计算的区域取最大值,形成的新矩阵。在图像识别领域,主要使用Max池化
    • Average池化:对各个参与池化计算的区域计算平均值
    11.3.2 池化层的特征
    • 没有要学习的参数。池化层和卷积层不同,没有要学习的参数。池化只是从目标区域中取最大值(或者平均值),所以不存在要学习的参数

    • 通道数不发生变化。经过池化运算,输入数据和输出数据的通道数不会发生变化
      在这里插入图片描述

    • 对微小的位置变化具有鲁棒性(健壮)。输入数据发生微小偏差时,池化仍会返回相同的结果

    12. 全连接层

    • 这个网络层相当于多层感知机(Multi-Layer Perceptron,简称MLP),其在整个卷积神经网络中起到分类器的作用
    • 通过前面多个“卷积-激活-池化”层的反复处理,待处理的数据特性已有了显著提高:一方面,输入数据的维度已下降到可用传统的前馈全连接网络来处理了;另一方面,此时的全连接层输入的数据已不再是“泥沙俱下、鱼龙混杂”,而是经过反复提纯过的结果,因此输出的分类品质要高得多。

    第六章 经典卷积神经网络模型

    一、LeNet

    • LeNet是Yann LeCun在1998年提出,用于解决手写数字识别的视觉任务。自那时起,CNN的最基本的架构就定下来了:卷积层、池化层、全连接层。
      在这里插入图片描述
    • LeNet的主要参数
      • 输入:输入32*32大小单通道图像
      • 两个“卷积-池化层”
      • 第一个全连接层神经元数目为500,再接激活函数
      • 第二个全连接层神经元数目为10,得到10维的特征向量,用于10个数字的分类训练,送入softmax分类,得到分类结果的概率

    二、AlexNet

    • AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhevsky设计的,把CNN的基本原理应用到了很深很宽的网络中。其特点有:
      • 使用ReLU作为激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题
      • 使用Dropout(丢弃学习)随机忽略一部分神经元防止过拟合
      • 在CNN中使用重叠的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果
      • 提出了LRN(Local Response Normalization,局部正规化)层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力
      • 使用CUDA加速深度卷积网络的训练,利用GPU强大的并行计算能力,处理神经网络训练时大量的矩阵运算
    • 网络结构
      在这里插入图片描述
    • 主要参数
      • AlexNet网络包含8层,其中前5层为卷积-池化层,后3层为全连接层;输入224x224x3的图像,第一卷积层用96个11x11x3的卷积核对进行滤波,步幅4像素;全连接的每层有4096个神经元,最后一个完全连接的层的输出被馈送到1000路SoftMax,它产生超过1000个类别标签的分布;整个网络共650000个神经元。

    三、VGG

    • VGG是Visual Geometry Group,Department of Engineering Science,University of Oxford(牛津大学工程科学系视觉稽核组)的缩写,2014年参加ILSVRC(ImageNet Large Scale Visual Recognition Challenge)2014大赛获得亚军(当年冠军为GoogleNet,但因为VGG结构简单,应用性强,所以很多技术人员都喜欢使用基于VGG的网络)
      在这里插入图片描述

    四、小结

    • 卷积神经网络(CNN),CNN是深度学习的主要模型,在解决复杂工程问题中表现出了良好的性能。卷积神经网络主要由以下几层构成:
      • 卷积层:执行卷积运算
      • 激活层:对卷积结果执行激活函数运算
      • 池化层:降低数据规模,防止过拟合
      • 全连接层:执行输出计算
  • 相关阅读:
    【优化模型】非线性规划问题
    v-decorator和v-model的使用对比
    Node.js学习
    EPLAN_006#部件库快速导入、树结构、部件导航器、材料表导航器
    SpringCloud服务治理介绍&Nacos安装及实现负载均衡
    《雷达原理》课程笔记-第一章:绪论
    webman 报错解决手册
    Clickhouse 原理
    Java中的高性能字节码工具:Javassist
    [附源码]java毕业设计8号体育用品销售及转卖系统
  • 原文地址:https://blog.csdn.net/sgsgkxkx/article/details/126272295