卷积神经网络基础


配套教材:北京交通大学《专知-深度学习》

01-CNN(Convolutional Neural Networks)

卷积神经网络最大的优点为:局部连接、权值共享。有效的减少了网络的参数个数,缓解了模型的过拟合问题。

一、基本组成结构

1. 卷积层

  • 局部感受野:在处理图像这样的高维度输入时,我们让每个神经元只与输入数据的一个局部区域连接。在深度方向上,这个连接的大小总是和输入量的深度相等
    需要强调的是,我们对待空间维度(宽和高)与深度维度是不同的:连接在空间(宽高)上是局部的,但是在深度上总是和输入数据的深度一致。
    图1 局部连接尺寸

  • 卷积核也称为过滤器(filter):

    • 每个卷积核具有长宽深三个维度;
    • 在某个卷积层中,可以有多个卷积核:下一层需要多少个feather map,本层就需要多少个卷积核。
    • 指定卷积核时,只需指定其长和宽两个参数,所以一般深度省略。例如,在原始图像层 ,如果图像是灰度图像,其feather map数量为1,则卷积核的深度也就是1;如果图像是grb图像,其feather map数量为3,则卷积核的深度也就是3。
  • 权值共享:不同神经元之间的参数共享可以减少需要求解的参数,使用多种滤波器去卷积图像就会得到多种特征映射。权值共享其实就是对图像用同样的卷积核进行卷积操作,其主要的能力就能检测到不同位置的同一类型特征

  • 卷积运算:
    在这里插入图片描述

  • 对于feather map输出尺寸的计算,常用公式为( N - F ) / stride + 1;
    加padding后为( N + padding*2 - F ) / stride + 1;
    其中N为输入尺寸,F为过滤器尺寸,stride为步长,1代表偏置项,padding为零填充的边缘。

  • 参数量的计算为 (F * F + 1 ) * 个数。

  1. 池化层
    保留主要特征的同时减少参数和计算量,防止过拟合,提高模型泛化能力;一般处于卷积层和卷积层之间,全连接层和全连接层之间。池化前后深度不变
    主要类型:Max Pooling,Average Pooling
    在这里插入图片描述

  2. 全连接层:在整个卷积神经网络中起到“分类器”的作用。全连接层和卷积层可以相互转换,其核心操作为 y = Wx + b; W,b为可优化的参数,x为前一层的数据;通过softmax函数预测标签。

二、典型网络结构

  1. AlexNet
  • 该网络的亮点在于:

    • 首次双GPU进行网络加速训练。
    • 使用了ReLU激活函数,解决梯度消失问题,且收敛速度快。
    • 使用了Dropout随机失活神经元操作,以减少过拟合。
      在这里插入图片描述
  • 模型结构
    在这里插入图片描述

  1. VGG
  • 模型结构在这里插入图片描述
  1. GoogleNet
  • 亮点:
    • 插入1x1卷积核进行降维
      在这里插入图片描述

    • Inception V3 进一步对 V2的参数数量进行降低,并增加非线性激活函数在这里插入图片描述

    • 辅助分类器解决模型过深的梯度消失问题

  1. ResNet
  • 亮点:
    • 引入残差Block:去掉相同的主体部分,从而突出微小的变化。
      在这里插入图片描述

    • 可以被用来训练非常深的网络。
      在这里插入图片描述

三、实验结果

  1. LeNet_MNIST
  • 使用torch.utils.data.DataLoader进行数据预处理操作,其中transforms众多函数的作用为图像增强处理,详情见链接。batch_size和shuffle可以进行分批次随机训练,避免数据投入的顺序对网络造成影响,增加随机性,提高网络的泛化性能,避免导致过拟合。
  • 定义网络时,需要继承nn.Module,并实现它的forward方法。
  • view方法类似于reshape,将多维数据flatten,常用于全连接层之前的操作,某些代码中的size(0)代表的是batch_size。
  • torch.max(outputs, 1),返回每一行中最大值的那个元素,且返回其索引。
  • 通过调整batch_size,优化函数等可进一步提高模型准确率,且CNN明显优于小型全连接网络。
    但是将图像像素打乱后,CNN准确率大幅下降,这是因为对于卷积神经网络,会利用像素的局部关系,但是打乱顺序以后,这些像素间的关系将无法得到利用。
    在这里插入图片描述
  1. LeNet_CIFAR
  • 训练的 shuffle 是 True,测试的 shuffle 是 false;即训练时可以打乱顺序增加多样性,测试是没有必要。
  • torch.nn.Module有train和eval两种模式,在train模式下启用 BatchNormalization 和 Dropout,将BatchNormalization和Dropout置为True;在eval模式下不启用 BatchNormalization 和 Dropout,将BatchNormalization和Dropout置为False。
  • 经过上述( N - F ) / stride + 1与池化后逐层计算,最后feature map大小为5x5,所以x.view(-1,16x5x5)
    在这里插入图片描述

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

  • 可以看到对于较复杂的数据集,网络准确率还有可提升空间。
  1. VGG_CIFAR
  • BatchNorm2d:归一化可以让不同的特征得到相同的权重倾向,可以加速收敛。
  • 网络构建在这里插入图片描述
  • VGG网络增加深度,有效提高正确率在这里插入图片描述

四、Q&A

  1. dataloader 里面 shuffle 取不同值有什么区别?
    shuffle取值为True,表示打乱数据集中顺序;取值为False,表示按照原有顺序。
    默认为False,且先打乱再取batch。
  2. transform 里,取了不同值,这个有什么区别?
    transform用于图像预处理,包括图像变换、归一化等操作,提高泛化能力,加快模型收敛。
  3. epoch 和 batch 的区别?
    epoch表示对一个完整数据集训练的总次数;batch为epoch内分批次训练的样本数,表示进行一次训练并更新参数的批次。
  4. 1x1的卷积和 FC 有什么区别?主要起什么作用?
    首先1x1的卷积核具有增加网络深度(增加非线性转换能力,因为卷积后要经过ReLU激活函数)、升/降维、减少参数计算量等作用。
    1x1卷积核其实是1×1×通道数,所以说,1x1卷积操作是在每个像素位置上,不同feature channels的线性叠加;
    全连接层 y=Wx,可以看作是一个全局的卷积操作,所以1x1卷积可代替全连接层,具有权值共享、参数量较少的优点。
    全连接层的权重矩阵是固定的(即与权重矩阵正好可以相乘的大小),卷积不需要固定大小。
    有待进一步学习…
  5. residual leanring 为什么能够提升准确率?
    通过残差块输入x传到输出F(x)+x,并作为下一层的输入结果,可以跳过不起作用的网络,且解决了梯度消失问题,可以训练更深的网络。
  6. 代码练习二里,网络和1989年 Lecun 提出的 LeNet 有什么区别?
    代码练习二中激活函数为ReLU,而LeNet激活函数是Sigmoid。
  7. 代码练习二里,卷积以后feature map 尺寸会变小,如何应用 Residual Learning?
    通过使用1*1卷积、填充、池化等方法保持尺寸一致。
  8. 有什么方法可以进一步提升准确率?
    对数据进行预处理;
    适当增加训练轮次;
    调整batch_size大小;
    合理调节网络结构;
    寻找更好的激活和优化函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值