当前位置: 首页 > news >正文

机器学习和深度学习综述

机器学习和深度学习综述

1. 人工智能、机器学习、深度学习的关系

近些年人工智能、机器学习和深度学习的概念十分火热,但很多从业者却很难说清它们之间的关系,外行人更是雾里看花。在研究深度学习之前,先从三个概念的正本清源开始。概括来说,人工智能、机器学习和深度学习覆盖的技术范畴是逐层递减的,三者的关系如 图1 所示,即:人工智能 > 机器学习 > 深度学习。


图1:人工智能、机器学习和深度学习三者关系示意

人工智能(ArtificialIntelligence,AI)是最宽泛的概念,是研发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。由于这个定义只阐述了目标,而没有限定方法,因此实现人工智能存在的诸多方法和分支,导致其变成一个“大杂烩”式的学科。机器学习(MachineLearning,ML)是当前比较有效的一种实现人工智能的方式。深度学习(DeepLearning,DL)是机器学习算法中最热门的一个分支,近些年取得了显著的进展,并替代了大多数传统机器学习算法。

2. 机器学习

区别于人工智能,机器学习、尤其是监督学习则有更加明确的指代。机器学习是专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构,使之不断改善自身的性能。这句话有点“云山雾罩”的感觉,让人不知所云,下面我们从机器学习的实现和方法论两个维度进行剖析,更加清晰地认识机器学习的来龙去脉。

2.1 机器学习的实现

机器学习的实现可以分成两步:训练和预测,类似于归纳和演绎:

  • 归纳: 从具体案例中抽象一般规律,机器学习中的“训练”亦是如此。从一定数量的样本(已知模型输入XXX和模型输出YYY)中,学习输出YYY与输入XXX的关系(可以想象成是某种表达式)。
  • 演绎: 从一般规律推导出具体案例的结果,机器学习中的“预测”亦是如此。基于训练得到的YYYXXX之间的关系,如出现新的输入XXX,计算出输出YYY。通常情况下,如果通过模型计算的输出和真实场景的输出一致,则说明模型是有效的。

2.2 机器学习的方法论

机器学习的方法论和人类科研的过程有着异曲同工之妙,下面以“机器从牛顿第二定律实验中学习知识”为例,更加深入理解机器学习(监督学习)的方法论本质,即在“机器思考”的过程中确定模型的三个关键要素:假设、评价、优化。

2.2.1 案例:机器从牛顿第二定律实验中学习知识


牛顿第二定律

牛顿第二定律是艾萨克·牛顿在1687年于《自然哲学的数学原理》一书中提出的,其常见表述:物体加速度的大小跟作用力成正比,跟物体的质量成反比,与物体质量的倒数成正比。牛顿第二运动定律和第一、第三定律共同组成了牛顿运动定律,阐述了经典力学中基本的运动规律。


在中学课本中,牛顿第二定律有两种实验设计方法:倾斜滑动法水平拉线法,如 图2 所示。


图2:牛顿第二定律实验设计方法

相信很多同学都有摆弄滑轮和小木块做物理实验的青涩年代和美好回忆。通过多次实验数据,可以统计出如 表1 所示的不同作用力下的木块加速度。


表1:实验获取的大量数据样本和观测结果

观察实验数据不难猜测,物体的加速度aaa和作用力FFF之间的关系应该是线性关系。因此我们提出假设 a=w⋅Fa = w \cdot Fa=wF,其中,aaa代表加速度,FFF代表作用力,www是待确定的参数。

通过大量实验数据的训练,确定参数www是物体质量的倒数(1/m)(1/m)(1/m),即得到完整的模型公式a=F⋅(1/m)a = F \cdot (1/m)a=F(1/m)。当已知作用到某个物体的力时,基于模型可以快速预测物体的加速度。例如:燃料对火箭的推力FFF=10,火箭的质量mmm=2,可快速得出火箭的加速度aaa=5。

2.2.2 如何确定模型参数?

这个有趣的案例演示了机器学习的基本过程,但其中有一个关键点的实现尚不清晰,即:如何确定模型参数(w=1/m)(w=1/m)w=1/m

