IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 第四周作业:卷积神经网络(part 2) -> 正文阅读

[人工智能]第四周作业:卷积神经网络(part 2)

目录

一、深度卷积神经网络(AlexNet)

?二、使用块的网络(VGG)

三、NiN

NiN块

四、批量归一化

五、残差网络(ResNet)

ResNet模型

猫狗大战

感受


一、深度卷积神经网络(AlexNet)

AlexNet使用了8层卷积神经网络, 赢得了2012年ImageNet图像识别挑战赛。AlexNet和LeNet的架构非常相似,但有区别:

1. AlexNet比相对较小的LeNet5要深得多。 AlexNet由八层组成:五个卷积层、两个全连接隐藏层和一个全连接输出层。

2. AlexNet使用ReLU而不是sigmoid作为其激活函数。

3. 新加入了Dropout、预处理、最大池化层。

AlexNet通过dropout控制全连接层的模型复杂度,而LeNet只使用了权重衰减。

import torch
from torch import nn
from d2l import torch as d2l

net = nn.Sequential(
    # 这里,使用一个11*11的更大窗口来捕捉对象。
    # 同时,步幅为4,以减少输出的高度和宽度。
    # 另外,输出通道的数目远大于LeNet
    nn.Conv2d(1, 96, kernel_size=11, stride=4, padding=1), nn.ReLU(),
    nn.MaxPool2d(kernel_size=3, stride=2),
    # 减小卷积窗口,使用填充为2来使得输入与输出的高和宽一致,且增大输出通道数
    nn.Conv2d(96, 256, kernel_size=5, padding=2), nn.ReLU(),
    nn.MaxPool2d(kernel_size=3, stride=2),
    # 使用三个连续的卷积层和较小的卷积窗口。
    # 除了最后的卷积层,输出通道的数量进一步增加。
    # 在前两个卷积层之后,汇聚层不用于减少输入的高度和宽度
    nn.Conv2d(256, 384, kernel_size=3, padding=1), nn.ReLU(),
    nn.Conv2d(384, 384, kernel_size=3, padding=1), nn.ReLU(),
    nn.Conv2d(384, 256, kernel_size=3, padding=1), nn.ReLU(),
    nn.MaxPool2d(kernel_size=3, stride=2),
    nn.Flatten(),
    # 这里,全连接层的输出数量是LeNet中的好几倍。使用dropout层来减轻过度拟合
    nn.Linear(6400, 4096), nn.ReLU(),
    nn.Dropout(p=0.5),
    nn.Linear(4096, 4096), nn.ReLU(),
    nn.Dropout(p=0.5),
    # 最后是输出层。
    nn.Linear(4096, 10))

总结:?

  • AlexNet的结构与LeNet相似,但使用了更多的卷积层和更多的参数来拟合大规模的ImageNet数据集。

  • Dropout、ReLU和数据预处理。

?二、使用块的网络(VGG)

  • 与 AlexNet、LeNet 一样,VGG 网络可以分为两部分:第一部分主要由卷积层和汇聚层组成,第二部分由全连接层组成。

  • 不同的 VGG 模型可通过每个块中卷积层数量和输出通道数量的差异来定义。

  • 块的使用导致网络定义的非常简洁。使用块可以有效地设计复杂的网络。

  • 在VGG论文中,发现深层且窄的卷积(即3×3)比较浅层且宽的卷积更有效。

总结:

  • VGG使用可重复使用的卷积块来构建深度卷积神经网络
  • 不同卷积块个数和超参数可以得到不同复杂度的变种

三、NiN

全连接层参数多:导致三个问题:过拟合问题、 内存、计算带宽

LeNet、AlexNet 和 VGG 都有一个共同的设计模式:通过一系列的卷积层与汇聚层来提取空间结构特征;然后通过全连接层对特征的表征进行处理。 AlexNet 和 VGG 对 LeNet 的改进主要在于如何扩大和加深这两个模块。 或者,可以想象在这个过程的早期使用全连接层。 然而,如果使用稠密层了,可能会完全放弃表征的空间结构。?网络中的网络?(NiN) 提供了一个非常简单的解决方案:在每个像素的通道上分别使用多层感知机 。

NiN块

卷积层的输入和输出由四维张量组成,张量的每个轴分别对应样本、通道、高度和宽度。 另外,全连接层的输入和输出通常是分别对应于样本和特征的二维张量。 NiN 是在每个像素位置(针对每个高度和宽度)应用一个全连接层。 如果我们将权重连接到每个空间位置,我们可以将其视为?1×1卷积层,或作为在每个像素位置上独立作用的全连接层。 从另一个角度看,即将空间维度中的每个像素视为单个样本,将通道维度视为不同特征。

NiN 块:普通卷积层 + 两个?1×1?的卷积层。这两个1×1?卷积层充当带有 ReLU 激活函数的逐像素全连接层(非线性性)。 第一层的卷积窗口形状通常由用户设置。 随后的卷积窗口形状固定为?1×1。

?

最大池化层:就是把高宽减半;

