云赛道---深度学习

分析问题定位任务:首先定位问题,将实际问题转化为机器学习问题,需要什么样的
数据,然后进行数据的采集。包含数据探查、场景抽象、算法选择。比如逻辑回归可
以决定我们是不是能喝咖啡;那另外朴素贝叶斯算法可以用来区分垃圾电子邮件和合
法电子邮件。 AI 系统不是直接检测,而是医生会提供给系统一些数据,比如说人体对
咖啡因的耐受度,会不会睡不着

数据清理:数据清洗 —— 重新检查和验证数据的过程,旨在删除重复信息,纠正现有
错误并提供数据一致性。采用(随即、系统、分层)、归一化、去除噪声、数据过滤

特征提取:特征抽象、特征重要性评估、特征衍生、特征降维。

特征选择

模型训练

推理,预测和识别

一般来说,机器学习中特征是由人工选定,而特征越多,给出的信息就越多,识别准
确性会得到提升

但特征多,计算复杂度增加,搜索空间就打,训练数据会在全体特征向量中就会显得
稀疏,影响相似性判断,即 维度爆炸

何为深度学习呢?在前面的课程我们已经了解,深度学习是机器学习的一个子集。

深度学习一般指深度神经网络,深度指神经网络的层数(多层)。

这是模拟人类的神经网络而构建的

在人工神经网络设计及应用研究中,通常需要考虑三个方面的内容,即神经元作用函
数、神经元之间的连接形式和网络的学习(训练)。

GPU 之所以快的原因是因为高效的并行计算,对 矩阵乘法 和卷积具有极大的计算优势。

参考网址 https://blog.csdn.net/qq_18515405/article/details/42123697

可以发现,隐藏层越多,神经网络的分辨能力越强

这个损失函数的特点包括:
        ▫ 以权值向量作为自变量。
        ▫ 以各个训练样例的目标输出 𝑡 _ 𝑑 和实际输出 𝑜 _ 𝑑 的差平方和作为主体。
        ▫ 有个系数 1/2
我们看到,一旦训练样例给定,其输入和目标输出值是常量,实际输出跟随者 𝑊 的变
化而变化,所以误差函数的自变量是 𝑊
这里较难理解的是 1/2 这个系数,它存在的目的是当 𝐸 对自变量求导的时候,刚好和指
2 抵消为 1 ,后面将会具体看到。
• X 是样本, n 是样本的数量, d 是输出层神经元。

这个损失函数的特点包括:

        以权值向量作为自变量。

        以各个训练样例的目标输出𝑡_𝑑和实际输出𝑜_𝑑的差平方和作为主体。

        有个系数1/2

我们看到,一旦训练样例给定,其输入和目标输出值是常量,实际输出跟随者 𝑊 的变
化而变化,所以误差函数的自变量是 𝑊

这里较难理解的是 1/2 这个系数,它存在的目的是当 𝐸 对自变量求导的时候,刚好和指
2 抵消为 1 ,后面将会具体看到。

梯度法思想的三要素:出发点、下降方向、下降步长。

全量梯度下降法每次学习都使用整个训练集,因此每次更新都会朝着正确的方向进行,
最后能够保证收敛于极值点,凸函数收敛于全局极值点,非凸函数可能会收敛于局部
极值点,缺陷就是学习时间太长,消耗大量内存。

这个版本的梯度下降算法走向了另一个极端,即每个样例都更新权值。因为训练样例
中一般是含有噪声的,因此到了精确逼近极值的阶段,梯度往往会在极值附近横冲直
撞,难以收敛到极值。

这个版本的梯度下降兼顾了效率和梯度的稳定性,容易冲过局部极小值,是实际工作
中最常用的梯度下降算法, BS 的取值因具体问题而异,一般取 32

也就是比较大的情况。但对于使用 sigmoid 激活函数来说,这种情况比较少。因为
𝜎 𝑧 的大小也与 w 有关( [ 公式 ] ),除非该层的输入值 [ 公式 ] 在一直一个比较小的范
围内。
其实梯度爆炸梯度消失问题都是因为网络太深,网络权值更新不稳定造成的,本质
上是因为梯度反向传播中的连乘效应。

梯度剪切 这个方案主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,然
后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。
这可以防止梯度爆炸。

