快速入门深度学习1(用时1h)
速通《动手学深度学习》1
- 写在最前面
- 0.内容与结构
- 1.深度学习简介
- 1.1 问题引入
- 1.2 思路:逆向思考
- 1.3 跳过
- 1.4 特点
- 1.5 小结
- 2.预备知识(MXNet版本,学错了。。。。)
- 2.1 获取和运行本书的代码
- 2.2 数据操作
- 2.2.1 略过
- 2.2.2 小结
- 2.3 自动求梯度
- 2.3.1 简单例子
- 2.3.2 训练模式和预测模式
- 2.3.3 对Python控制流求梯度
- 2.3.4. 小结
- 2.4. 查阅文档(跳过)
写在最前面
之前计划一天看一点,还是高估了自己,断断续续的看到啥时候去了,干脆花一天快速入门
学习资料(《动手学深度学习》文档):http://zh.gluon.ai/chapter_how-to-use/how-to-use.html
0.内容与结构
最基础的概念和技术:第1章至第3章
现代深度学习技术:第4章至第6章
根据兴趣选择阅读:第7章至第10章

1.深度学习简介
1.1 问题引入
问题:判断图片是否有猫
简化:
① 假设所有图像的高和宽都是同样的400像素大小,一个像素由红绿蓝三个值构成,那么一张图像就由近50万个数值表示。
② 哪些数值隐藏着我们需要的信息呢?是所有数值的平均数,还是四个角的数值,抑或是图像中的某一个特别的点?
③ 事实上,要想解读图像中的内容,需要寻找仅仅在结合成千上万的数值时才会出现的特征,如边缘、质地、形状、眼睛、鼻子等,最终才能判断图像中是否有猫。
1.2 思路:逆向思考
与其设计一个解决问题的程序,不如从最终的需求入手来寻找一个解决方案。
机器学习和深度学习应用共同的核心思想:“用数据编程”。
收集一些已知包含猫与不包含猫的真实图像
目标:转化成如何从这些图像入手,得到一个可以推断出图像中是否有猫的函数。
这个函数的形式通常通过我们的知识来针对特定问题选定。
例如,我们使用一个二次函数来判断图像中是否有猫,但是像二次函数系数值这样的函数参数的具体值则是通过数据来确定。
机器学习:一门讨论各式各样的适用于不同问题的函数形式,以及如何使用数据来有效地获取函数参数具体值的学科。
深度学习:机器学习中的一类函数,它们的形式通常为多层神经网络,复杂高维度数据的主要方法。
1.3 跳过
起源、发展、成功案例
1.4 特点
机器学习:研究如何使计算机系统利用经验改善性能。表征学习关注如何自动找出表示数据的合适方式,以便更好地将输入变换为正确的输出
深度学习:具有多级表示的表征学习方法。在每一级(从原始数据开始),深度学习通过简单的函数将该级的表示变换为更高级的表示。
可以看作是由许多简单函数复合而成的函数。当这些复合的函数足够多时,深度学习模型就可以表达非常复杂的变换。
深度学习可以逐级表示越来越抽象的概念或模式。
以图像为例,它的输入是一堆原始像素值。深度学习模型中,图像可以逐级表示为特定位置和角度的边缘、由边缘组合得出的花纹、由多种花纹进一步汇合得到的特定部位的模式等。
最终,模型能够较容易根据更高级的表示完成给定的任务,如识别图像中的物体。
值得一提的是,作为表征学习的一种,深度学习将自动找出每一级表示数据的合适方式。
因此,深度学习的一个外在特点是端到端的训练。也就是说,并不是将单独调试的部分拼凑起来组成一个系统,而是将整个系统组建好之后一起训练。
自动优化的逐级过滤器。
从含参数统计模型转向完全无参数的模型。
当数据非常稀缺时,需要通过简化对现实的假设来得到实用的模型。
当数据充足时,能更好地拟合现实的无参数模型来替代这些含参数模型。可以得到更精确的模型,尽管需要牺牲一些可解释性。
深度学习:对非最优解的包容、对非凸非线性优化的使用,以及勇于尝试没有被证明过的方法。
1.5 小结
机器学习研究如何使计算机系统利用经验改善性能。它是人工智能领域的分支,也是实现人工智能的一种手段。
作为机器学习的一类,表征学习关注如何自动找出表示数据的合适方式。
深度学习是具有多级表示的表征学习方法。它可以逐级表示越来越抽象的概念或模式。
深度学习使用场景:虽有许多展示如何解决问题的样例,但缺少自动解决问题的算法
2.预备知识(MXNet版本,学错了。。。。)
2.1 获取和运行本书的代码
http://zh.gluon.ai/chapter_prerequisite/install.html
2.2 数据操作
2.2.1 略过
基础的python,略过
http://zh.gluon.ai/chapter_prerequisite/ndarray.html
2.2.1. 创建NDArray
之前创建的向量和矩阵都是特殊的张量
2.2.2. 运算
2.2.3. 广播机制
当对两个形状不同的NDArray按元素运算时,可能会触发广播(broadcasting)机制:先适当复制元素使这两个NDArray形状相同后再按元素运算。
解析:由于A和B分别是3行1列和1行2列的矩阵,如果要计算A + B,那么A中第一列的3个元素被广播(复制)到了第二列,而B中第一行的2个元素被广播(复制)到了第二行和第三行。如此,就可以对2个3行2列的矩阵按元素相加。
A[[0.][1.][2.]]<NDArray 3x1 @cpu(0)>B[[0. 1.]]<NDArray 1x2 @cpu(0)>A + B
[[0. 1.][1. 2.][2. 3.]]
<NDArray 3x2 @cpu(0)>
2.2.4. 索引
2.2.5. 运算的内存开销
Python自带的id函数:如果两个实例的ID一致,那么它们所对应的内存地址相同;反之则不同。
2.2.6. NDArray和NumPy相互变换
可以通过array函数和asnumpy函数令数据在NDArray和NumPy格式之间相互变换。
import numpy as npP = np.ones((2, 3))
D = nd.array(P)
D
D.asnumpy()
2.2.2 小结
NDArray是MXNet中存储和变换数据的主要工具。
可以轻松地对NDArray创建、运算、指定索引,并与NumPy之间相互变换。
2.3 自动求梯度
在深度学习中,我们经常需要对函数求梯度(gradient)。本节将介绍如何使用MXNet提供的autograd模块来自动求梯度。
2.3.1 简单例子
对函数 y=2x⊤xy = 2\boldsymbol{x}^{\top}\boldsymbol{x}y=2x⊤x 求关于列向量 x\boldsymbol{x}x 的梯度。我们先创建变量xxx,并赋初值。
In [2]:
x = nd.arange(4).reshape((4, 1))
x
Out[2]:
[[0.][1.][2.][3.]]
<NDArray 4x1 @cpu(0)>
为了求有关变量x的梯度,我们需要先调用attach_grad函数来申请存储梯度所需要的内存。
In [3]:
x.attach_grad()
下面定义有关变量x的函数。为了减少计算和内存开销,默认条件下MXNet不会记录用于求梯度的计算。我们需要调用record函数来要求MXNet记录与求梯度有关的计算。
In [4]:
with autograd.record():y = 2 * nd.dot(x.T, x)
由于x的形状为(4, 1),y是一个标量。接下来我们可以通过调用backward函数自动求梯度。需要注意的是,如果y不是一个标量,MXNet将默认先对y中元素求和得到新的变量,再求该变量有关x的梯度。
In [5]:
y.backward()
函数 y = 2x⊤x2\boldsymbol{x}^{\top}\boldsymbol{x}2x⊤x 关于x\boldsymbol{x}x 的梯度应为4x4\boldsymbol{x}4x。现在我们来验证一下求出来的梯度是正确的。
In [6]:
assert (x.grad - 4 * x).norm().asscalar() == 0
x.grad
Out[6]:
[[ 0.][ 4.][ 8.][12.]]
<NDArray 4x1 @cpu(0)>
2.3.2 训练模式和预测模式
从上面可以看出,在调用record函数后,MXNet会记录并计算梯度。此外,默认情况下autograd还会将运行模式从预测模式转为训练模式。这可以通过调用is_training函数来查看。
In [7]:
print(autograd.is_training())
with autograd.record():print(autograd.is_training())
False
True
在有些情况下,同一个模型在训练模式和预测模式下的行为并不相同。我们会在后面的章节(如“丢弃法”一节)详细介绍这些区别。
2.3.3 对Python控制流求梯度
使用MXNet的一个便利之处是,即使函数的计算图包含了Python的控制流(如条件和循环控制),我们也有可能对变量求梯度。
考虑下面程序,其中包含Python的条件和循环控制。需要强调的是,这里循环(while循环)迭代的次数和条件判断(if语句)的执行都取决于输入a的值。
对输入的a不断的乘以2直到大于1000输出,其实就是一个类似线性函数。(评论大佬解读)
In [8]:
def f(a):b = a * 2while b.norm().asscalar() < 1000:b = b * 2if b.sum().asscalar() > 0:c = belse:c = 100 * breturn c
我们像之前一样使用record函数记录计算,并调用backward函数求梯度。
In [9]:
a = nd.random.normal(shape=1)
a.attach_grad()
with autograd.record():c = f(a)
c.backward()
我们来分析一下上面定义的f函数。事实上,给定任意输入a,其输出必然是 f(a) = x * a的形式,其中标量系数x的值取决于输入a。由于c = f(a)有关a的梯度为x,且值为c / a,我们可以像下面这样验证对本例中控制流求梯度的结果的正确性。
In [10]:
a.grad == c / a
Out[10]:
[1.]
<NDArray 1 @cpu(0)>
2.3.4. 小结
MXNet提供autograd模块来自动化求导过程。
MXNet的autograd模块可以对一般的命令式程序进行求导。
MXNet的运行模式包括训练模式和预测模式。我们可以通过autograd.is_training()来判断运行模式。
2.4. 查阅文档(跳过)
http://zh.gluon.ai/chapter_prerequisite/lookup-api.html
相关文章:
快速入门深度学习1(用时1h)
速通《动手学深度学习》1写在最前面0.内容与结构1.深度学习简介1.1 问题引入1.2 思路:逆向思考1.3 跳过1.4 特点1.5 小结2.预备知识(MXNet版本,学错了。。。。)2.1 获取和运行本书的代码2.2 数据操作2.2.1 略过2.2.2 小结2.3 自动…...
PaddleOCR关键信息抽取(KIE)的训练(SER训练和RE训练)错误汇总
1.SER训练报错: SystemError: (Fatal) Blocking queue is killed because the data reader raises an exception 1.1.问题描述 在执行训练任务的时候报错 单卡训练 python3 tools/train.py -c train_data/my_data/ser_vi_layoutxlm_xfund_zh.yml错误信息如下: T…...
信息收集之搜索引擎
Google Hacking 也可以用百度,不过谷歌的搜索引擎更强大 site 功能:搜索指定域名的网页内容,可以用来搜索子域名、跟此域名相关的内容 示例: site:zhihu.com 搜索跟zhihu.com相关的网页“web安全” site:zhihu.com 搜索zhihu…...
Flutter(四)布局类组件
目录布局类组件简介布局原理与约束线性布局(Row和Column)弹性布局流式布局(Wrap、Flow)层叠布局(Stack、Positioned)对齐与相对定位(Align)Align和Stack对比Center组件LayoutBuilder…...
【黑马】Java基础从入门到起飞目录合集
视频链接: Java入门到起飞(上部):BV17F411T7AoJava入门到起飞(下部):BV1yW4y1Y7Ms 学习时间: 2023/02/01 —— 2023/03/09断断续续的学习,历时大概37天,完结撒…...
PMP考前冲刺3.10 | 2023新征程,一举拿证
题目1-2:1.在最近的一次耗时四周的迭代中,赫克托尔所在的敏捷团队刚完成了10 个用户故事点的开发、测试和发布,那么团队的速度是?A. 10B. 4C. 5D.402.产品负责人奥佩,倾向于在短周期内看到工作产品的新版本,…...
JavaScript Math常用方法
math是JavaScript的一个内置对象,它提供了一些数学属性和方法,可以对数字进行计算(用于Number类型)。 math和其他全局对象不同,它不是一个构造器,math的所有方法和属性都是静态的,直接使用并传入…...
【C++】模板进阶
文章目录一、非类型模板参数1、非类型模板参数2、C11 中的 array 类二、模板的特化1、模板特化的概念2、函数模板特化3、类模板特化3.1 全特化3.2 偏特化三、模板的分离编译四、模板总结一、非类型模板参数 1、非类型模板参数 模板参数分为类型形参与非类型形参,类…...
三板斧解决leetcode的链表题
在《波奇学单链表》中我们提到单链表的两个特点单向性。头节点尾节点的特殊性导致分类讨论的情况。如何看单链表?让我们简化成下图cur表示当前节点,下图表示cur移动,圆圈表示值用哨兵卫节点(新的头节点)和把尾节点看成NULL来把头尾节点一般化…...
全生命周期的云原生安全框架
本博客地址:https://security.blog.csdn.net/article/details/129423036 一、全生命周期的云原生安全框架 如图所示: 二、框架说明 在上图中,我们从两个维度描述各个安全机制,横轴是开发和运营阶段,细分为编码、测试…...
【本地网站上线】ubuntu搭建web站点,并内网穿透发布公网访问
【本地网站上线】ubuntu搭建web站点,并内网穿透发布公网访问前言1. 本地环境服务搭建2. 局域网测试访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名4.3 测试访问公网固定二级子…...
电脑怎么重装系统?教你轻松掌握这些方法
重新安装计算机系统有两种原因:一种是计算机系统可以正常使用,但是电脑比较卡,为了提高它的运行速度,所以想要通过重新安装系统来解决这个问题;另一种原因是计算机系统文件丢失,系统出现蓝屏,或者黑屏的情况…...
leetcode-每日一题-2379(简单,字符串)
久违的简单题......给你一个长度为 n 下标从 0 开始的字符串 blocks ,blocks[i] 要么是 W 要么是 B ,表示第 i 块的颜色。字符 W 和 B 分别表示白色和黑色。给你一个整数 k ,表示想要 连续 黑色块的数目。每一次操作中,你可以选择…...
SLF4J日志框架在项目中使用
介绍 SLF4J全称“Simple Logging Facade for Java”,作为各种日志框架的简单门面。例如: java.util.logging、logback 、 reload4j等。只需要切换日志框架的jar包依赖就可以切换日志框架。 SLF4J支持的日志框架包含如下: log4j:…...
Spark MLlib 模型训练
Spark MLlib 模型训练决策树随机森林GBDTSpark MLlib 开发框架下 : 监督学习 : 回归 (Regression) , 分类 (Classification) , 协同过滤 (Collaborative Filtering)非监督学习 : 聚类 (Clustering) 、频繁项集 (Frequency Patterns) 例子分类 : 算法分类 : 算法分类算法子分类…...
Python中变量的作用域精讲
文章目录前言一、局部变量二、全局变量前言 变量的作用域是指程序代码能够访问该变量的区域,如果超出该区域,再访问时就会出现错误。在程序中,一般会根据变量的 “有效范围” 将变量分为 “全局变量” 和 “局部变量”。 一、局部变量 局部变…...
数据仓库工程师的工作职责的相关介绍
1. BI 开发工程师的工作内容是什么? BI开发工程师(Business Intelligence Developer)是负责设计和开发企业级BI系统的专业人员。他们的主要工作是从多个数据源中提取、转换、加载和分析数据,以支持企业决策。以下是BI开发工程师的…...
ESP UART 介绍
1 UART 介绍 UART 是一种以字符为导向的通用数据链,可以实现设备间的通信。异步传输的意思是不需要在发送数据上添加时钟信息。这也要求发送端和接收端的速率、停止位、奇偶校验位等都要相同,通信才能成功。 1.1 UART 通信协议 一个典型的 UART 帧开始…...
第十三届蓝桥杯省赛Python大学B组复盘
目录 一、试题B:寻找整数 1、题目描述 2、我的想法 3、官方题解 4、另解 二、试题E:蜂巢 1、题目描述 2、我的想法 3、官方题解 三、试题F:消除游戏 1、题目描述 2、我的想法(AC掉58.3%,剩下全超时&#x…...
linux入门---vim的配置
这里写目录标题预备知识如何配置vimvim一键配置预备知识 在配置vim之前大家首先得知道一件事就是vim的配置是一人一份的,每个用户配置的vim都是自己的vim,不会影响到其他人,比如说用户xbb配置的vim是不会影响到用户wj的,虽然不同…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
