| |
|
开发:
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)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)) 总结:?
?二、使用块的网络(VGG)
总结:
三、NiN全连接层参数多:导致三个问题:过拟合问题、 内存、计算带宽 LeNet、AlexNet 和 VGG 都有一个共同的设计模式:通过一系列的卷积层与汇聚层来提取空间结构特征;然后通过全连接层对特征的表征进行处理。 AlexNet 和 VGG 对 LeNet 的改进主要在于如何扩大和加深这两个模块。 或者,可以想象在这个过程的早期使用全连接层。 然而,如果使用稠密层了,可能会完全放弃表征的空间结构。?网络中的网络?(NiN) 提供了一个非常简单的解决方案:在每个像素的通道上分别使用多层感知机 。 NiN块卷积层的输入和输出由四维张量组成,张量的每个轴分别对应样本、通道、高度和宽度。 另外,全连接层的输入和输出通常是分别对应于样本和特征的二维张量。 NiN 是在每个像素位置(针对每个高度和宽度)应用一个全连接层。 如果我们将权重连接到每个空间位置,我们可以将其视为?1×1卷积层,或作为在每个像素位置上独立作用的全连接层。 从另一个角度看,即将空间维度中的每个像素视为单个样本,将通道维度视为不同特征。 NiN 块:普通卷积层 + 两个?1×1?的卷积层。这两个1×1?卷积层充当带有 ReLU 激活函数的逐像素全连接层(非线性性)。 第一层的卷积窗口形状通常由用户设置。 随后的卷积窗口形状固定为?1×1。 ? 最大池化层:就是把高宽减半; NiN架构:无全连接层,交替使用NiN块和步幅为2的最大池化层,逐步减小高宽和增大通道数,最后使用全局平均池化层得到输出,其输入通道数是类别数。 总结:
四、批量归一化数据预处理的方式通常会对最终结果产生巨大影响,更深层的网络很复杂,容易过拟合。 批量归一化应用于单个可选层原理如下:在每次训练迭代中,首先归一化输入,即通过减去其均值并除以其标准差,其中两者均基于当前小批量处理。 接下来,应用比例系数和比例偏移。 ? · 可学习的参数为y和β · 作用在
· 对全连接层,作用在特征维 · 对于卷积层,作用在通道维 ?总结:
五、残差网络(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 每个卷积层后增加了批量归一化层。 总结:
猫狗大战迁移学习是指将模型在目标数据集之外的数据集上进行与训练,再将预训练好的模型在目标数据集上训练。可以看作一种更有效的模型初始化方法,相较于随机初始化。一般来讲,预训练的数据集要远大于目标数据集,并且二者尽可能类似。 正在学习老师用VGG迁移学习的代码,试着套用ResNet进行分类。 感受最近又因为上课和各种琐事,无法静下来学习,时间完全不够用,接下来的一周要多挤时间在学习深度学习的课程上,赶赶进度。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |