深度学习第五课—CNN

  • 1. 卷积层与池化层
    • 卷积层:
      • 卷积层的目的是提取输入特征图的特征,卷积核是提取图像中的边缘信息
        • 卷积神经网络中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法最佳化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网路能从低级特征中迭代提取更复杂的特征。

          深度学习第五课—CNN_第1张图片

        • 卷积利用卷积核对图像进行独行或者跨行(视情况而定)进行扫描,然后提取出图像特征。卷积操作其功能类似于传统图像处理中的滤波器。
      • 卷积核权值共享:一个卷积层可以有多个不同的卷积核,每一个filter在与输入矩阵进行点积操作的过程中,其权值是固定不变的。
      • 卷积核:
        • 用于提取图片的局部特征,不同的卷积核提取图片特征的效果不同。
        • 感受野:卷积核的大小 / 范围,卷积核所能感知的区域

          深度学习第五课—CNN_第2张图片

      • 一个卷积层可以有若干个卷积核,卷积核的通道数=输入图片的通道数,每一个卷积核的通道与图片的对应通道进行点积+累加的操作,可以得到1个featrue map,假设有3个通道,那么可以得到3个featrue map,然后把这3个feature map对应的位置相加,即可得到1张featrue map,得到的这一张就是该卷积核与图片进行卷积操作的feature map。一般图片有3个通道(RGB通道),red、green、blue,然后卷积核的通道数为3,分别对应r、g、b,然后这对应的三个通道分别点积+累加,得到3个feature map,最后再把这3张feature ma相加,然后再加上偏移值b,就可以得到1张feature map。
      • 步幅:
        • 步幅是我们在输入矩阵上滑动滤波器矩阵的像素数。当步幅为1时,我们将过滤器一次移动一个像素。当步幅为2时,过滤器在我们滑动时一次跳跃⒉个像素。更大的步幅将产生更小的特征图。
          • 深度学习第五课—CNN_第3张图片

      • 零填充:
        • 深度学习第五课—CNN_第4张图片

      • 多通道卷积:
        • 深度学习第五课—CNN_第5张图片

      • 多卷积核卷积:
        • 深度学习第五课—CNN_第6张图片

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

        深度学习第五课—CNN_第7张图片

      • 有多种不同形式的非线性池化函数,一种是Avy Pooling(平均池化),一种是max Pooling(最大池化)。池化层往往在卷积层后面,通过池化来降低卷积层输出的特征向量,同时改善结果(不易出现过拟合)。
        • 平均池化:计算图像区域的平均值作为该区域池化后的值。
        • 最大池化:选图像区域的最大值作为该区域池化后的值。
  • 2. 激活函数的作用是什么
    • 如果输入变化很小,导致输出结构发生截然不同的结果,这种情况是我们不希望看到的,为了模拟更细微的变化,输入和输出数值不只是0到1,可以是0和1之间的任何数
    • 激活函数是用来加入非线性因素的,因为线性模型的表达力不够
      • 在神经网络中,对于图像,我们主要采用了卷积的方式来处理,也就是对每个像素点赋予一个权值,这个操作显然就是线性的。但是对于我们样本来说,不一定是线性可分的,为了解决这个问题,我们可以进行线性变化,或者我们引入非线性因素,解决线性模型所不能解决的问题。
      • 选取的激活函数要能保证数据输入与输出也是可微的,运算特征是不断进行循环计算,所以在每代循环过程中,每个神经元的值也是在不断变化的。
    • 详细移步:(51条消息) 卷积神经网络——输入层、卷积层、激活函数、池化层、全连接层_yjl9122的博客-CSDN博客_卷积神经网络输入层
  • 3. AI Studio使用CNN实现猫狗分类
    • 运行项目前进行必要包的导入
      • 深度学习第五课—CNN_第8张图片

    • 准备数据
      • train_reader和test_reader

        深度学习第五课—CNN_第9张图片

      • 数据集下载

    • CNN网络搭建
      • 在CNN模型中,卷积神经网络能够更好的利用图像的结构信息。下面定义了一个较简单的卷积神经网络。显示了其结构:输入的二维图像,先经过三次卷积层、池化层和Batchnorm,再经过全连接层,最后使用softmax分类作为输出层。

        深度学习第五课—CNN_第10张图片

      • (1)网络搭建:
        • 三个池化层到最后全连接输出层

          深度学习第五课—CNN_第11张图片

      • (2)定义数据:
        • 深度学习第五课—CNN_第12张图片

      • (3)获取分类器:
      • (4)定义损失函数和准确率:
        • 分类任务使用交叉熵损失函数,定义了一个损失函数之后,还有对它求平均值,因为定义的是一个Batch的损失值。

      • (5)定义优化方法
        • 使用Adam优化算法,指定学习率为0.001

          深度学习第五课—CNN_第13张图片

    • 模型训练
      • (1)创建Executor

        深度学习第五课—CNN_第14张图片

      • (2) 定义数据映射器
        • DataFeeder 负责将reader(读取器)返回的数据转成一种特殊的数据结构,使它们可以输入到 Executor

      • (3)定义绘制训练过程的损失值和准确率变化趋势的方法draw_train_process

        深度学习第五课—CNN_第15张图片

      • (4)训练并保存模型
        • Executor接收传入的program,并根据feed map(输入映射表)和fetch_list(结果获取表) 向program中添加feed operators(数据输入算子)和fetch operators(结果获取算子)。 feed map为该program提供输入数据。fetch_list提供program训练结束后用户预期的变量。
        • 每一个Pass训练结束之后,再使用验证集进行验证,并打印出相应的损失值cost和准确率acc。
    • 模型预测
      • (1) 创建预测用的Executor
      • (2) 图片预处理
        • 首先将图片大小调整为32*32,接着将图像转换成一维向量,最后再对一维向量进行归一化处理。

          深度学习第五课—CNN_第16张图片

      • (3) 开始预测
        • 通过fluid.io.load_inference_model,预测器会从params_dirname中读取已经训练好的模型,来对从未遇见过的数据进行预测。

          深度学习第五课—CNN_第17张图片

你可能感兴趣的:(计算机视觉,深度学习,cnn)