确定参数的过程与科学家提出假说的方式类似,合理的假说可以最大化的解释所有的已知观测数据。如果未来观测到不符合理论假说的新数据,科学家会尝试提出新的假说。如:天文史上,使用大圆和小圆组合的方式计算天体运行,在中世纪是可以拟合观测数据的。但随着欧洲工业革命的推动,天文观测设备逐渐强大,已有的理论已经无法解释越来越多的观测数据,这促进了使用椭圆计算天体运行的理论假说出现。因此,模型有效的基本条件是能够拟合已知的样本,这给我们提供了学习有效模型的实现方案。

图3 是以HHH为模型的假设,它是一个关于参数www和输入xxx的函数,用H(w,x)H(w, x)H(w,x) 表示。模型的优化目标是H(w,x)H(w, x)H(w,x)的输出与真实输出YYY尽量一致,两者的相差程度即是模型效果的评价函数(相差越小越好)。那么,确定参数的过程就是在已知的样本上,不断减小该评价函数(HHHYYY的差距)的过程。直到模型学习到一个参数www,使得评价函数的值最小,衡量模型预测值和真实值差距的评价函数也被称为损失函数(损失Loss)


图3:确定模型参数示意图

假设机器通过尝试答对(最小化损失)大量的习题(已知样本)来学习知识(模型参数www),并期望用学习到的知识所代表的模型H(w,x)H(w, x)H(w,x),回答不知道答案的考试题(未知样本)。最小化损失是模型的优化目标,实现损失最小化的方法称为优化算法,也称为寻解算法(找到使得损失函数最小的参数解)。参数www和输入xxx组成公式的基本结构称为假设。在牛顿第二定律的案例中,基于对数据的观测,我们提出了线性假设,即作用力和加速度是线性关系,用线性方程表示。由此可见,模型假设、评价函数(损失/优化目标)和优化算法是构成模型的三个关键要素

2.2.3 模型结构

模型假设、评价函数和优化算法是如何支撑机器学习流程的呢?如图4 所示。


图4:机器学习流程

  • 模型假设:世界上的可能关系千千万,漫无目标的试探YYY$X$之间的关系显然是十分低效的。因此假设空间先圈定了一个模型能够表达的关系可能,如蓝色圆圈所示。机器还会进一步在假设圈定的圆圈内寻找最优的$Y$XXX关系,即确定参数www
  • 评价函数:寻找最优之前,我们需要先定义什么是最优,即评价一个YYY~XXX关系的好坏的指标。通常衡量该关系是否能很好的拟合现有观测样本,将拟合的误差最小作为优化目标。
  • 优化算法:设置了评价指标后,就可以在假设圈定的范围内,将使得评价指标最优(损失函数最小/最拟合已有观测样本)的YYY~XXX关系找出来,这个寻找最优解的方法即为优化算法。最笨的优化算法即按照参数的可能,穷举每一个可能取值来计算损失函数,保留使得损失函数最小的参数作为最终结果。

从上述过程可以得出,机器学习的过程与牛顿第二定律的学习过程基本一致,都分为假设、评价和优化三个阶段:

  1. 假设:通过观察加速度aaa和作用力FFF的观测数据,假设aaaFFF是线性关系,即a=w⋅Fa = w \cdot Fa=wF
  2. 评价:对已知观测数据上的拟合效果好,即w⋅Fw \cdot FwF计算的结果要和观测的aaa尽量接近。
  3. 优化:在参数www的所有可能取值中,发现w=1/mw=1/mw=1/m可使得评价最好(最拟合观测样本)。

机器执行学习任务的框架体现了其学习的本质是“参数估计”(Learning is parameter estimation)。

