李沐-《动手学深度学习》-- 01-预备知识

一、线性代数知识

1. 矩阵计算

a. 矩阵求导

​ 当y和x分别为标量和向量时候,进行求导得到的矩阵形状矩阵求导就是矩阵A中的每一个元素对矩阵B中的每一个元素求导

​ 梯度指向的是值变化最大的方向
在这里插入图片描述

分子布局和分母布局:

b. 常识

  • axis = 1 代表行 axis = 0 代表列
  • nn.model.eval() 将模型设置为评估模式,只输入数据然后得出结果而不会做反向传播
  • xxx_下划线在后面的函数代表替换函数,不是返回一个值,而是直接替换
  • 介绍:Pytorch 中的 model.apply(fn) 会递归地将函数 fn 应用到父模块的每个子模块以及model这个父模块自身。通常用于初始化模型的参数。
  • torch.stack函数,对张量进行堆叠升维度
  • **python.zip(x,x)**函数:参数是两个可以迭代的变量,返回两个变量对应的一个元组

二、感知机

1. 概念

​ 感知机是一个二分类模型,是最早的AI模型之一;他的求解算法等价于使用批量大小为1的梯度下降;他不能拟合XOR函数,导致第一次AI寒冬。目的是拟合一条线将数据集分成两部分,如果不能找到一条线将数据集分成两部分,则无法用一层感知机做到

2. 多层感知机

​ 如果需要拟合复杂的模型,则需要连接多层的神经网络。使用hidden layer和激活函数来得到非线性模型

a. 激活函数

​ 多个神经网络层连接时,两个层之间需要激活函数,如果没有激活函数,则会变成单层的感知机。

在这里插入图片描述

种类: sigmoid,Tanh,ReLU,softmax(多类)

3. 模型选择&过拟合欠拟合(p11)

a.训练误差和泛化误差

  • 训练误差:模型在训练数据上的误差
  • 泛化误差:模型在新数据上的误差
  • **参数&超参数:**区别两个最大的特点就是数据是否通过数据来进行调整,例如学习率就是人为设置的,而w&b是数据进行驱动的数据
  • **验证集&训练集&测试集:**如果需要选择使用哪一组参数合适的时候,可以用到验证集;

b. 估计模型容量

在这里插入图片描述

4 .防止过拟合和欠拟合

1. 权重衰退(weight decay)

权重衰退最常见处理过拟合的方法

在这里插入图片描述
(不常用的方法)

最常用的方法:

在这里插入图片描述

2 . Dropout(暂退法)

在这里插入图片描述
在dropout当中,有一些输入是需要等于0暂时舍去的,还有一些是需要放大,然后使最后的期望不变

**注意:**dropout是在做模型推理的时候使我们的模型复杂度变低,但是在使用做预测或者测试时候是没有使用dropout的

a.技巧

我们可以将暂退法应用于每个隐藏层的输出(在激活函数之后), 并且可以为每一层分别设置暂退概率: 常见的技巧是在靠近输入层的地方设置较低的暂退概率

5 . 模型初始化和激活函数

**目标:**让梯度值在合理的范围内

方法:

  • 将乘法变加法 ResNet, LSTM
  • 归一化 :梯度归一化 梯度裁剪
  • 合理的权重初始化和激活函数

三、Pytorch神经网络

1 . 卷积层

a . 卷积层作用

  • 卷积层将输入和核矩阵进行交叉相关运算,加上偏移后得到输出
  • 核矩阵和偏移是可学习的参数
  • 核矩阵的大小是超参数

b . 学习卷积核参数

如果我们想达到某种效果(边缘检测,模糊),但是不知道怎么设置kernel参数时,可以从数据中使用梯度下降学习卷积核的参数。(需要提前给出 Y的正确值,然后一直梯度下降)

c . 二维卷积层

在这里插入图片描述

d . 1 x 1 卷积

​ 卷积使用了最小窗口,失去了卷积层特有的识别相邻元素相互作用的能力,使之作用在通道上。

  • 1×1卷积层通常用于调整网络层的通道数量和控制模型复杂性。

