神经网络与深度学习 Chapter5 卷积神经网络基础

Chapter5 卷积神经网络基础

05-QQ截图20240401153627

5.1 为什么要“深度学习”

5.1.1 全连接网络问题

  1. 全连接网络:

    • 链接权过多,算的慢,难收敛,同时可能进入局部极小值,也容易产生过拟合问题;
    • 举例:输入为 1000 × 1000 1000 \times 1000 1000×1000 图像,隐含层有 1 M 1M 1M 个节点,则输入到隐含层间有 1 × 1 0 12 1\times10^{12} 1×1012 数量级参数。
  2. 解决算得慢的问题:

    ​ 减少权值连接,每一个节点只连到上一层的少数神经元,即局部连接网络。

    image-20240401155001180

  3. 解决难收敛、算得慢的问题:

    • 权值过多极易产生过拟合;
    • 回到人类解决思路:信息分层处理,每一层在上层提取特征的基础上获取进行再处理,得到更高级别的特征。

5.1.2 深度学习平台

库名发布者支持语言支持系统
TensorFlowGooglePython/ C++/ Java/ GoLinux/ Mac OS/ Android/ IOS
CaffeUC BerkeleyPython/ C++/ MatLabLinux/ Mac OS/ Windows
JAXGooglePythonLinux/ Windows
MXNetAmazon/ DMLCPython/ C++/ MatLab/ Julia/ Go/ ScalaLinux/ Mac OS/ Windows/ Android/ IOS
Torch/PytorchFacebookC/ Python/ …Linux/ Mac OS/ Windows/ Android/ IOS
PaddlePaddleBaiduPythonLinux/ Windows
MMdetectionSenseTime/CUHKPythonLinux/ Windows

5.1.3 Pytorch 简介

  1. 简介:

    • PyTorch 是一个 Python 的深度学习库。它最初由 Facebook 人工智能研究小组开发,而优步的 Pyro 软件则用于概率编程。
    • 最初,PyTorch 由 Hugh Perkins 开发,作为基于 Torch 框架的 LusJIT 的 Python 包装器。PyTorch 在 Python 中重新设计和实现 Torch ,同时为后端代码共享相同的核心C库。
    • 除了 Facebook 之外,Twitter、GMU 和 Salesforce 等机构都采用了 PyTorch。
    • 到目前,据统计已有 80 80% 80 的研究采用 PyTorch,包括 Google。
  2. Pytorch 和 TensorFlow2 的对比

    image-20240401160243307

  3. Pytorch 资源

    • 60分钟快速入门:https://jianshu.com/p/889dbc684622;
    • 官方教程:https://www.pytorch123.com/;
    • 动手学深度学习:https://zh-v2.d2l.ai/;
    • Deep learning with pytorch: https://pytorch.org/assets/deep-learning/Deep-Learning-with-PyTorch.pdf。

5.1.4 Pytorch 基本概念

  1. 张量(Tensor)

    ​ 是一个物理量,对高维(维数 ≥ 2)的物理量进行“量纲分析” 的一种工具。简单的可以理解为:一维数组称为矢量,二维数组为二阶张量,三维数组为三阶张量……

  2. 计算图

    ​ 用“结点”(nodes)和“线”(edges)的有向图来描述数学计算的图像。“节点” 一般用来表示施加的数学操作,但也可以表示数据输入的起点/输出的终点,或者是读取/写入持久变量的终点。“线”表示“节点”之间的输入/输出关系。这些数据“线”可以输运“size可动态调整”的多维数据数组,即“张量”(tensor)。

    image-20240401161540689

  3. 其他概念

    • 使用 tensor 表示数据;
    • 使用 DatasetDataLoader 读取数据样本和标签;
    • 使用变量 Variable 存储神经网络权值等参数;
    • 使用计算图 computatianal graph 来表示计算任务;
    • 在代码运行中同时执行计算图。

5.2 卷积神经网络基础