上述方法论使用更规范化的表示如图5所示,未知目标函数fff,以训练样本D{D}D=(x1,y1),…,(xn,yn)({x_1},{y_1}),… ,({x_n},{y_n})x1y1),,(xnyn为依据。从假设集合HHH中,通过学习算法AAA找到一个函数ggg。如果ggg能够最大程度的拟合训练样本DDD,那么可以认为函数ggg就接近于目标函数fff



图5:规范化表示

在此基础上,许多看起来完全不一样的问题都可以使用同样的框架进行学习,如科学定律、图像识别、机器翻译和自动问答等,它们的学习目标都是拟合一个“大公式f”,如 图6 所示。


图6:机器学习就是拟合一个“大公式”

3. 深度学习

机器学习算法理论在上个世纪90年代发展成熟,在许多领域都取得了成功,但平静的日子只延续到2010年左右。随着大数据的涌现和计算机算力提升,深度学习模型异军突起,极大改变了机器学习的应用格局。今天,多数机器学习任务都可以使用深度学习模型解决,尤其在语音、计算机视觉和自然语言处理等领域,深度学习模型的效果比传统机器学习算法有显著提升。

相比传统的机器学习算法,深度学习做出了哪些改进呢?其实两者在理论结构上是一致的,即:模型假设、评价函数和优化算法,其根本差别在于假设的复杂度。如 图6 第二个示例(图像识别)所示,对于美女照片,人脑可以接收到五颜六色的光学信号,能快速反应出这张图片是一位美女,而且是程序员喜欢的类型。但对计算机而言,只能接收到一个数字矩阵,对于美女这种高级的语义概念,从像素到高级语义概念中间要经历的信息变换的复杂性是难以想象的,如图7所示。


图7:深度学习的模型复杂度难以想象

这种变换已经无法用数学公式表达,因此研究者们借鉴了人脑神经元的结构,设计出神经网络的模型,如图8所示。图8(a)展示了神经网络基本单元-感知机的设计方案,其处理信息的方式与人脑中的单一神经元有很强的相似性;图8(b)展示了几种经典的神经网络结构(后续的章节中会详细阐述),类似于人脑中多种基于大量神经元连接而形成的不同职能的器官。


图8:模拟人脑结构,针对各种任务设计不同的深度学习模型

3.1 神经网络的基本概念

人工神经网络包括多个神经网络层,如:卷积层、全连接层、LSTM等,每一层又包括很多神经元,超过三层的非线性神经网络都可以被称为深度神经网络。通俗的讲,深度学习的模型可以视为是输入到输出的映射函数,如图像到高级语义(美女)的映射,足够深的神经网络理论上可以拟合任何复杂的函数。因此神经网络非常适合学习样本数据的内在规律和表示层次,对文字、图像和语音任务有很好的适用性。这几个领域的任务是人工智能的基础模块,因此深度学习被称为实现人工智能的基础也就不足为奇了。

神经网络基本结构如 图9 所示。


图9:神经网络基本结构示意图

  • 神经元: 神经网络中每个节点称为神经元,由两部分组成:
    • 加权和:将所有输入加权求和。
    • 非线性变换(激活函数):加权和的结果经过一个非线性函数变换,让神经元计算具备非线性的能力。
  • 多层连接: 大量这样的节点按照不同的层次排布,形成多层的结构连接起来,即称为神经网络。
  • 前向计算: 从输入计算输出的过程,顺序从网络前至后。
  • 计算图: 以图形化的方式展现神经网络的计算逻辑又称为计算图,也可以将神经网络的计算图以公式的方式表达:
    Y=f3(f2(f1(w1⋅x1+w2⋅x2+w3⋅x3+b)+…)…)…)Y =f_3 ( f_2 ( f_1 ( w_1\cdot x_1+w_2\cdot x_2+w_3\cdot x_3+b ) + … ) … ) … )Y=f3(f2(f1(w1x1+w2x2+w3x3+b)+)))

由此可见,神经网络并没有那么神秘,它的本质是一个含有很多参数的“大公式”。如果大家感觉这些概念仍过于抽象,理解的不够透彻,先不用着急,下一章会以“房价预测”为例,演示使用Python实现神经网络模型的细节。

3.2 深度学习的发展历程