另外一种解决梯度爆炸的手段是采用权重正则化( weithts regularization 比较常见
的是 l1 正则,和 l2 正则,在各个深度框架中都有相应的 API 可以使用正则化,比如在
tensorflow 中,若搭建网络的时候已经设置了正则化参数,则调用以下代码可以直接
计算出正则损失。

**Relu:** 思想也很简单,如果激活函数的导数为 1 ,那么就不存在梯度消失爆炸的问题
了,每层的网络都可以得到相同的更新速度, relu 就这样应运而生。

LSTM 全称是长短期记忆网络( long-short term memory networks ,是不那么容
易发生梯度消失的,主要原因在于 LSTM 内部复杂的“门” (gates) ,如下图, LSTM
通过它内部的“门”可以接下来更新的时候“记住”前几次训练的”残留记忆“,因
此,经常用于生成文本中。目前也有基于 CNN LSTM ,感兴趣的可以尝试一下。

激活函数,是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输
出端。激活函数对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具
有十分重要的作用。它们将非线性特性引入到我们的网络中。在神经元中,输入通过
加权,求和后,还被作用了一个函数,这个函数就是激活函数。引入激活函数是为了
增加神经网络模型的非线性。若没有激活函数的每层都相当于矩阵相乘。没有激活函
数的神经网络叠加了若干层之后,还是一个线性变换,与单层感知机无异。激活函数
可以分为饱和激活函数与不饱和激活函数,激活函数的右饱和指当 x xx 趋向于正无穷
时,函数的导数趋近于 0 。同样的,当 x xx 趋向于负无穷时,函数的导数趋近于 0 ,此
时称为左饱和。当一个函数既满足右饱和,又满足左饱和,则称为饱和函数,否则称
为非饱和函数。
连续可导。
Sigmoid 函数单调连续,求导容易,输出有界,网络比较容易收敛。但是我们看到,
在远离中心点的位置, Sigmoid 函数导数趋于 0 ,在网络非常深的时候,越来越多反向
传播的梯度会落入饱和区,从而让梯度的模越来越小。一般来说, Sigmoid 网络在 5
之内,就会产生梯度退化为 0 的现象,难以训练。这种现象称为梯度消失现象。另外,
Sigmoid 的输出并不是以 0 为中心的。
适合用: Sigmoid 函数的输出范围是 0 1 。由于输出值限定在 0 1 ,因此它对每
个神经元的输出进行了归一化;用于将预测概率作为输出的模型。由于概率的取值范
围是 0 1 ,因此 Sigmoid 函数非常合适;梯度平滑,避免「跳跃」的输出值;函
数是可微的。这意味着可以找到任意两个点的 sigmoid 曲线的斜率;明确的预测,即
非常接近 1 0
缺点:
1. 容易出现梯度消失,
2. 函数输出并不是 0 均值化,
3. 幂运算相对来讲比较耗时。
双曲正切函数 tanh 也具有和 Sigmoid 函数类似的缺点,即远离中心的位置导数趋于
0 ,但是因为其关于 0 点对称,输出的均值比 Sigmoid 更加接近于 0 ,因此 SGD 会更接
近自然梯度,然而, gradient vanishing 的问题和幂运算的问题仍然存在。
Softsign 函数是 Tanh 函数的另一个替代选择。就像 Tanh 函数一样, Softsign 函数是反
对称、去中心、可微分,并返回 -1 1 之间的值。其更平坦的曲线与更慢的下降导数
表明它可以更高效地学习,比 tTanh 函数更好的解决梯度消失的问题。另一方面,
Softsign 函数的导数的计算比 Tanh 函数更麻烦。 Softsign′(x)=1/(1+ x )2
这个函数相比 tanh 函数,饱和得慢一些。
Sigmoid, tanh, softsign 函数在训练深度神经网络的过程中,都无法回避 梯度消失
问题,既在远离函数中心点的位置,函数导数趋于 0 ,在网络非常深的时候,越来越
多反向传播的梯度会落入饱和区,从而让梯度的模越来越小,最终趋近于 0 ,导致权
重无法更新。
一般来说,如果神经网络超出 5 层,就会产生梯度退化为 0 的现象,导致模型难以训练。
线性整流函数,又称修正线性单元 ReLU ,是一种人工神经网络中常用的激活函数,
通常指代以斜坡函数及其变种为代表的非线性函数。当输入为正时,不存在梯度饱和
问题。

它是一种专门设计用于解决 Dead ReLU 问题的 激活函数 :针对 Relu 函数中存在的
Dead Relu Problem Leaky Relu 函数在输入为负值时,给予输入值一个很小的斜率,
在解决了负输入情况下的 0 梯度问题的基础上,也很好的缓解了 Dead Relu 问题;
2 、该函数的输出为负无穷到正无穷,即 leaky 扩大了 Relu 函数的范围,其中 α 的值一
般设置为一个较小值,如 0.01
缺点
1、论上来说,该函数具有比 Relu 函数更好的效果,但是大量的实践证明,其效果
不稳定,故实际中该函数的应用并不多。

2、由于在不同区间应用的不同的函数所带来的不一致结果,将导致无法为正负输
入值提供一致的关系预测。

ReLU 的基础上,增加了一点计算复杂度,但是其有连续的导数,且定义的曲面也
相对平滑。 Softplus 函数可以看作是 ReLU 函数的平滑。根据神经科学家的相关研究,
Softplus 函数和 ReLU 函数与脑神经元激活频率函数有神似的地方。也就是说,相比于
早期的激活函数, Softplus 函数和 ReLU 函数更加接近脑神经元的激活模型,而神经网
络正是基于脑神经科学发展而来,这两个激活函数的应用促成了神经网络研究的新浪
潮。修正线性单元( Rectified Linear Unit ReLU ): ReLU 函数被认为有生物上的解
释性,比如单侧抑制、宽兴奋边界(即兴奋程度 也可以非常高)。在生物神经网络
中,同时处于兴奋状态的神经元非常稀疏。人 脑中在同一时刻大概只有 1 4% 的神
经元处于活跃状态。 Sigmoid 型激活函数会导致一个非稀疏的神经网络,而 ReLU 却具
有很好的稀疏性,大约 50% 的神 经元会处于激活状态。

过拟合主要是有两个原因造成的:数据太少 + 模型太复杂:在深度学习中,经常出现
的问题是,训练数据量小,模型复杂度高,这就使得模型在训练数据上的预测准确率
高,但是在测试数据上的准确率低,这时就是出现了过拟合。

1、获取更多数据 :从数据源头获取更多数据;数据增强( Data Augmentation )。

2、使用合适的模型:减少网络的层数、神经元个数等均可以限制网络的拟合能力。

3、d ropout
4、正则化,在训练的时候限制权值变大;
5、限制训练时间;通过评估测试。
6、 增加噪声 Noise : 输入时 + 权重上(高斯初始化) 。
7、 数据清洗 (data ckeaning/Pruning) :将错误的 label 纠正或者删除错误的数据。
8、 结合多种模型: Bagging 用不同的模型拟合不同部分的训练集; Boosting 只使用简单的神经网络。
特殊情况下,对于二次优化问题,并且假设对应的 Hessian 矩阵是对角矩阵,可以推
导出参数递推公式为 𝑤 𝑖 = 𝑠𝑖𝑔𝑛 𝑤 𝑖 ∗ ma𝑥( 𝑤 𝑖 ∗ 𝜆 𝛼 𝑖 , 0) ,从中可以看出当 𝑤 𝑖 ∗ < 𝜆 𝛼 𝑖 时,
对应的参数会缩减到 0 ,这也是和 𝐿 2 正则不同地方。对比 𝐿 2 优化方法, 𝐿 2 不会直接将
参数缩减为 0 ,而是一个非常接近于 0 的值。
向目标函数添加一个正则项 Ω(θ)=12||w||22 ,使权重更加接近原点
我们往往会设置一个比较大的迭代次数 n 。首先我们要保存好现在的模型 ( 网络结构和
权值 ), 训练 num_batch ( 即一个 epoch), 得到新的模型。将测试集作为新模型的输入 ,
进行测试。如果我们发现测试误差比上次得到的测试误差大,我们并不会马上终止测
试,而是再继续进行几个 epoch 的训练与测试,如果测试误差依旧没有减小,那么我
们就认为该试验在上一次达到最低测试误差时停下来训练模型时,
一般的做法是记录到目前为止最好的测试集准确率 p ,之后连续 m 个周期没有超过最
佳测试集准确率 p 时,则可以认为 p 不再提高了,此时便可以提前停止迭代( Early
Stopping )。
从图中可以看出,测试误差在前几个 epoch 中逐渐减小,但是训练到某个 epoch 后,
测试误差又有了小幅度的增大。这说明此时发生了过拟合。
发生过拟合是我们所不愿意看见的,我们可以利用提前终止 (early stopping)
来防止过拟合的发生。
提前终止是指:在测试误差开始上升之前,就停止训练 , 即使此时训练尚未收敛 ( 即训
练误差未达到最小值 )。
在每一轮的样本输入到神经网络进行训练时,设定一个概率 p ,使得每个神经元有一
定的概率死亡,不参与网络的训练。
其流程为: 1. 首先以一定的概率 p 随机删除掉网络隐藏层中的神经元(暂时死亡),
输入输出神经元保持不变。 2. 然后把输入 x 通过修改后的网络前向传播,把得到的损
失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后,在没有被删除
的神经元上按照随机梯度下降法更新对应的参数( w b )。 3. 然后继续重复这一过程:
恢复被删掉的神经元(此时被删除的神经元保持原样,而没有被删除的神经元已经有
所更新)从隐藏层神经元中随机选择一个一半大小的子集临时删除掉(备份被删除神
经元的参数)。对一小批训练样本,先前向传播然后反向传播损失并根据随机梯度下
降法更新参数( w b ) (没有被删除的那一部分参数得到更新,删除的神经元参数
保持被删除前的结果)。
原始输入每一个节点选择概率 0.8 ,隐藏层选择概率为 0.5
Dropout 的优点
相比于 weight decay 、范数约束等,该策略更有效。
计算复杂度低,实现简单而且可以用于其他非深度学习模型。
但是当训练数据较少时,效果不好。
▫ Dropout 训练过程中的随机过程不是充分也不是必要条件,可以构造不变的屏
蔽参数,也能够得到足够好的解。
除上述的方法以外,还有半监督学习、多任务学习、提前停止、参数共享、集成化方
法、对抗训练等方法。
𝜂𝛿 𝑖 𝑙+1 𝑥 𝑗 𝑙 𝑛 为原梯度大小和方向, j 表示第 l 层的第 j 个神经元, i 表示第 l+1 层的第 i 个神
经元
对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的权
重固定,所以又可以看做一个恒定的滤波器 filter kernel ))做内积(逐个元素相乘
再求和)的操作就是所谓的卷积操作,也是卷积神经网络的名字来源。
局部感知,一般认为人对外界的认知是从局部到全局的,而图像的空间联系也是局部
的像素联系较为紧密,而距离较远的像素相关性则较弱。因而,每个神经元其实没有
必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合
起来就得到了全局的信息。网络部分连通的思想,也是受启发于生物学里面的视觉系
统结构。视觉皮层的神经元就是局部接受信息的(即这些神经元只响应某些特定区域
的刺激)。
参数共享,对输入的照片,用一个或者多个 filter 扫描照片, filter 自带的参数就是权
重,在同一个 filter 扫描的图层当中,每个 filter 使用同样的参数进行加权计算。权值
共享意味着每一个过滤器在遍历整个图像的时候,过滤器的参数 ( 即过滤器的参数的
) 是固定不变的,比如我有 3 个特征过滤器,每个过滤器都会扫描整个图像,在扫描
的过程中,过滤器的参数值是固定不变的,即整个图像的所有元素都“共享”了相同
的权值。
输入层,用于数据的输入。
卷积层 Convolutional layer ),卷积神经网路中每层卷积层由若干卷积单元组成,
每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入
的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,
更多层的网络能从低级特征中迭代提取更复杂的特征。
线性整流层 Rectified Linear Units layer, ReLU layer ),这一层神经的活性化函数
Activation function )使用线性整流( Rectified Linear Units, ReLU
f(x)=max(0,x)
池化层 Pooling layer ),通常在卷积层之后会得到维度很大的特征,将特征切成几
个区域,取其最大值或平均值,得到新的、维度较小的特征。
全连接层 Fully-Connected layer , 把所有局部特征结合变成全局特征,用来计算
最后每一类的得分。
输出层,用于输出最终结果。
实际的分类网络,基本上都是卷基层和 Pooling 层交替互联,形成的前馈网络。
Pooling 层有如下作用:
不变性: MaxPooling 在一定范围内保证了不变性,因为一片区域的最大值无论
在这篇区域的何处,最后输出都是它。
减小下一层输入大小: Pooling 有效降低了下一层输入数据的尺寸,减少了参数
个数,减小了计算量。
获得定长数据:通过合理设置 Pooling 的窗口尺寸和 Stride ,可以在变长输入中
得到定长的输出。
增大尺度:相当于扩大了尺度,可以从更大尺度上提炼上一层的特征
防止过拟合: Pooling 简化了网络,降低了拟合的精度,因此可以防止过拟合
(注意有可能带来的欠拟合)。
D
ABCD
A

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux|Awk 变量、数字表达式和赋值运算符