e . 池化层(pooling)

  • 对于给定输入元素,最大汇聚层会输出该窗口内的最大值,平均汇聚层会输出该窗口内的平均值。
  • 汇聚层的主要优点之一是减轻卷积层对位置的过度敏感。
  • 我们可以指定汇聚层的填充和步幅。使用最大汇聚层以及大于1的步幅,可减少空间维度(如高度和宽度)。
  • 汇聚层的输出通道数与输入通道数相同。且一般放在卷积层的最后

四 .经典CNN网络

1 .LeNet 神经网络

在这里插入图片描述

a .总结

  • 卷积神经网络(CNN)是一类使用卷积层的网络。
  • 在卷积神经网络中,我们组合使用卷积层、非线性激活函数和汇聚层。
  • 为了构造高性能的卷积神经网络,我们通常对卷积层进行排列,逐渐降低其表示的空间分辨率,同时增加通道数。
  • 在传统的卷积神经网络中,卷积块编码得到的表征在输出之前需由一个或多个全连接层进行处理。
  • LeNet是最早发布的卷积神经网络之一。

2 . AlexNet

a. 框架

在这里插入图片描述

b . 总结


在这里插入图片描述

3 . VGG块

​ 将AlexNet的中间的卷积层抽出来,然后复制几份替代掉了AlexNet的前面几层不规则的卷积层,可以称为更大更深的AlexNet网络

在这里插入图片描述

a . 总结

在这里插入图片描述

4 . NiN块

​ 实质:将最后的全连接层用1*1的卷积来替换

a . 与前三个的区别:

在这里插入图片描述

5 . GoogLeNet

和vgg一样有5个block,这里用的是Inception

a . Inception

在这里插入图片描述

Inception 变种

在这里插入图片描述

b . stage 1&2与AlexNet区别

在这里插入图片描述

c . stage 3

d , stage 4 & 5

在这里插入图片描述

e . 总结

在这里插入图片描述

6 . 批量归一化(batch normalization)

a . 思想

方差和均值在不同层之间会变化,批量归一化就是在每一层的输出作为下一层输入时候进行归一化,使值固定在一个范围内,然后相对比较稳定

b . 总结

  • 在模型训练过程中,批量规范化利用小批量的均值和标准差,不断调整神经网络的中间输出,使整个神经网络各层的中间输出值更加稳定。
  • 可以加速收敛速度,但一般不改变模型精度
  • 批量规范化在全连接层和卷积层的使用略有不同。
  • 批量规范化层和暂退层一样,在训练模式和预测模式下计算不同。
  • 批量规范化有许多有益的副作用,主要是正则化。另一方面,”减少内部协变量偏移“的原始动机似乎不是一个有效的解释。

7 . ResNet

a. 思想

​ 一味的增加模型复杂度不一定能减少到最优解的距离,可能新加的层学习的方向偏了。所以ResNet想办法是每一次更复杂的模型是会包含原来的小模型作为子模型,所以至少不会变差使得可以训练更深的网络

b . residual block(残差块)

在这里插入图片描述

c . 处理梯度消失

​ 1000层的ResNet怎么处理梯度消失,将层与层之间的梯度的乘法变成梯度之间的加法

d . bottleneck(瓶颈)

在这里插入图片描述

如果处理更深的网络,则处理的通道数会增加,然后这里先用一维卷积降低通道数,然后继续卷积提取特征,最后再通过一维卷积升通道数,这样降低了运算的复杂度

8 . 数据增强

​ 将原始的数据进行变换(截取部分图片,对图片进行颜色变换等方法),得到了更多的样本,可以在更多的场景下识别目标

a . 常见的方法

  • 上下翻转
  • 切割
  • 改变颜色

9 . 微调

在自己的模型训练开始时候,参数的初始化不是随机的初始化,而是调用的源数据集(更大的数据集)训练好了的参数

  • 可以使用更小的学习率
  • 更少的数据迭代
  • 源数据集远复杂与目标数据集,微调效果更好
  • 预训练模型质量很重要
  • 微调通常速度更快,精度更高

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/327016.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis分页插件PageHelper的配置和使用

文章目录 每页10条记录,取第一页,返回的是前10条记录每页10条记录,取第二页,返回的是第11条记录,到第20条记录, MySQL对分页的支持 简单来说MySQL对分页的支持是通过limit子句。请看下面的例子。 limit关键…