神经网络思想的提出已经是70多年前的事情了,现今的神经网络和深度学习的设计理论是一步步趋于完善的。在这漫长的发展岁月中,一些取得关键突破的闪光时刻,值得深度学习爱好者们铭记,如 图10 所示。


图10:深度学习发展历程

  • 1940年代:首次提出神经元的结构,但权重是不可学的。
  • 50-60年代:提出权重学习理论,神经元结构趋于完善,开启了神经网络的第一个黄金时代。
  • 1969年:提出异或问题(人们惊讶的发现神经网络模型连简单的异或问题也无法解决,对其的期望从云端跌落到谷底),神经网络模型进入了被束之高阁的黑暗时代。
  • 1986年:新提出的多层神经网络解决了异或问题,但随着90年代后理论更完备并且实践效果更好的SVM等机器学习模型的兴起,神经网络并未得到重视。
  • 2010年左右:深度学习进入真正兴起时期。随着神经网络模型改进的技术在语音和计算机视觉任务上大放异彩,也逐渐被证明在更多的任务,如自然语言处理以及海量数据的任务上更加有效。至此,神经网络模型重新焕发生机,并有了一个更加响亮的名字:深度学习。

为何神经网络到2010年后才焕发生机呢?这与深度学习成功所依赖的先决条件:大数据涌现、硬件发展和算法优化有关。

  • 大数据是神经网络发展的有效前提。神经网络和深度学习是非常强大的模型,需要足够量级的训练数据。时至今日,之所以很多传统机器学习算法和人工特征依然是足够有效的方案,原因在于很多场景下没有足够的标记数据来支撑深度学习。深度学习的能力特别像科学家阿基米德的豪言壮语:“给我一根足够长的杠杆,我能撬动地球!”。深度学习也可以发出类似的豪言:“给我足够多的数据,我能够学习任何复杂的关系”。但在现实中,足够长的杠杆与足够多的数据一样,往往只能是一种美好的愿景。直到近些年,各行业IT化程度提高,累积的数据量爆发式地增长,才使得应用深度学习模型成为可能。

  • 依靠硬件的发展和算法的优化。现阶段,依靠更强大的计算机、GPU、autoencoder预训练和并行计算等技术,深度学习在模型训练上的困难已经被逐渐克服。其中,数据量和硬件是更主要的原因。没有前两者,科学家们想优化算法都无从进行。

3.4 深度学习改变了AI应用的研发模式

3.4.1 实现了端到端的学习

深度学习改变了很多领域算法的实现模式。在深度学习兴起之前,很多领域建模的思路是投入大量精力做特征工程,将专家对某个领域的“人工理解”沉淀成特征表达,然后使用简单模型完成任务(如分类或回归)。而在数据充足的情况下,深度学习模型可以实现端到端的学习,即不需要专门做特征工程,将原始的特征输入模型中,模型可同时完成特征提取和分类任务,如 图14 所示。


图14:深度学习实现了端到端的学习

以计算机视觉任务为例,特征工程是诸多图像科学家基于人类对视觉理论的理解,设计出来的一系列提取特征的计算步骤,典型如SIFT特征。在2010年之前的计算机视觉领域,人们普遍使用SIFT一类特征+SVM一类的简单浅层模型完成建模任务。


说明:

SIFT特征由David Lowe在1999年提出,在2004年加以完善。SIFT特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关。对于光线、噪声、微视角改变的容忍度也相当高。基于这些特性,它们是高度显著而且相对容易撷取,在母数庞大的特征数据库中,很容易辨识物体而且鲜有误认。使用SIFT特征描述对于部分物体遮蔽的侦测率也相当高,甚至只需要3个以上的SIFT物体特征就足以计算出位置与方位。在现今的电脑硬件速度下和小型的特征数据库条件下,辨识速度可接近即时运算。SIFT特征的信息量大,适合在海量数据库中快速准确匹配。


3.4.2 实现了深度学习框架标准化

除了应用广泛的特点外,深度学习还推动人工智能进入工业大生产阶段,算法的通用性导致标准化、自动化和模块化的框架产生,如 图15 所示。