引言 本部分[1]将深入学习 Awk 的高级应用&#xff0c;以应对更为复杂的文本或字符串过滤任务。将介绍包括变量、数值表达式和赋值运算符在内的 Awk 功能。 这些概念与你之前可能在诸如shell、C、Python等许多编程语言中接触过的概念并没有本质上的不同&#xff0c;所以你不必过…

SaaS云HIS平台源码 采用云部署模式,部署一套可支持多家医院共同使用

目录 云HIS门诊业务使用流程 云HIS住院业务使用流程 云HIS系统使用流程 云HIS优势 云HIS系统功能模块 医疗业务&#xff1a; 电子病历&#xff1a; 经济管理&#xff1a; 药物管理&#xff1a; 统计报表&#xff1a; 系统管理&#xff1a; 运营运维&#xff1a; 通…

NLP step by step -- 了解Transformer

Transformer模型 Transformer相关历史 首先我们先看一下有关Transformer模型的发展历史&#xff0c;下面的图是基于Transformer架构的一些关键模型节点&#xff1a; 图片来源于Hugging Face 图片来源于Hugging Face Transformer 架构 于 2017 年 6 月推出。原本研究的重点是…

deepin 亮相 Intel 合作伙伴交流会,展示AI大模型应用最新成果

内容来源&#xff1a;deepin 社区 2024 年 4 月 18 日&#xff0c;备受业界瞩目的 Intel Channel Partner Networking Fair 在香港天际万豪酒店隆重举办。 在这场行业盛会上&#xff0c;deepin&#xff08;深度&#xff09;受邀参与了 Intel Demo Showcase 环节&#xff0c;向…