5.2.1 进化史

  1. 各种 net 创立时间:

    image-20240401162724502

  2. 发展道路

    image-20240401162746855

  3. 层数

    image-20240401162813510

  4. 用途:

    image-20240401163933915

5.2.2 基本概念

  1. 特征提取 - 卷积:

    image-20240401165106155

    • 卷积:相乘再相加;
    • 边缘效应:小一圈;
    • 注意,图像卷积时,根据数学定义,需要首先把卷积核上下左右转置。此处卷积核(黄色)是对称的,所以忽视;
    • 如果视为神经元,则为局部操作,非全连接网络,因为与有限个相连。
  2. 填充(Padding):也就是在矩阵的边界上填充一些值,以增加矩阵的大小,通常用0或者复制边界像素来进行填充。

    image-20240401164225078

  3. 步长(Stride):如图步长为2

    image-20240401164320312

  4. 多通道卷积:以 RGB 为例

    image-20240401165238265

    image-20240401165252830

  5. 池化(Pooling):使用局部统计特征,如均值或最大值,解决特征过多问题。

    image-20240401170849636

  6. 卷积神经网络结构

    • 构成:由多个卷积层和下采样层构成,后面可连接全连接网络;
    • 卷积层: k k k 个滤波器;
    • 下采样层:采用 mean 或者 max
    • 后面:连着全连接网络。

    image-20240401171047001

5.2.3 学习算法

  • 卷积神经网络的 BP 算法

    • 下采样层:当前是卷积层,下一层为下采样层,误差如何从下采样层回传?

      • 假设为 2 ∗ 2 2*2 22 核平均池化

        image-20240413112922501

      • 假设为 2 ∗ 2 2*2 22 核卷积

        image-20240413113005354

      • 假设卷积核为 [ 0.1 0.2 0.2 0.4 ] \begin{bmatrix}0.1&0.2\\0.2&0.4\end{bmatrix} [0.10.20.20.4]

        image-20240413113136899

        式中,五角星表示图像卷积,计算时需首先上下、左右翻转后再做相关。

    • 卷积层+卷积层:
      卷积层: a [ l ] ( x 1 , y 1 ) = f ( ∑ u = 0 p ∑ v = 0 q a [ l − 1 ] ( x 1 + u , y 1 + v ) w [ l ] , k ( u , v ) ) 卷积层: a [ l + 1 ] ( x i , y i ) = f ( ∑ u = 0 p ∑ v = 0 q a [ l − 1 ] ( x i + u , y i + v ) w [ l + 1 ] , k ( u , v ) ) 因此有: ∂ a [ l + 1 ] ( x i , y i ) ∂ w [ l ] , k = ∑ u = 0 p ∑ v = 0 q ∂ a [ l + 1 ] ( x i , y i ) ∂ a [ l ] ( x i + u , y i + v ) ⋅ ∂ a [ l ] ( x i + u , y i + v ) ∂ w [ l ] , k \begin{aligned} \text{卷积层:}& a^{[l]}(x_1,y_1)= f\left( \sum_{u=0}^p\sum_{v=0}^qa^{[l-1]}(x_1+u,y_1+v)w^{[l],k}(u,v) \right) \\ \text{卷积层:}& a^{[l+1]}(x_i,y_i)= f\left( \sum_{u=0}^p\sum_{v=0}^qa^{[l-1]}(x_i+u,y_i+v)w^{[l+1],k}(u,v) \right) \\ \text{因此有:}& \frac{\partial a^{[l+1]}(x_i,y_i)}{\partial w^{[l],k}}= \sum_{u=0}^p\sum_{v=0}^q\frac{\partial a^{[l+1]}(x_i,y_i)}{\partial a^{[l]}(x_i+u,y_i+v)}\cdot \frac{\partial a^{[l]}(x_i+u,y_i+v)}{\partial w^{[l],k}} \end{aligned} 卷积层:卷积层:因此有:a[l](x1,y1)=f(u=0pv=0qa[l1](x1+u,y1+v)w[l],k(u,v))a[l+1](xi,yi)=f(u=0pv=0qa[l1](xi+u,yi+v)w[l+1],k(u,v))w[l],ka[l+1](xi,yi)=u=0pv=0qa[l](xi+u,yi+v)a[l+1](xi,yi)w[l],ka[l](xi+u,yi+v)

    • 卷积层+全连接层:
      卷积层: a [ l ] ( x 1 , y 1 ) = f ( ∑ u = 0 p ∑ v = 0 q a [ l − 1 ] ( x 1 + u , y 1 + v ) w [ l ] , k ( u , v ) ) 全连接层: a [ l + 1 ] ( x i , y i ) = f ( ∑ u = 0 p ∑ v = 0 q a [ l − 1 ] ( x i + u , y i + v ) w [ l + 1 ] , k ( u , v ) ) 因此有: ∂ a [ l + 1 ] ( x i , y i ) ∂ w [ l ] , k = ∑ u = 0 p ∑ v = 0 q ∂ a [ l + 1 ] ( x i , y i ) ∂ a [ l ] ( x i + u , y i + v ) ⋅ ∂ a [ l ] ( x i + u , y i + v ) ∂ w [ l ] , k \begin{aligned} \text{卷积层:}& a^{[l]}(x_1,y_1)= f\left( \sum_{u=0}^p\sum_{v=0}^qa^{[l-1]}(x_1+u,y_1+v)w^{[l],k}(u,v) \right) \\ \text{全连接层:}& a^{[l+1]}(x_i,y_i)= f\left( \sum_{u=0}^p\sum_{v=0}^qa^{[l-1]}(x_i+u,y_i+v)w^{[l+1],k}(u,v) \right) \\ \text{因此有:}& \frac{\partial a^{[l+1]}(x_i,y_i)}{\partial w^{[l],k}}= \sum_{u=0}^p\sum_{v=0}^q\frac{\partial a^{[l+1]}(x_i,y_i)}{\partial a^{[l]}(x_i+u,y_i+v)}\cdot \frac{\partial a^{[l]}(x_i+u,y_i+v)}{\partial w^{[l],k}} \end{aligned} 卷积层:全连接层:因此有:a[l](x1,y1)=f(u=0pv=0qa[l1](x1+u,y1+v)w[l],k(u,v))a[l+1](xi,yi)=f(u=0pv=0qa[l1](xi+u,yi+v)w[l+1],k(u,v))w[l],ka[l+1](xi,yi)=u=0pv=0qa[l](xi+u,yi+v)a[l+1](xi,yi)w[l],ka[l](xi+u,yi+v)

