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

news2024/9/27 5:54:39

一、线性代数知识

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.coloradmin.cn/o/1364245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cube生成电机库,启用了RTOS,编译报错[0xc43ed8:5050106] in osSignalWait

cube生成电机库,启用了RTOS,编译报错[0xc43ed8:5050106,解决办法] in osSignalWait 1.现象 编译报错[0xc43ed8:5050106] in osSignalWait 导致链接失败 2.解决办法 将keil5的版本升级到5.18.00,我的版本也是5.14.00。

我的第一个前端项目,vue项目从零开始创建和运行

​入门前端,从基础做起,从零开始新建项目 背景:VUE脚手架项目是一个“单页面”应用,即整个项目中只有1个网页! 在VUE脚手架项目中,主要是设计各个“视图组件”,它们都是整个网页中某个部分&…

Python如何生成个性二维码

Python-生成个性二维码 一、问题描述 通过调用MyQR模块来实现生成个人所需二维码。 安装: pip install myqr 二、代码实现 1.普通二维码 from MyQR import myqr # 普通二维码 myqr.run(wordshttp://www.csdn.net/mayi0312,save_nameqrcode.png ) 效果图&#…

学习录

概述 这几年在迷茫中看了不少资料,有觉得写得很棒的,也有写的很糟糕的。所以一直想写这块的总结来进行归纳,同时也希望能给其他处于迷茫中的朋友提供一份高质量的资料列表(也许一个读者也没有),以下清单个人觉得值得反复看以及思…

利用ChatGLM3构建Prompt实现Text2SQL

之前使用ChatGLM3的自定义工具实现了查询MySQL数据库,但感觉功能还是比较受限。 https://blog.csdn.net/weixin_44455388/article/details/135270879?spm1001.2014.3001.5501 使用ChatGLM3实现Text2SQL 前言Text2SQL的构建第一阶段:SQL脚本构建&#xf…

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

File: rust/compiler/rustc_middle/src/middle/exported_symbols.rs 在Rust的源代码中,rust/compiler/rustc_middle/src/middle/exported_symbols.rs文件的作用是实现编译器中处理导出符号的功能。 该文件中定义了一些结构体和枚举,用于描述导出符号的信…

MySQL 存储引擎和索引类型介绍

1. 引言 MySQL 是一个流行的关系型数据库管理系统,提供多种存储引擎以满足不同的业务需求。本文将介绍几种常见的 MySQL 存储引擎和索引类型比较,并给出相应的示例。 2. 存储引擎概述 2.1 InnoDB 存储引擎 InnoDB 是 MySQL 的默认存储引擎&#xff0…

向量数据库:usearch的简单使用+实现图片检索应用

usearch的简单使用 usearch是快速开源搜索和聚类引擎,用于C、C、Python、JavaScript、Rust、Java、Objective-C、Swift、C#、GoLang和Wolfram 🔍中的向量和🔜字符串 // https://github.com/unum-cloud/usearch/blob/main/python/README.md …

解决ImportError: Failed to import test module: sys.__init__

解决ImportError: Failed to import test module: sys.init 背景 学习通过文件夹执行测试脚本时,出现了错误:ImportError: Failed to import test module: sys.__init__ 解决过程 根据报错信息:sys is not a package大胆猜测可能是文件名…

【MySQL】数据库之MMM高可用

目录 一、什么是MMM 二、关于MMM架构的说明 三、实操MMM的高可用 步骤一:完成主主复制、主从复制 步骤二:所有节点服务器都安装mysql-mmm,并完成mmm_common.conf文件的配置 步骤三:完成monitor节点服务器的配置文件修改mmm_mon.conf 步…

SpringCloud系列篇:入门讲解Spring Cloud是什么

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于SpringCloud的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.Spring Cloud是什么 二.Spring …

家里有必要买NAS吗?

完全没有必要,因为用旧电脑搭建NAS不仅价格实惠,而且非常简单,效果也完全不差买了的! 并且......还环保 教程链接: 用旧电脑搭建NAS在您的家庭中,通过将旧 PC 转变为NAS服务器,您可以轻松搭建…

Ubuntu 虚拟机挂接 Windows 目录

Windows 共享目录 首先 Windows 下共享目录 我这里偷懒直接直接 Everyone ,也可以指定用户啥的 Ubuntu 挂接 挂接命令,类似如下: sudo mount -o usernamefananchong,passwordxxxx,uid1000,gid1000,file_mode0644,dir_mode0755,dynperm //…

04set注入专题/简单类型/数组/List/Set/Map/空字符串/null/特殊符号

1.1注入外部Bean 在之前使用的案例就是注入外部Bean的方式。 <!-- class属性声明要管理哪个类中的对象 property标签的name是提示set方法名ref标签指明注入的bean的id--><bean id"userServiceBean" class"com.powernode.spring6.service.UserService…

WorkPlus支持平台级定制,助理企业自主掌控业务和生态

在数字化时代&#xff0c;企业越来越需要满足自身特性和需求的定制化解决方案。WorkPlus不同于企业微信、钉钉和飞书&#xff0c;它支持平台级的定制服务&#xff0c;完全掌控自身数字化进程。WorkPlus可根据企业的安全特性、强可控要求和高定制化场景&#xff0c;提供原厂平台…

基于 HTTPS 协议配置 Git 连接 GitHub

文章目录 0.安装 Git1.注册 GitHub 账号2.配置 Git 的用户名和邮箱3.远程连接 GitHub 有两种传输协议4.基于 SSH 协议配置 Git 连接 GitHub5.基于 HTTPS 协议配置 Git 连接 GitHub5.1 创建 GitHub 个人访问令牌5.2 有两种方法将本地仓库和远程仓库关联起来5.2.1 第一种方法&…

位运算--二进制中1的个数(含常见的二进制运算操作)

目录 二进制中1的个数操作 1 查看第k位的数字是否为1操作2 lowbit操作 解题代码&#xff1a; 原题链接: 二进制中1的个数 给定一个长度为 n 的数列&#xff0c;请你求出数列中每个数的二进制表示中 1 的个数。 输入格式 第一行包含整数 n 。 第二行包含 n 个整数&#xff0c…

Turn.js 实现翻书效果

接到了任务&#xff0c;要把孩子画的画放到网页上去&#xff0c;翻页效果还要逼真一点。搜索到了turn.js这个前端翻页组件&#xff0c;效果不错。先上图看效果。 网页实际效果&#xff1a;星月夜诗集 turn.js的官网地址&#xff1a;Turn.js: The page flip effect in HTML5 …

STM32_HAL Freertos按键控制LED

设置GPIO引脚 根据电路图&#xff0c;K0为用户按键&#xff0c;连接在PA0引脚&#xff0c;当K0按下时接地&#xff0c;引脚电平低电平。在CubeMX中设置PA0&#xff0c;将IO设置为输入&#xff0c;上拉&#xff08;上拉外部悬空时&#xff0c;引脚为高电平&#xff09;。 添…

【Linux】Linux基础之权限

目录 一、Linux中的用户1.1 用户之间的身份切换1.2 指令提权 二、权限管理2.1 文件权限2.2 权限操作2.3 chown和chgrp 三、文件类型四、目录文件的权限操作五、权限掩码六、粘滞位 一、Linux中的用户 Linux中主要有两种用户&#xff1a; root&#xff0c;超级用户非root&…