JDBC查询大数据时怎么防止内存溢出-流式查询

文章目录 1.前言2.流式查询介绍3.使用流式查询3.1不开启流式查询的内存占用情况3.2开启流式查询的内存占用情况 4.开启流式查询的注意点 1.前言 在使用 JDBC 查询大数据时&#xff0c;由于 JDBC 默认将整个结果集加载到内存中&#xff0c;当查询结果集过大时&#xff0c;很容易…

python与pycharm如何设置文件夹为源代码根目录

相信大家遇到过下面这种情况 当我们在当前项目下引入了其它项目的代码&#xff0c;这是其它项目的包的导入路径是不用于当前项目的&#xff0c;这样导致项目无法正常起来&#xff0c;但是我们又不可能一个个文件去处理&#xff0c;这时可以用下面的方式解决 pycharm直接设置 …

Centos 5 的yum源

背景 有使用较老的Centos 5 系统内部安装软件无法正常报错&#xff0c;是由于系统叫老yum源存在问题 处理方法 更换下述yum源&#xff0c;可以将其他repo源文件备份移动到其他目录&#xff0c;添加下述源后重新测试 [C5.11-base] nameCentOS-5.11 baseurlhttp://vault.c…

非对称渐开线齿轮学习笔记分享

最近有小伙伴遇到了非对称渐开线齿轮的加工问题,花了些时间学习了解一下,下面是总结的学习笔记,有兴趣的朋友可以瞅瞅: 目录: 为什么要采用非对称? 非对称有什么优点? 非对称齿形如何加工? 非对称齿轮怎么测量? 非对称齿轮建模 为什么要采用非对称? 现在的传动要求…