5.3 LeNet-5 网络

5.3.1 网络介绍

  1. 网络提出

    Gradient-Based Learning Applied to Document Recognition.

    ——Yann LECUN, LEON BOTTOU, YOSHUA BENGIO, PATRICK HAFFNER

  2. 网络结构

    image-20240403135131212

5.3.2 结构详解

  1. C1 层

    • 6 个 Feature map 构成;
    • 每个神经元对输入进行 5 ∗ 5 5*5 55 卷积;
    • 每个神经元对应 5 ∗ 5 + 1 5*5+1 55+1 个参数,共 6 个feature map, 28 ∗ 28 28*28 2828 个神经元,因此共有 ( 5 ∗ 5 + 1 ) ∗ 6 ∗ ( 28 ∗ 28 ) = 122 , 304 (5*5+1)*6*(28*28)=122,304 (55+1)6(2828)=122,304 连接。
  2. S2 层 - Pooling 层(原始论文)

    image-20240403135534534

    • 这一层有 6 个通道;
    • 降采样。
  3. C3 层 - 卷积层

    image-20240403140229415

    • 这一层有 16 个通道;
    • 输出 0 是由输入 0 1 2 的信息卷积获得,输出 1 是由输入1 2 3 的信息获得。
  4. S4 层 - 与 S2 层工作相同

  5. C5 层

    • 120 个神经元;
    • 每个神经元同样对输入进行 5 ∗ 5 5*5 55 卷积,与 S4 全连接;
    • 总连接数 ( 5 ∗ 5 ∗ 16 + 1 ) ∗ 120 = 48120 (5*5*16+1)*120=48120 (5516+1)120=48120
  6. F6 层

    • 84 个神经元;
    • 与 C5 全连接;
    • 总连接数 ( 120 + 1 ) ∗ 84 = 10164 (120+1)*84=10164 (120+1)84=10164
  7. 输出层

    • 由欧氏径向基函数单元构成;
    • 每类一个单元;
    • 输出 RBF 单元计算输入向量和参数向量之间的欧氏距离。
  8. 总结

    image-20240403141438894
    I n → C o n v → P o o l → C o n v → P o o l → F C → F C → S o f t m a x → O u t In \rightarrow Conv \rightarrow Pool \rightarrow Conv \rightarrow Pool \rightarrow FC \rightarrow FC \rightarrow Softmax \rightarrow Out InConvPoolConvPoolFCFCSoftmaxOut