图15:深度学习模型具有通用性特点

在此之前,不同流派的机器学习算法理论和实现均不同,导致每个算法均要独立实现,如随机森林和支撑向量机(SVM)。但在深度学习框架下,不同模型的算法结构有较大的通用性,如常用于计算机视觉的卷积神经网络模型(CNN)和常用于自然语言处理的长期短期记忆模型(LSTM),都可以分为组网模块、梯度下降的优化模块和预测模块等。这使得抽象出统一的框架成为了可能,并大大降低了编写建模代码的成本。一些相对通用的模块,如网络基础算子的实现、各种优化算法等都可以由框架实现。建模者只需要关注数据处理,配置组网的方式,以及用少量代码串起训练和预测的流程即可。

在深度学习框架出现之前,机器学习工程师处于“手工作坊”生产的时代。为了完成建模,工程师需要储备大量数学知识,并为特征工程工作积累大量行业知识。每个模型是极其个性化的,建模者如同手工业者一样,将自己的积累形成模型的“个性化签名”。而今,“深度学习工程师”进入了工业化大生产时代,只要掌握深度学习必要但少量的理论知识,掌握Python编程,即可在深度学习框架上实现非常有效的模型,甚至与该领域最领先的模型不相上下。建模领域的技术壁垒面临着颠覆,也是新入行者的机遇。


图16:深度学习框架大大减低了AI建模难度

相关文章:

机器学习和深度学习综述

机器学习和深度学习综述 1. 人工智能、机器学习、深度学习的关系 近些年人工智能、机器学习和深度学习的概念十分火热,但很多从业者却很难说清它们之间的关系,外行人更是雾里看花。在研究深度学习之前,先从三个概念的正本清源开始。概括来说…...

SQL零基础入门学习(八)

SQL零基础入门学习(七) SQL 连接(JOIN) SQL join 用于把来自两个或多个表的行结合起来。 下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。 SQL JOIN SQL JOIN 子句用于把来自两个或多个表的行结合起来,基…...

若依系统如何集成qq邮件发送【超详细,建议收藏】

若依系统的部署博主就不在这儿阐述了,默认大家的电脑已经部署好了若依系统,这里直接开始集成邮件系统,首先我们得需要对qq邮箱进行配置;一套学不会你来打我😀; 一、开启我们的qq邮箱发送邮件的配置 1、先进…...

前端-CSS-zxst

CSS 层叠样式表,为了定义HTML标签的样式 内联样式 在标签内部通过 style 属性设置样式值样式名:样式值;样式名:样式值; 内部样式 在 head 标签内通过 style 标签选择器设置样式,供这个网页上的元素使用 外部样式 在 head 标签内通过 link 标签引入外部…...

合宙Air105|fonts库|mcu.ticks()|LuatOS-SOC接口|官方demo|学习(19):fonts库

基础资料 基于Air105开发板:Air105 - LuatOS 文档 上手:开发上手 - LuatOS 文档 探讨重点 官方fonts库函数介绍以及利用mcu.ticks()计算程序运行周期相关内容的学习及探讨。 软件版本 AIR105:LuatOSAIR105 base 22.12 bsp V0014 32bit …...

成都欢蓬电商:抖音直播卖药灰度测试通告

据报道,近日有MCN机构透露,目前抖音直播卖药为“测试项目,谨慎试跑中”; “仍处于灰度测试,至于测试多久,抖音官方确实没有答复,需要看第一阶段数据,然后定夺,预计4月份会纳入更多机…...

1.1计算机和编成语言

一、C 语言简介历史C 语言最初是作为 Unix 系统的开发工具而发明的。1969年,美国贝尔实验室的肯汤普森(Ken Thompson)与丹尼斯里奇(Dennis Ritchie)一起开发了Unix 操作系统。Unix 是用汇编语言写的,无法移…...

解析 xml 文件 - xml.etree ElementTree