听GPT 讲Rust源代码--compiler(26)

File: rust/compiler/rustc_target/src/abi/call/mips.rs 在Rust源代码中的rust/compiler/rustc_target/src/abi/call/mips.rs文件是关于MIPS架构的函数调用ABI(Aplication Binary Interface)定义。ABI是编程语言与底层平台之间的接口规范,用于定义函数调用、参数传…

【Python学习】Python学习4-运算符

目录 【Python学习】Python学习4-运算符 前言算术运算符比较(关系)运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符运算符优先级参考 文章所属专区 Python学习 前言 本章节主要说明Python的运算符。主要有 算术运算符 比较(关系&…

智慧地球(AI•Earth)社区成立一周年啦!独家福利与惊喜彩蛋等你来拿!

原文:智慧地球(AI•Earth)社区成立一周年啦! 智慧地球社区 一周年庆典🎊 独家福利🎁与惊喜彩蛋🎉等你来拿! 智慧地球(AI•Earth)社区自2023年1月11日建立以…

如何计算CAN通信波特率

目录 1、理论 2、实践 3、注意事项 在CAN总线系统中,波特率的计算是一个关键步骤,它确保网络上的所有设备能够以相同的速率进行通信。 1、理论 波特率的计算涉及到几个关键参数,包括CAN控制器的时钟频率、分频因子、以及位时间的不同部分…

[HCTF 2018]Warmup

[HCTF 2018]Warmup wp 进入页面&#xff1a; 查看源码&#xff1a; 发现提示&#xff1a;source.php &#xff0c;直接访问&#xff0c;得到源代码&#xff1a; <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist [&qu…

WSL使用VsCode运行cpp文件

文章目录 缘起主要步骤参考 缘起 今天在阅读《C20设计模式-可复用的面向对象设计方法&#xff08;原书第2版&#xff09;》的时候&#xff0c;遇到代码想要运行一下&#xff0c;于是决定使用wsl下的vscode配置cpp的环境。 主要步骤 1.安装gcc和g编译器 打开命令行输入wsl&am…

Js的$如同 sed的 java的$0 指代matcher匹配到的内容的符号

Js的$&如同 sed的& java的$0 $& 可用于Js,Vscode,RJTextEd,editplus,notepad, 在 Vscode,RJTextEd,editplus,notepad,等的替换中, 启用正则, 就能使 $&生效, 比如 ($&)表示给匹配到的内容加上括号 $& 可用于Js的String的replace(和replaceAll( 的第二…

RedisInsight - Redis官方可视化工具

一、RedisInsight 简介 RedisInsight 是一个直观高效的 Redis GUI 管理工具&#xff0c;它可以对 Redis 的内存、连接数、命中率以及正常运行时间进行监控&#xff0c;并且可以在界面上使用 CLI 和连接的 Redis 进行交互&#xff08;RedisInsight 内置对 Redis 模块支持&#…

CodeWave智能开发平台--03--目标:应用创建--04自定义主题样式5子页面页面跳转逻辑

摘要 本文是网易数帆CodeWave智能开发平台系列的第07篇&#xff0c;主要介绍了基于CodeWave平台文档的新手入门进行学习&#xff0c;实现一个完整的应用&#xff0c;本文主要完成04自定义主题样式5子页面页面跳转逻辑 参考:新手训练营-PC端应用 CodeWave智能开发平台的07次接…

金和OA C6 MailTemplates.aspx SQL注入漏洞复现

0x01 产品简介 金和OA协同办公管理系统软件(简称金和OA),本着简单、适用、高效的原则,贴合企事业单位的实际需求,实行通用化、标准化、智能化、人性化的产品设计,充分体现企事业单位规范管理、提高办公效率的核心思想,为用户提供一整套标准的办公自动化解决方案,以帮助…

优化|PLSA理论与实践

PLSA又称为概率潜在语义分析&#xff0c;是一种利用概率生成模型对文本集合进行话题分析的无监督学习方法。该模型最大的特点是加入了主题这一隐变量&#xff0c;文本生成主题&#xff0c;主题生成单词&#xff0c;从而得到单词-文本共现矩阵。本文将对包含物理学、计算机科学、…