5.3.3 网络说明

  1. 与现在网络的区别

    • 卷积时不进行填充(padding);
    • 池化层选用平均池化而非最大池化;
    • 选用 Sigmoid 或 tanh 而非 ReLU 作为非线性环节激活函数;
    • 层数较浅,参数数量小(约为6万)。
  2. 普遍规律

    • 随网络深入,宽、高衰减,通道数增加

      image-20240403141953467
      n H × n W × n c n_H \times n_W \times n_c nH×nW×nc

  3. 可视化

    • https://adamharley.com/nn_vis/cnn/3d.html

5.3.4 LeNet5 代码实现

  1. 动手学深度学习:https://zh.d2l.ai/chapter_convolutional-neural-networks/lenet.html

  2. 通过下面的 LeNet 代码,可以看出用深度学习框架实现此类模型非常简单。我们只需要实例一个Sequential块并将需要的层连接在一起。

    import torch
    from torch import nn
    from d2l import torch as d2l
    
    net = nn.Sequential(
        nn.Conv2d(1, 6, kernel_size=5, padding=2), nn.Sigmoid(),
        nn.AvgPool2d(kernel_size=2, stride=2),
        nn.Conv2d(6, 16, kernel_size=5), nn.Sigmoid(),
        nn.AvgPool2d(kernel_size=2, stride=2),
        nn.Flatten(),
        nn.Linear(16 * 5 * 5, 120), nn.Sigmoid(),
        nn.Linear(120, 84), nn.Sigmoid(),
        nn.Linear(84, 10))
    
    • 略去了最后一层的高斯激活。

    • nn. Sequential()

      ​ 该函数可以将不同的模块组合成一个新的模块,将各模块按顺序输入即可。

    • nn.AvgPool2d(kernel_size, stride)或MaxPool2d

      ​ 平均池化或最大池化层,输入参数分别为池化窗口大小和步长。二参数同时可以为整数,否则为元组。类似的还有平均池化 nn.AvgPool2d(kernel_size, stride)

    • nn. Sigmoid()

      ​ 该函数为上一层的输出添加 sigmoid 激活函数类似的还有 nn.ReLU()nn.Tanh() 等。

    • nn. Conv2d(in_channels,out_channels,kernel_size)

      ​ 卷积层,其三个参数按顺序代表输入通道数、输出通道数、卷积核大小。若卷积核形状为正方形,则卷积核大小可以为 int ;否则,卷积核大小必须为元组 tuple。

      ​ 如:nn.Conv2d(1, 6, (5, 4)) 即代表卷积核大小为 5 ∗ 4 5*4 54

      除此之外,还有:

      • stride参数:可以规定卷积的步长,与卷积核大小类似,若各方向步长相同则可以为整数,否则应为元组;
      • padding参数:在图像的周围补充0的个数,常常用于控制卷积前后图像的尺寸大小。

5.4 基本卷积神经网络