目录1、导入模块 →\rightarrow→ 读取文件 →\rightarrow→ 获取根节点 →\rightarrow→ 获取根节点的标签与属性2、遍历一级子节点、获取子节点的标签 与 属性3、通过索引 获取数据4、Element.findall()、Element.find() - 按照 tag 值查找 子节点5、Element.iter() - 循环迭…...

LeetCode Cookbook 哈希表(collections.Counter()和collections.defaultdict())

好久不更了,这次一鼓作气,学完它! 文章目录LeetCode Cookbook 哈希表30. 串联所有单词的子串36. 有效的数独(很不错的循环题目)49. 字母异位词分组290. 单词规律447. 回旋镖的数量575. 分糖果594. 最长和谐子序列599. …...

spring boot项目中i18n和META-INF.spring下的文件的作用

目录标题一、resource下的文件二、i18n下messages_zh_CN.properties三、spring.factories文件四、org.springframework.boot.autoconfigure.AutoConfiguration.imports一、resource下的文件 org.springframework.boot.autoconfigure.AutoConfiguration.imports ; - …...

3年自动化测试经验,面试连20K都拿不到,现在都这么卷了吗····

我的情况 大概介绍一下个人情况,女,本科,三年多测试工作经验,懂python,会写脚本,会selenium,会性能,会自动化,然而到今天都没有收到一份offer!从2022年11月1…...

Python数据结构与算法篇(四)-- 链表的实现

实现线性表的另一种常用方式就是基于链接结构,用链接关系显式表示元素之间的顺序关联。基于链接技术实现的线性表称为链接表或者链表。 采用链接方式实现线性表的基本想法如下: 把表中的元素分别存储在一批独立的存储块(称为表的结点)里。保…...

【java基础】循环语句、中断控制语句

文章目录循环while循环for循环for each循环中断控制语句breakcontinue带标签的break(相当于goto)循环 在java中有3种循环,分别是while循环,for循环,for each循环 while循环 while循环的形式是 while(condition) statement int i 5;while …...

万字长文带你实战 Elasticsearch 搜索

ES 高级实战 前言 上篇我们讲到了 Elasticsearch 全文检索的原理《别只会搜日志了,求你懂点原理吧》,通过在本地搭建一套 ES 服务,以多个案例来分析了 ES 的原理以及基础使用。这次我们来讲下 Spring Boot 中如何整合 ES,以及如何在 Spring Cloud 微服务项目中使用 ES 来…...

Web网页测试全流程解析论Web自动化测试

1、功能测试 web网页测试中的功能测试,主要测试网页中的所有链接、数据库连接、用于在网页中提交或获取用户信息的表单、Cookie 测试等。 (1)查看所有链接: 测试从所有页面到被测特定域的传出链接。 测试所有内部链接。 测试链…...

初识Python——“Python”

各位CSDN的uu们你们好呀,今天进入到了我们的新专栏噢,Python是小雅兰的专业课,那么现在,就让我们进入Python的世界吧 计算机基础概念 什么是计算机? 什么是编程? 编程语言有哪些? Python背景知…...

LocalDateTime使用

开发中常常需要用到时间,随着jdk的发展,对于时间的操作已经摒弃了之前的Date等方法,而是采用了LocalDateTime方法,因为LocalDateTime是线程安全的。 下面我们来介绍一下LocalDateTime的使用。 时间转换 将字符串转换为时间格式…...

设计模式学习笔记 - 外观模式

设计模式学习笔记 - 外观模式一、影院管理问题二、传统方式解决影院管理问题三、外观模式介绍1、基本介绍2、原理类图四、外观模式解决影院管理问题五、外观模式在MyBatis框架应用的源码分析六、外观模式的注意事项和细节一、影院管理问题 组建一个家庭影院:DVD 播放…...

如何写出一份优秀的简历和求职信?

写一份优秀的简历和求职信是成功求职的重要一步。 01、简历 突出重点信息:把最重要的信息放在简历的前面,例如您的工作经验和教育背景等。 使用简明扼要的语言:在简历中使用简短的句子和简明扼要的语言,让招聘者能够快速了解您的…...

OpenGL超级宝典学习笔记:原子计数器