NiN架构:无全连接层,交替使用NiN块和步幅为2的最大池化层,逐步减小高宽和增大通道数,最后使用全局平均池化层得到输出,其输入通道数是类别数。

总结:

  • NiN使用由一个卷积层和多个?1×1 卷积层组成的块。该块可以在卷积神经网络中使用,以允许更多的每像素非线性。

  • NiN去除了容易造成过拟合的全连接层,将它们替换为全局平均汇聚层(即在所有位置上进行求和)。该汇聚层通道数量为所需的输出数量。

  • 移除全连接层可减少过拟合,同时显著减少NiN的参数。

四、批量归一化

数据预处理的方式通常会对最终结果产生巨大影响,更深层的网络很复杂,容易过拟合。

批量归一化应用于单个可选层原理如下:在每次训练迭代中,首先归一化输入,即通过减去其均值并除以其标准差,其中两者均基于当前小批量处理。 接下来,应用比例系数和比例偏移。

?

· 可学习的参数为y和β

· 作用在

  • 全连接层和卷积层输出上,激活函数前
  • 全连接层和卷积层输入上

· 对全连接层,作用在特征维

· 对于卷积层,作用在通道维

?总结:

  • 在模型训练过程中,批量归一化利用小批量的均值和标准差,不断调整神经网络的中间输出,使整个神经网络各层的中间输出值更加稳定。

  • 批量归一化在全连接层和卷积层的使用略有不同。

  • 批量归一化层和 dropout 层一样,在训练模式和预测模式下计算不同。

五、残差网络(ResNet)

残差网络的核心思想是:每个附加层都应该更容易地包含原始函数作为其元素之一。

残差块:

原始输入为?x?,希望学出的理想映射为f(x)?。左图虚线框中的部分需要直接拟合出该映射f(x)?,而右图虚线框中的部分则需要拟合出残差映射 f(x)?x?。 将右图虚线框内上方的加权运算的权重和偏置参数设成 0,那么f(x)?即为恒等映射。 右图是 ResNet 的基础结构?残差块(residual block)。 在残差块中,输入可通过跨层数据线路更快地向前传播。

?

?一个正常块(左图)和一个残差块(右图)

ResNet 沿用了 VGG 完整的 3×3?卷积层设计。 残差块里首先有 2 个有相同输出通道数的3×3?卷积层。 每个卷积层后接一个批量归一化层和 ReLU 激活函数。 然后通过跨层数据通路,跳过这 2 个卷积运算,将输入直接加在最后的 ReLU 激活函数前。 因此要求 2 个卷积层的输出与输入形状一样,从而可以相加。 如果想改变通道数,就需要引入一个额外的1×1?卷积层来将输入变换成需要的形状后再做相加运算。 残差块的实现如下:

import torch
from torch import nn
from torch.nn import functional as F
from d2l import torch as d2l


class Residual(nn.Module):  #@save
    def __init__(self, input_channels, num_channels,
                 use_1x1conv=False, strides=1):
        super().__init__()
        self.conv1 = nn.Conv2d(input_channels, num_channels,
                               kernel_size=3, padding=1, stride=strides)
        self.conv2 = nn.Conv2d(num_channels, num_channels,
                               kernel_size=3, padding=1)
        if use_1x1conv:
            self.conv3 = nn.Conv2d(input_channels, num_channels,
                                   kernel_size=1, stride=strides)
        else:
            self.conv3 = None
        self.bn1 = nn.BatchNorm2d(num_channels)
        self.bn2 = nn.BatchNorm2d(num_channels)
        self.relu = nn.ReLU(inplace=True)

    def forward(self, X):
        Y = F.relu(self.bn1(self.conv1(X)))
        Y = self.bn2(self.conv2(Y))
        if self.conv3:
            X = self.conv3(X)
        Y += X
        return F.relu(Y)

ResNet模型

ResNet 的前两层: 在输出通道数为 64、步幅为 2 的7×7?卷积层后,接步幅为 2 的 3×3?的最大汇聚层。 ResNet 每个卷积层后增加了批量归一化层。

总结:

  • 残差映射可以更容易地学习同一函数,例如将权重层中的参数近似为零。

  • 利用残差块可以训练出一个有效的深层神经网络:输入可以通过层间的残余连接更快地向前传播。

  • 残差网络(ResNet)对随后的深层神经网络设计产生了深远影响,无论是卷积类网络还是全连接类网络。?

猫狗大战

迁移学习是指将模型在目标数据集之外的数据集上进行与训练,再将预训练好的模型在目标数据集上训练。可以看作一种更有效的模型初始化方法,相较于随机初始化。一般来讲,预训练的数据集要远大于目标数据集,并且二者尽可能类似。

正在学习老师用VGG迁移学习的代码,试着套用ResNet进行分类。

感受

最近又因为上课和各种琐事,无法静下来学习,时间完全不够用,接下来的一周要多挤时间在学习深度学习的课程上,赶赶进度。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-27 14:05:27  更:2021-09-27 14:07:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 12:57:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码