5.4.1 AlexNet

  1. 网络提出

    ImageNet Classification with Deep Convolutional Neural Networks

    ——Alex Krizhevsky, Ilya Sutskever, Geoffrey E. Hinton

  2. 网络结构

    image-20240403145614018

  3. 网络说明

    • 网络一共有 8 层可学习层 - 5 层卷积层和 3 层全连接层;

    • 改进

      • 池化层均采用最大池化;
      • 选用 ReLU 作为非线性环节激活函数;
      • 网络规模扩大,参数数量接近 6000 万;
      • 出现“多个卷积层 + 一个池化层”的结构。
    • 普遍规律 - 随网络深入,宽、高衰减,通道数增加

      • 左侧 - 连接数,右侧 - 参数

        image-20240403145845780

    • 改进:输入样本

      • 使输入样本变多;

      • 最简单、通用的图像数据变形的方式:【平移变换,crop】从原始图像 ( 255 , 255 ) (255,255) (255,255) 中,随机的 crop 出一些图像 ( 224 , 224 ) (224,224) (224,224);【反射变换,flip】水平反转图像;【光照、彩色变换,color jittering】给图像添加一些随机的光照。

        image-20240403150427540

    • 改进:激活函数

      • 采用 ReLU 替代 Tan Sigmoid;

      • 用于卷积层与全连接层之后。

        image-20240403150542970

    • 改进:Dropout

      • 在每个全连接层后面使用一个 Dropout 层,以概率 p p p 随机关闭激活函数。

        image-20240403150636106

    • 改进:双 GPU 策略

      • AlexNet 使用两块 GTX580 显卡进行训练,两块显卡只需要在特定的层进行通信。

        image-20240403150722458

  4. 可视化

    image-20240403150919923

    在 ILSVRC-2010 上,top-1错误率为 37.5%,top-5 错误率为17.0%。上图是对 96 个 11 ∗ 11 ∗ 3 11*11*3 11113 的卷积核进行可视化。

5.4.2 VGG-16

  1. 可视化:

    image-20240403151019626

    image-20240403151026386

    image-20240403151032390

  2. 网络提出:

    Very Deep Convolutional Networks For Large-Scale Image Recognition

    ——Karen Simonyan, Andrew Zisserman

  3. 网络结构:

    image-20240413114319006

    image-20240413114331758

    image-20240413114350951

  4. 网络说明:

    • 改进:
      • 网络规模进一步增大,参数数量约为 1.38 亿;
      • 由于各卷积层、池化层的超参数基本相同,整体结构呈现出规整的特点。
    • 普遍规律:
      • 随网络深入,高和宽衰减,通道数增多。