前言 本篇在讲什么 本篇为蓝宝书学习笔记 原子计数器 本篇适合什么 适合初学Open的小白 本篇需要什么 对C语法有简单认知 对OpenGL有简单认知 最好是有OpenGL超级宝典蓝宝书 依赖Visual Studio编辑器 本篇的特色 具有全流程的图文教学 重实践,轻理论&#…...

深圳/东莞/惠州师资比较强的CPDA数据分析认证

深圳/东莞/惠州师资比较强的CPDA数据分析认证培训机构 CPDA数据分析师认证是中国大数据领域有一定权威度的中高端人才认证,它不仅是中国较早大数据专业技术人才认证、更是中国大数据时代先行者,具有广泛的社会认知度和权威性。 无论是地方政府引进人才、…...

LeetCodeHOT100热题02

写在前面 主要是题目太多,所以和前面的分开来记录。有很多思路的图都来源于力扣的题解,如侵权会及时删除。不过代码都是个人实现的,所以有一些值得记录的理解。之前的算法系列参看: 剑指offer算法题01剑指offer算法题02 七、动…...

虹科Dimetix激光测距仪在锯切系统中的应用

HK-Dimetix激光测距仪——锯切系统应用 许多生产设施,例如金属服务中心,使用切割锯将每个客户的订单切割成一定长度。定长切割过程通常涉及卷尺和慢跑锯的传送带。但更简单的替代方法是使用虹科Dimetix非接触式激光距离传感器。 为了切断大长度的棒材&…...

FreeRTOS入门(02):任务基础使用与说明

文章目录目的创建任务任务调度任务控制延时函数任务句柄获取与修改任务优先级删除任务挂起与恢复任务强制任务离开阻塞状态空闲任务总结目的 任务(Task)是FreeRTOS中供用户使用的最核心的功能,本文将介绍任务创建与使用相关的基础内容。 本…...

ESP通过乐为物联控制灯,微信发送数值,ESP上传传感器数据

暂时放个程序 //ME->>{“method”: “update”,“gatewayNo”: “01”,“userkey”: “2b64c489d5f94237bcf2e23151bb7d01”}&^! //Ser->>{“f”:“message”,“p1”:“ok”}&^! //ME->>{“method”: “upload”,“data”:[{“Name”:“A1C”,“Val…...

Linux:共享内存api使用

代码&#xff1a; #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <string.h> #include <arpa/inet.h> #include <sys/un.h> #include <sys/ipc.h…...

android9.0 java静态库操作JNI实例 动态注册

一、java层 源码 目录&#xff1a;/Demo/java/com/android/simpleini/SimpleJNI.java package com.example.simplejni;import android.app.Activity; import android.os.Bundle; import android.widget.TextView;public class SimpleJNI {private IpoManagerService(Context …...

自定义复杂图片水印

我的社交能力还不如5岁儿童和狗。 文章目录前言一、主要工具类总结前言 之前写过一些简单的图片压缩和图片加水印&#xff1a;JAVA实现图片质量压缩和加水印 本次主要是针对图片加水印进行一个升级&#xff0c;图片水印自定义&#xff0c;自适应大小。 来&#xff0c;先看几…...

文章读后感——《人间清醒,内容为王》

观后感 人间清醒&#xff0c;内容为王 - 技术er究竟该如何写博客&#xff1f;1024上海嘉年华之敖丙演讲观后感。 致敬愿意带领后生的前辈——哈哥 哈哥&#xff0c;《人间清醒&#xff0c;内容为王》这篇&#xff0c;我的鱼获&#xff0c; 是里面传递出来写技术博客的思维与想法…...

51单片机入门 - 驱动多位数码管

我使用的是普中51单片机开发板A2套件&#xff08;2022&#xff09;&#xff0c;驱动数码管可能需要参考电路原理图。开发环境的搭建教程在本专栏的 51单片机开发环境搭建 - VS Code 从编写到烧录 有过介绍。 关于我的软硬件环境信息&#xff1a; Windows 10STC89C52RCSDCC &am…...