【SSM进阶学习系列丨整合篇】Spring+SpringMVC+MyBatis 框架配置详解

文章目录 一、环境准备1.1、创建数据库和表1.2、导入框架依赖的jar包1.3、修改Maven的编译版本1.4、完善Maven目录1.5、编写项目需要的包1.6、编写实体、Mapper、Service 二、配置MyBatis环境2.1、配置mybatis的主配置文件2.2、编写映射文件2.3、测试环境是否正确 三、配置Spri…

streamlit data_editor学习之 LLM理论内存占用量计算器

streamlit data_editor学习之 LLM理论内存占用量计算器 一.效果二.代码三.运行命令四.参考链接 根据用户设置的LLM参数,计算设备内存的占用量。以web的形式方便共享,可以插入多条记录,表格更新后,可以动态计算结果 一.效果 二.代码 import streamlit as st #1.31.1 import cv…

【八股】Spring Boot

SpringBoot是如何实现自动装配的&#xff1f; 首先&#xff0c;SpringBoot的核心注解SpringBootApplication里面包含了三个注解&#xff0c;SpringBootConfigurationEnableAutoConfigurationComponentScan&#xff0c;其中EnableAutoConfiguration是实现自动装配的注解&#x…

如何最大程度使用AWS?

随着云计算技术的不断发展&#xff0c;AWS已经成为众多企业的首选&#xff0c;为其提供了强大的基础设施和服务。那么如何最大程度地、灵活地利用AWS&#xff0c;成为许多企业专注的焦点。九河云作为AWS的合作伙伴&#xff0c;为读者们提供一些技巧和策略&#xff0c;帮助读者充…