5.4.3 残差网络 ResNet

  1. 为什么需要残差网络?

    • 非残差网络的缺陷

      image-20240413114658623

      随着网络层数增加,网络发生了退化现象:随着网络层数的增加,训练集 loss 逐渐下降,然后趋于饱和,再增加网络深度,训练集 loss 反而会增大。注意,这不是过拟合,因为过拟合的训练集 loss 还会一直减小。

    • 残差网络的优势

      image-20240413114727314

    • 梯度消失问题

      image-20240413114831988

      • 这里, w 1 , w 2 , … w_1,w_2,\ldots w1,w2, 是权重,而 b 1 , b 2 , … b_1,b_2,\ldots b1,b2, 是偏置, C C C 是某个代价函数;

      • j j j 个神经元的输出为 a j = σ ( z j ) a_j=\sigma(z_j) aj=σ(zj),其中 σ \sigma σ 是通常的 S 型激活函数,而 z j = w j ∗ a j − 1 + b j z_j=w_j * a_{j-1}+b_j zj=wjaj1+bj 是神经元的带权输入;

      • 代价函数 C C C 是网络输出 a 4 a_4 a4 的函数,如果实际输出越接近目标输出则代价变低,相反则会变高。

      • 第一个隐藏神经元梯度 ∂ C ∂ b 1 \frac{\partial C}{\partial b_1} b1C 的表达式为:
        ∂ C ∂ b 1 = σ ′ ( z 1 ) × w 2 × σ ′ ( z 2 ) × w 3 × σ ′ ( z 3 ) × w 4 × σ ′ ( z 4 ) × ∂ C ∂ a 4 \frac{\partial C}{\partial b_1}= \sigma'(z_1)\times w_2\times \sigma'(z_2)\times w_3\times\sigma'(z_3)\times w_4\times\sigma'(z_4)\times\frac{\partial C}{\partial a_4} b1C=σ(z1)×w2×σ(z2)×w3×σ(z3)×w4×σ(z4)×a4C

      • Sigmoid 函数形为:

        image-20240413115647627

      • 该导数在 σ ′ ( 0 ) = 1 4 \sigma'(0)=\frac{1}{4} σ(0)=41 时达到最高。现在,如果我们使用标准方法来初始化网络中的权重,那么会使用一个均值为 0 0 0 标准差为 1 1 1 的高斯分布。因此所有的权值通常会满足 ∣ w j ∣ < 1 |w_j|<1 wj<1。发现会有 w j σ ′ ( z j ) < 1 4 w_j\sigma'(z_j)<\frac{1}{4} wjσ(zj)<41。并且梯度为这些项的乘积,最终结果肯定会指数级下降:项越多,乘积的下降越快。

  2. 残差网络思想

    • 当网络退化时,浅层网络能够达到比深层网络更好的训练效果,这时如果我们把低层的特征传到高层,那么效果应该至少不比浅层的网络效果差;
    • 或者说如果一个 VGG-100 网络在第 98 层使用的是和 VGG-16 第 14 层一模一样的特征,那么 VGG-100 的效果应该会和 VGG-16 的效果相同。所以,我们可以在 VGG-100 的 98 层和 14 层之间添加一条直接映射(Identity Mapping)来达到此效果。
    • 从信息论的角度讲,由于 DPI(数据处理不等式)的存在,在前向传输的过程中,随着层数的加深,Feature Map 包含的图像信息会逐层减少,而 ResNet 的直接映射的加入,保证了 l + 1 l+1 l+1 层的网络一定比 l l l 层包含更多的图像信息。
  3. 构建残差网络:

    • 残差网络由一系列残差块组成,通过跳跃连接将输入直接添加到层输出上:

      image-20240413130255657

      每个残差快由两个主要部分组成,主路径和捷径:

      image-20240413130232253

      捷径连接:在传统的卷积神经网络中,信息必须从前向后依次通过每个层进行传递并逐渐轻微地改变。而在残差网络中,捷径连接允许信息更快地流动,在不同层之间形成了短路路径:

      image-20240413130301960

    • 对比:
      传统: { z [ l + 1 ] = w [ l + 1 ] a [ l ] + b [ l + 1 ] , a [ l + 1 ] = g [ l + 1 ] ( z [ l + 1 ] ) z [ l + 2 ] = w [ l + 2 ] a [ l + 1 ] + b [ l + 2 ] , a [ l + 2 ] = g [ l + 2 ] ( z [ l + 2 ] ) 残差: { z [ l + 1 ] = w [ l + 1 ] a [ l ] + b [ l + 1 ] , a [ l + 1 ] = g [ l + 1 ] ( z [ l + 1 ] ) z [ l + 2 ] = w [ l + 2 ] a [ l + 1 ] + b [ l + 2 ] , a [ l + 2 ] = g [ l + 2 ] ( a [ l ] + z [ l + 2 ] ) 进一步: { z [ l + 1 ] = w [ l + 1 ] a [ l ] + b [ l + 1 ] , a [ l + 1 ] = g [ l + 1 ] ( z [ l + 1 ] ) z [ l + 2 ] = w [ l + 2 ] a [ l + 1 ] + b [ l + 2 ] , a [ l + 2 ] = g [ l + 2 ] ( w s a [ l ] + z [ l + 2 ] ) \begin{aligned} \text{传统:}&\begin{cases} z^{[l+1]}=w^{[l+1]}a^{[l]}+b^{[l+1]} &,a^{[l+1]}=g^{[l+1]}(z^{[l+1]}) \\ z^{[l+2]}=w^{[l+2]}a^{[l+1]}+b^{[l+2]} &,a^{[l+2]}=g^{[l+2]}(z^{[l+2]}) \end{cases} \\ \text{残差:}&\begin{cases} z^{[l+1]}=w^{[l+1]}a^{[l]}+b^{[l+1]} &,a^{[l+1]}=g^{[l+1]}(z^{[l+1]}) \\ z^{[l+2]}=w^{[l+2]}a^{[l+1]}+b^{[l+2]} &,a^{[l+2]}=g^{[l+2]}(a^{[l]}+z^{[l+2]}) \end{cases} \\ \text{进一步:}&\begin{cases} z^{[l+1]}=w^{[l+1]}a^{[l]}+b^{[l+1]} &,a^{[l+1]}=g^{[l+1]}(z^{[l+1]}) \\ z^{[l+2]}=w^{[l+2]}a^{[l+1]}+b^{[l+2]} &,a^{[l+2]}=g^{[l+2]}(w_sa^{[l]}+z^{[l+2]}) \end{cases} \end{aligned} 传统:残差:进一步:{z[l+1]=w[l+1]a[l]+b[l+1]z[l+2]=w[l+2]a[l+1]+b[l+2],a[l+1]=g[l+1](z[l+1]),a[l+2]=g[l+2](z[l+2]){z[l+1]=w[l+1]a[l]+b[l+1]z[l+2]=w[l+2]a[l+1]+b[l+2],a[l+1]=g[l+1](z[l+1]),a[l+2]=g[l+2](a[l]+z[l+2]){z[l+1]=w[l+1]a[l]+b[l+1]z[l+2]=w[l+2]a[l+1]+b[l+2],a[l+1]=g[l+1](z[l+1]),a[l+2]=g[l+2](wsa[l]+z[l+2])

    • 残差网络:

      image-20240413131204075

      image-20240413131341692

      • 普通网络的基准模型受VGG网络的启发;
      • 卷积层主要有 3 × 3 3×3 3×3 的过滤器,并遵循两个简单的设计规则:(1)对输出特征图的尺寸相同的各层,都有相同数量的过滤器;(2))如果特征图的大小减半,那么过滤器的数量就增加一倍,以保证每一层的时间复杂度相同。
      • ResNet 模型比 VGG 网络更少的过滤器和更低的复杂性。ResNet 具有 34 层的权重层,有 36 亿 FLOPs,只是 VGG-19(19.6 亿 FLOPs)的 18%。
  4. 试验结果图:

    image-20240413131616748

5.5 常用数据集

5.5.1 MNIST 手写数字数据集

  1. 基本信息:

    • MNIST 数据集主要由一些手 写数字的图片和相应的标签组成,图片一共有 10 类,分别对应从 0~9。
    • 由 60000 个训练样本和 10000 个测试样本组成,每个样本都是一张 28 ∗ 28 28*28 2828 像素的灰度手写数字图片。
  2. 数据集文件:

    文件名大小用途
    train-images-idx3-ubyte.gz≈ 9.45 MB训练图像数据
    train-labels-idx1-ubyte.gz≈ 0.03 MB训练图像的标签
    t10k-images-idx3-ubyte.gz≈ 1.57 MB测试图像数据
    t10k-labels-idx1-ubyte.gz≈ 4.4 KB测试图像的标签
  3. 数据集加载:

    def load_data_fashion_mnist(batch_size, resize=None): #@save
    """下载Fashion-MNIST数据集,然后将其加载到内存中。"""
        trans = [transforms.ToTensor()]
        if resize:
        	trans.insert(0, transforms.Resize(resize))
        trans = transforms.Compose(trans)
        mnist_train = torchvision.datasets.FashionMNIST(
        	root="../data", train=True, transform=trans, download=True)
        mnist_test = torchvision.datasets.FashionMNIST(
        	root="../data", train=False, transform=trans, download=True)
        return (data.DataLoader(mnist_train, batch_size, shuffle=True,
        						num_workers=get_dataloader_workers()),
        		data.DataLoader(mnist_test, batch_size, shuffle=False,
        						num_workers=get_dataloader_workers()))
    

5.5.2 Fashion-MNIST 服饰数据集

  • 基本信息:

    • FashionMNIST 是一个替代 MNIST 手写数字集 的图像数据集。它是由 Zalando旗下的研究部门提供,涵盖了来自 10 种类别的共 7 万个不同商品的正面图片。

    • FashionMNIST 的大小、格式和训练集/测试集划分与原始的 MNIST 完全一致。60000/10000 的训练测试数据划分, 28 ∗ 28 28*28 2828 的灰度图片。你可以直接用它来测试你的机器学习和深度学习算法性能,且不需要改动任何的代码。

5.5.3 CIFAR-10 彩色图像数据集

  • 基本信息:
    • CIFAR-10 数据集由 10 个类的 60000 个 32 ∗ 32 32*32 3232 彩色图像组成,每个类有 6000 个图像。有 50000 个训练图像和 10000 个测试图像。
    • 数据集分为五个训练批次和一个测试批次,每个批次有 10000 个图像。测试批次包含来自每个类别的恰好 1000 个随机选择的图像。

5.5.4 PASCAL VOC

  • 基本信息:

    • PASCAL 的全称是 Pattern Analysis, Statistical Modelling and Computational Learning;
    • VOC 的全称是 Visual Object Classes;
    • 目标分类(识别)、检测、分割最常用的数据集之一;
    • 第一届PASCAL VOC举办于2005年,2012年终止,常用的是 PASCAL 2012。
  • 一共分成 20 类:

    • person
    • bird, cat, cow, dog, horse, sheep
    • aeroplane, bicycle, boat, bus, car, motorbike, train
    • bottle, chair, dining table, potted plant, sofa, tv/monitor
  • 文件格式:

    image-20240413135153771

    image-20240413135228889

5.5.5 MS COCO 数据集

  • 基本信息:
    • PASCAL 的全称是 Microsoft Common Objects in Context,起源于微软于 2014 年出资标注的 Microsoft COCO 数据集;
    • 数据集以 scene understanding 为目标,主要从复杂的日常场景中截取;
    • 包含目标分类(识别)、检测、分割、语义标注等数据集;
    • ImageNet 竞赛停办后,COCO 竞赛就成为是当前目标识别、检测等领域的一个最权威、最重要的标杆;
    • 官网:http://cocodataset.org
  • 提供的标注类别有 80 类,有超过 33 万张图片,其中 20 万张有标注,整个数据集中个体的数目超过 150 万个:
    • 人:1类
    • 交通工具:8类,自行车,汽车等
    • 公路常见:5类,信号灯,停车标志等
    • 动物:10类,猫狗等
    • 携带物品:5类,背包,雨伞等
    • 运动器材:10类,飞盘,滑雪板,网球拍等
    • 厨房餐具:7类,瓶子,勺子等
    • 水果及食品:10类
    • 家庭用品:7类,椅子、床,电视等
    • 家庭常见物品:17类,笔记本,鼠标,遥控器等

5.5.6 ImageNet 数据集与 ILSVRC

  • 基本信息:
    • 始于2009年,李飞飞与 Google 的合作:“ImageNet: A Large-Scale Hierarchical Image Database”;
    • 总图像数据:14,197,122;
    • 总类别数:21841;
    • 带有标记框的图像数:1,034,908。
  • ISLVRC 2012 子数据集
    • 训练集:1,281,167张图片+标签;
    • 类别数:1,000;
    • 验证集:50,000张图片+标签;
    • 测试集:100,000张图片。

5.6 总结

  • 经典网络:以“一个或多个卷积层+一个池化层”作为一个基本单元进行堆叠,在网络尾部使用全连接层,最后以 Softmax 为分类器,输出结果。
  • 残差网络:在普通网络的基础上,将浅层的激活项通过支路直接传向深层,克服深层神经网络中梯度消失的问题,为训练极深的神经网络提供便利。
  • 数据集:常见的数据集包括 VOC 和 COCO;ImageNet 较大。
  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值