UL认证防逆流多功能监测装置AGF-AE-D

安科瑞薛瑶瑶18701709087/17343930412 在单逆变器系统中&#xff0c;仪表直接与逆变器相连。如果您的变频器有一个内置的收入等级表&#xff08;RGM&#xff1b;该变频器 被称为收入等级变频器&#xff09;&#xff0c;您可以在 RGM 的同一总线上连接一个外部仪表。

【React】Sigma.js框架网络图-入门篇(2)

通过《【React】Sigma.js框架网络图-入门篇》有了基本认识 由于上一篇直接给出了基本代码示例&#xff0c;可能看着比较复杂也不知道是啥意思&#xff1b; 今天从理论入手重新认识下&#xff01; 一、基本认识 首先&#xff0c;我们先了解下基础术语&#xff1a; 图(Graph)&…

波高仪:数字浪高仪解析

波高仪&#xff0c;也被称为数字浪高仪&#xff0c;是一种专门用于测量波浪高度的设备。它采用低功耗微处理器、24bit高精度AD转换器和长距离通信技术&#xff0c;配备电容式波高传感器&#xff0c;具有线性好、功耗低、量精度高、传输距离远、性能稳定、抗干扰能力强等特点。 …

vue中使用echarts实现X轴动态时间(天)的折线图表

项目要求x轴以一天为间隔&#xff0c;时间是动态返回的数据&#xff0c;折线图平滑展示 实现代码如下&#xff1a; <div class"echarts-main"><v-chart ref"echarts" :options"options" /> </div>// 局部引入vue-echarts im…

Python实现线性拟合及绘图

Python实现线性拟合及绘图 当时的数字地形实验&#xff0c;使用matplotlib库绘制了一张图表表示不同地形类别在不同分辨率下的RMSE值&#xff0c;并分别拟合了一条趋势线。现在来看不足就是地形较多时&#xff0c;需要使用循环更好一点&#xff0c;不然太冗余了。 代码逻辑 …

【讯为Linux驱动笔记1】申请一个字符设备

Linux下每个设备都需要有一个专属设备号&#xff1a;主设备号 次设备号 【申请字符设备】 主设备号&#xff1a;一类驱动&#xff1a;如&#xff1a;USB驱动 次设备号&#xff1a;这类驱动下的某个设备 如&#xff1a;键盘鼠标 设备号是32位的dev_t类型的&#xff0c;高12位主…

Python对Excel两列数据进行运算

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Python对Excel两列数据进行运算 在日常工作中&#xff0c;经常会遇到需要对Excel表格中的数…