吴恩达深度学习笔记:序列模型(Sequence Models) 1.3-1.4

目录

  • 第五门课 序列模型(Sequence Models)
    • 第一周 循环序列模型(Recurrent Neural Networks)
      • 1.3 循环神经网络模型(Recurrent Neural Network Model)
      • 1.4 通过时间的反向传播(Backpropagation through time)

第五门课 序列模型(Sequence Models)

第一周 循环序列模型(Recurrent Neural Networks)

1.3 循环神经网络模型(Recurrent Neural Network Model)

上节视频中,你了解了我们用来定义序列学习问题的符号。现在我们讨论一下怎样才能建立一个模型,建立一个神经网络来学习𝑋到𝑌的映射。

可以尝试的方法之一是使用标准神经网络,在我们之前的例子中,我们有 9 个输入单词。想象一下,把这 9 个输入单词,可能是 9 个 one-hot 向量,然后将它们输入到一个标准神经网络中,经过一些隐藏层,最终会输出 9 个值为 0 或 1 的项,它表明每个输入单词是否是人名的一部分。

在这里插入图片描述
但结果表明这个方法并不好,主要有两个问题:
一、是输入和输出数据在不同例子中可以有不同的长度,不是所有的例子都有着同样输入长度𝑇𝑥或是同样输出长度的𝑇𝑦。即使每个句子都有最大长度,也许你能够填充(pad)或零填充(zero pad)使每个输入语句都达到最大长度,但仍然看起来不是一个好的表达方式。

二、一个像这样单纯的神经网络结构,它并不共享从文本的不同位置上学到的特征。具体来说,如果神经网络已经学习到了在位置 1 出现的 Harry 可能是人名的一部分,那么如果Harry 出现在其他位置,比如𝑥<𝑡>时,它也能够自动识别其为人名的一部分的话,这就很棒了。这可能类似于你在卷积神经网络中看到的,你希望将部分图片里学到的内容快速推广到图片的其他部分,而我们希望对序列数据也有相似的效果。和你在卷积网络中学到的类似,用一个更好的表达方式也能够让你减少模型中参数的数量。

之前我们提到过这些(上图编号 1 所示的𝑥<1>……𝑥<𝑡>……𝑥<𝑇𝑥>)都是 10,000 维的 onehot 向量,因此这会是十分庞大的输入层。如果总的输入大小是最大单词数乘以 10,000,那么第一层的权重矩阵就会有着巨量的参数。但循环神经网络就没有上述的两个问题。

那么什么是循环神经网络呢?我们先建立一个(下图编号 1 所示)。如果你以从左到右的顺序读这个句子,第一个单词就是,假如说是𝑥
<1>,我们要做的就是将第一个词输入一个神经网络层,我打算这样画,第一个神经网络的隐藏层,我们可以让神经网络尝试预测输出,判断这是否是人名的一部分。循环神经网络做的是,当它读到句中的第二个单词时,假设是𝑥<2>,它不是仅用𝑥<2>就预测出𝑦^<2>,他也会输入一些来自时间步 1 的信息。具体而言,时间步 1 的激活值就会传递到时间步 2。然后,在下一个时间步,循环神经网络输入了单词
𝑥<3>,然后它尝试预测输出了预测结果𝑦<3>,等等,一直到最后一个时间步,输入了𝑥<𝑇𝑥>,然后输出了𝑦<𝑇𝑦>。至少在这个例子中
𝑇𝑥 = 𝑇𝑦,同时如果𝑇𝑥和𝑇𝑦不相同,这个结构会需要作出一些改变。所以在每一个时间步中,循环神经网络传递一个激活值到下一个时间步中用于计算。

在这里插入图片描述
要开始整个流程,在零时刻需要构造一个激活值𝑎<0>,这通常是零向量。有些研究人员会随机用其他方法初始化𝑎<0>,不过使用零向量作为零时刻的伪激活值是最常见的选择,因此我们把它输入神经网络。

在一些研究论文中或是一些书中你会看到这类神经网络,用这样的图形来表示(上图编号 2 所示),在每一个时间步中,你输入𝑥<𝑡>然后输出𝑦<𝑡>。然后为了表示循环连接有时人们会像这样画个圈,表示输回网络层,有时他们会画一个黑色方块,来表示在这个黑色方块处会延迟一个时间步。我个人认为这些循环图很难理解,所以在本次课程中,我画图更倾向于使用左边这种分布画法(上图编号 1 所示)。不过如果你在教材中或是研究论文中看到了右边这种图表的画法(上图编号 2 所示),它可以在心中将这图展开成左图那样。

循环神经网络是从左向右扫描数据,同时每个时间步的参数也是共享的,所以下页幻灯片中我们会详细讲述它的一套参数,我们用𝑊ax来表示管理着从𝑥<1>到隐藏层的连接的一系列参数,每个时间步使用的都是相同的参数𝑊ax。而激活值也就是水平联系是由参数𝑊𝑎𝑎决定的,同时每一个时间步都使用相同的参数𝑊𝑎𝑎,同样的输出结果由𝑊ya决定。下图详细讲述这些参数是如何起作用。

在这里插入图片描述
在这个循环神经网络中,它的意思是在预测𝑦^<3>时,不仅要使用𝑥<3>的信息,还要使用来自𝑥<1>和𝑥<2>的信息,因为来自𝑥<1>的信息可以通过这样的路径(上图编号 1 所示的路径)来帮助预测𝑦<3>。这个循环神经网络的一个缺点就是它只使用了这个序列中之前的信息来做出预测,尤其当预测𝑦<3>时,它没有用到𝑥<4>,𝑥<5>,𝑥<6>等等的信息。所以这就有一个问题,因为如果给定了这个句子,“Teddy Roosevelt was a great President.”,为了判断 Teddy是否是人名的一部分,仅仅知道句中前两个词是完全不够的,还需要知道句中后部分的信息,这也是十分有用的,因为句子也可能是这样的,“Teddy bears are on sale!”。因此如果只给定前三个单词,是不可能确切地知道 Teddy 是否是人名的一部分,第一个例子是人名,第二个例子就不是,所以你不可能只看前三个单词就能分辨出其中的区别。

所以这样特定的神经网络结构的一个限制是它在某一时刻的预测仅使用了从序列之前的输入信息并没有使用序列中后部分的信息,我们会在之后的双向循环神经网络(BRNN)的视频中处理这个问题。但对于现在,这个更简单的单向神经网络结构就够我们来解释关键概念了,之后只要在此基础上作出修改就能同时使用序列中前面和后面的信息来预测𝑦^<3>,不过我们会在之后的视频讲述这些内容,接下来我们具体地写出这个神经网络计算了些什么。

在这里插入图片描述
这里是一张清理后的神经网络示意图,和我之前提及的一样,一般开始先输入𝑎<0>,它是一个零向量。接着就是前向传播过程,先计算激活值𝑎<1>,然后再计算𝑦<1>。
𝑎<1> = 𝑔1(𝑊𝑎𝑎𝑎<0> + 𝑊𝑎𝑥𝑥<1> + 𝑏𝑎)
𝑦^<1>= 𝑔2(𝑊𝑦𝑎𝑎<1> + 𝑏𝑦)

我将用这样的符号约定来表示这些矩阵下标,举个例子𝑊ax,第二个下标意味着𝑊ax要乘以某个𝑥类型的量,然后第一个下标𝑎表示它是用来计算某个𝑎类型的变量。同样的,可以看出这里的𝑊ya乘上了某个𝑎类型的量,用来计算出某个𝑦^类型的量。

循环神经网络用的激活函数经常是 tanh,不过有时候也会用 ReLU,但是 tanh 是更通常的选择,我们有其他方法来避免梯度消失问题,我们将在之后进行讲述。选用哪个激活函数是取决于你的输出𝑦,如果它是一个二分问题,那么我猜你会用 sigmoid 函数作为激活函数,如果是𝑘类别分类问题的话,那么可以选用 softmax 作为激活函数。不过这里激活函数的类型取决于你有什么样类型的输出𝑦,对于命名实体识别来说𝑦只可能是 0 或者 1,那我猜这里第二个激活函数𝑔可以是 sigmoid 激活函数。

更一般的情况下,在𝑡时刻,
𝑎<𝑡> = 𝑔1(𝑊𝑎𝑎𝑎<𝑡−1> + 𝑊𝑎𝑥𝑥<𝑡> + 𝑏𝑎)
𝑦^<𝑡>= 𝑔2(𝑊𝑦𝑎𝑎<𝑡> + 𝑏𝑦)

所以这些等式定义了神经网络的前向传播,你可以从零向量𝑎<0>开始,然后用𝑎<0>和𝑥<1>来计算出𝑎<1>和𝑦<1>,然后用𝑥<2>和𝑎<1>一起算出𝑎<2>和𝑦<2>等等,像图中这样,从左到右完成前向传播。

现在为了帮我们建立更复杂的神经网络,我实际要将这个符号简化一下,我在下一张幻灯片里复制了这两个等式(上图编号 1 所示的两个等式)。

在这里插入图片描述
接下来为了简化这些符号,我要将这部分(𝑊aa𝑎<𝑡−1> + 𝑊ax𝑥<𝑡>)(上图编号 1 所示)以更简单的形式写出来,我把它写做𝑎
<𝑡> = 𝑔(𝑊𝑎[𝑎<𝑡−1>, 𝑥<𝑡>] + 𝑏𝑎)(上图编号 2 所示),那么左右两边划线部分应该是等价的。所以我们定义𝑊𝑎的方式是将矩阵𝑊𝑎𝑎和矩阵𝑊𝑎𝑥水平并列放置,[𝑊𝑎𝑎 ⋮ 𝑊𝑎𝑥] = 𝑊𝑎(上图编号 3 所示)。举个例子,如果𝑎是 100 维的,然后延续之前的例子,𝑥是 10,000 维的,那么𝑊𝑎𝑎就是个(100,100)维的矩阵,𝑊𝑎𝑥就是个(100,10,000)维的矩阵,因此如果将这两个矩阵堆起来,𝑊𝑎就会是个(100,10,100)维的矩阵。

用这个符号([𝑎<𝑡−1>, 𝑥<𝑡>])的意思是将这两个向量堆在一起,我会用这个符号表示,即[𝑎<𝑡−1>𝑥<𝑡>](上图编号 4 所示),最终这就是个 10,100 维的向量。你可以自己检查一下,用这个矩阵乘以这个向量,刚好能够得到原来的量,因为此时,矩阵[𝑊𝑎𝑎 ⋮ 𝑊𝑎𝑥]乘以[𝑎<𝑡−1>𝑥<𝑡>],刚好等于𝑊𝑎𝑎𝑎<𝑡−1> + 𝑊𝑎𝑥𝑥<𝑡>,刚好等于之前的这个结论(上图编号 5 所示)。这种记法的好处是我们可以不使用两个参数矩阵𝑊𝑎𝑎和𝑊𝑎𝑥,而是将其压缩成一个参数矩阵𝑊𝑎,所以当我们建立更复杂模型时这就能够简化我们要用到的符号。

同样对于这个例子(𝑦^<𝑡>= 𝑔(𝑊𝑦𝑎𝑎<𝑡> + 𝑏𝑦)),我会用更简单的方式重写,𝑦^<𝑡>=𝑔(𝑊𝑦𝑎<𝑡> + 𝑏𝑦)(上图编号 6 所示)。现在𝑊𝑦和𝑏𝑦符号仅有一个下标,它表示在计算时会输出什么类型的量,所以𝑊𝑦就表明它是计算y类型的量的权重矩阵,而上面的𝑊𝑎和𝑏𝑎则表示这些参数是用来计算𝑎类型或者说是激活值的。

在这里插入图片描述
你现在知道了基本的循环神经网络,下节课我们会一起来讨论反向传播,以及你如何能够用 RNN 进行学习。

1.4 通过时间的反向传播(Backpropagation through time)

之前我们已经学过了循环神经网络的基础结构,在本节视频中我们将来了解反向传播是怎样在循环神经网络中运行的。和之前一样,当你在编程框架中实现循环神经网络时,编程框架通常会自动处理反向传播。但我认为,在循环神经网络中,对反向传播的运行有一个粗略的认识还是非常有用的,让我们来一探究竟。

在这里插入图片描述
在之前你已经见过对于前向传播(上图蓝色箭头所指方向)怎样在神经网络中从左到右地计算这些激活项,直到输出所有地预测结果。而对于反向传播,我想你已经猜到了,反向传播地计算方向(上图红色箭头所指方向)与前向传播基本上是相反的。

在这里插入图片描述
我们来分析一下前向传播的计算,现在你有一个输入序列, x < 1 > x^{<1>} x<1> x < 2 > x^{<2>} x<2> x < 3 > x^{<3>} x<3>一直到 x < T x > x^{<Tx>} x<Tx>,然后用 x < 1 > x^{<1>} x<1>还有 a < 0 > a^{<0>} a<0>计算出时间步 1 的激活项,再用 x < 2 > x^{<2>} x<2> a < 1 > a^{<1>} a<1>计算出 a < 2 > a^{<2>} a<2>,然后计算 a < 3 > a^{<3>} a<3>等等,一直到 a < T x > a^{<Tx>} a<Tx>

为了真正计算出 a < 1 > a^{<1>} a<1>,你还需要一些参数, W a W_a Wa b a b_a ba,用它们来计算出 a < 1 > a^{<1>} a<1>。这些参数在之后的每一个时间步都会被用到,于是继续用这些参数计算 a < 2 > a^{<2>} a<2> a < 3 > a^{<3>} a<3>等等,所有的这些激活项都要取决于参数 W a W_a Wa b a b_a ba。有了 a < 1 > a^{<1>} a<1>,神经网络就可以计算第一个预测值 y ^ < 1 > \hat{y}^{<1>} y^<1>,接着到下一个时间步,继续计算出 y ^ < 2 > \hat{y}^{<2>} y^<2> y ^ < 3 > \hat{y}^{<3>} y^<3>,等等,一直到 y ^ < T y > \hat{y}^{<Ty>} y^<Ty>。为了计算出 y ^ \hat{y} y^,需要参数 W y W_y Wy b y b_y by,它们将被用于所有这些节点。

在这里插入图片描述
然后为了计算反向传播,你还需要一个损失函数。我们先定义一个元素损失函数(上图编号 1 所示)

L < t > ( y ^ < t > , y < t > ) = − y < t > l o g y ^ < t > − ( 1 − y ^ < t > ) 𝑙 𝑜 𝑔 ( 1 − y ^ < t > ) L^{<t>}(\hat{y}^{<t>}, y^{<t>}) = −y^{<t>}log \hat{y}^{<t>}− (1 − \hat{y}^{<t>})𝑙𝑜𝑔(1 − \hat{y}^{<t>}) L<t>(y^<t>,y<t>)=y<t>logy^<t>(1y^<t>)log(1y^<t>)

它对应的是序列中一个具体的词,如果它是某个人的名字,那么 y < t > y^{<t>} y<t>的值就是 1,然后神经网络将输出这个词是名字的概率值,比如 0.1。我将它定义为标准逻辑回归损失函数,也叫交叉熵损失函数(Cross Entropy Loss),它和之前我们在二分类问题中看到的公式很像。所以这是关于单个位置上或者说某个时间步𝑡上某个单词的预测值的损失函数。

现在我们来定义整个序列的损失函数,将𝐿定义为(上图编号 2 所示)

L ( y ^ , y ) = ∑ t = 1 T x L < t > ( y ^ < t > , y < t > ) L(\hat{y},y) = \sum_{t=1}^{T_x} {L^{<t>}(\hat{y}^{<t>},y^{<t>})} L(y^,y)=t=1TxL<t>(y^<t>,y<t>)

在这个计算图中,通过 y ^ < t > \hat{y}^{<t>} y^<t>可以计算对应的损失函数,于是计算出第一个时间步的损失函数(上图编号 3 所示),然后计算出第二个时间步的损失函数,然后是第三个时间步,一直到最后一个时间步,最后为了计算出总体损失函数,我们要把它们都加起来,通过下面的等式(上图编号 2 所示的等式)计算出最后的𝐿(上图编号 4 所示),也就是把每个单独时间步的损失函数都加起来。

这就是完整的计算图,在之前的例子中,你已经见过反向传播,所以你应该能够想得到反向传播算法需要在相反的方向上进行计算和传递信息,最终你做的就是把前向传播的箭头都反过来,在这之后你就可以计算出所有合适的量,然后你就可以通过导数相关的参数,用梯度下降法来更新参数。

在这个反向传播的过程中,最重要的信息传递或者说最重要的递归运算就是这个从右到左的运算,这也就是为什么这个算法有一个很别致的名字,叫做“通过(穿越)时间反向传播(backpropagation through time)”。取这个名字的原因是对于前向传播,你需要从左到右进行计算,在这个过程中,时刻𝑡不断增加。而对于反向传播,你需要从右到左进行计算,就像时间倒流。“通过时间反向传播”,就像穿越时光,这种说法听起来就像是你需要一台时光机来实现这个算法一样。

在这里插入图片描述
希望你大致了解了前向和反向传播是如何在 RNN 中工作的,到目前为止,你只见到了RNN 中一个主要的例子,其中输入序列的长度和输出序列的长度是一样的。在下节课将展示更多的 RNN 架构,这将让你能够处理一些更广泛的应用。

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

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

相关文章

语义分割(semantic segmentation)

语义分割(semantic segmentation) 文章目录 语义分割(semantic segmentation)图像分割和实例分割代码实现 语义分割指将图片中的每个像素分类到对应的类别&#xff0c;语义区域的标注和预测是 像素级的&#xff0c;语义分割标注的像素级的边界框显然更加精细。应用&#xff1a…

C++ —— string类(上)

目录 string的介绍 string类功能的使用介绍 constructor —— 构造 介绍使用&#xff08;1&#xff09;&#xff08;2&#xff09;&#xff08;4&#xff09; &#xff1a;构造、拷贝构造、带参构造 介绍&#xff08;3&#xff09;&#xff1a;拷贝string类对象的一部分字符…

Python小白学习教程从入门到入坑------第三十二课 生成器(语法进阶)

目录 一、生成器 generator 1.1 生成器表达式 1.1.1 表达式一 1.1.2 表达式二 二、可迭代对象、迭代器、生成器三者之间的关系 2.1 定义与特性 2.2 关系与区别 一、生成器 generator 在Python中&#xff0c;生成器&#xff08;Generators&#xff09;是一种用于迭代对象…

商业iOS端路由架构演进

背景 目前商业SDK中的点击事件&#xff0c;会根据不同的「事件类型」「业务类型」&#xff0c;去执行不同的路由跳转逻辑&#xff0c;然而不同的跳转事件内部又有着很复杂的跳转逻辑&#xff0c; 痛点 不同的跳转逻辑之间存在耦合 例如&#xff0c;在deeplink的跳转逻辑之中…

数据结构(单向链表——c语言实现)

链式存储的优缺点&#xff1a; 优点&#xff1a; 1、动态分配内存&#xff1a; 链式存储不需要在数据插入之前分配固定大小的数组或内存块&#xff0c;因此它更适合存储动态变化的数据 2、高效的插入和删除操作&#xff1a; 在链表中插入或删除元素只需要调整相邻节点的指…

【SQL】E-R模型(实体-联系模型)

目录 一、介绍 1、实体集 定义和性质 属性 E-R图表示 2. 联系集 定义和性质 属性 E-R图表示 一、介绍 实体-联系数据模型&#xff08;E-R数据模型&#xff09;被开发来方便数据库的设计&#xff0c;它是通过允许定义代表数据库全局逻辑结构的企业模式&#xf…

Pytest-Bdd-Playwright 系列教程(12):步骤参数 parsers参数解析

Pytest-Bdd-Playwright 系列教程&#xff08;12&#xff09;&#xff1a;步骤参数 & parsers参数解析 前言一、什么是步骤参数&#xff1f;二、pytest-bdd 的步骤参数用法2.1 简单字符串解析2.2 自定义正则表达式解析2.3 参数类型转换 三、案例&#xff1a;基于 pytest-bdd…

vscode 快捷键生成代码

1. &#xff01;Tab/回车键 便捷生成html初始结构代码&#xff08;注意&#xff01;是英文字符&#xff09; 2. Alt B 快捷默认浏览器打开 3. Ctrl / 增加注释 4. 光标放到该行即可&#xff0c;直接ctrlC&#xff0c;ctrlv&#xff0c;即可在下面复制一行 5. 选中要修改的标签…

前端接入Paymax支付请求

材料指南 开发者平台 &#xff1a;配置开发必备信息&#xff08;appid&#xff0c;商户号&#xff0c;公钥私钥&#xff09;,此处与请求参数appId、merchantNo有关。 PayerMax Apis&#xff1a;各支付接口信息,本文以收银台支付API为请求展开,请求url为orderAndPay,测试环境基…

Jmeter的后置处理器(二)

5--JSR223 PostProcessor 功能特点 自定义后处理逻辑&#xff1a;使用脚本语言编写自定义的后处理逻辑。支持多种脚本语言&#xff1a;支持 Groovy、JavaScript、BeanShell 等脚本语言。动态参数传递&#xff1a;将提取的数据存储为变量&#xff0c;供后续请求使用。灵活性高…

CSS遮罩:mask

CSS属性 mask 允许使用者通过遮罩或者裁切特定区域的图片的方式来隐藏一个元素的部分或者全部可见区域。 // 一般用位图图片做遮罩 mask: url(~/assets/images/mask.png); mask-size: 100% 100%;// 使用 SVG 图形中的形状来做遮罩 mask: url(~/assets/images/mask.svg#star);…

Zmap+python脚本+burp实现自动化Fuzzing测试

声明 学习视频来自 B 站UP主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 ✍&#x1f3fb;作者简介&#xff1a;致…

15. Python中的os.path模块/路径操作相关

这个专栏记录我学习/科研过程中遇到的一些小问题以及解决方案&#xff0c;一些问题可能比较蠢请见谅。自用&#xff0c;仅供参考。 ------------------------------------------------------------------------------------ Python中的os.path模块详解&#xff08;包括一些常…

鸿蒙实战:页面跳转传参

文章目录 1. 实战概述2. 实现步骤2.1 创建鸿蒙项目2.2 编写首页代码2.3 新建第二个页面 3. 测试效果4. 实战总结 1. 实战概述 本次实战&#xff0c;学习如何在HarmonyOS应用中实现页面间参数传递。首先创建项目&#xff0c;编写首页代码&#xff0c;实现按钮跳转至第二个页面并…

NLP论文速读(EMNLP 2024)|动态奖励与提示优化来帮助语言模型的进行自我对齐

论文速读|Dynamic Rewarding with Prompt Optimization Enables Tuning-free Self-Alignment of Language Models 论文信息&#xff1a; 简介: 本文讨论的背景是大型语言模型&#xff08;LLMs&#xff09;的自我对齐问题。传统的LLMs对齐方法依赖于昂贵的训练和人类偏好注释&am…

Label-studio-ml-backend 和YOLOV8 YOLO11自动化标注,目标检测,实例分割,图像分类,关键点估计,视频跟踪

这里写目录标题 1.目标检测 Detection2.实例分割 segment3.图像分类 classify4.关键点估计 Keypoint detection5.视频帧检测 video detect6.视频帧分类 video classify7.旋转目标检测 obb detect8.替换yolo11模型 给我点个赞吧&#xff0c;谢谢了附录coco80类名称 笔记本 华为m…

图像处理学习笔记-20241118

文章目录 霍夫变换基本原理霍夫变换的步骤使用 OpenCV 实现直线检测示例&#xff1a;标准霍夫变换 示例&#xff1a;概率霍夫变换参数解释霍夫变换检测圆 基于GAN的样本生成GAN的基本原理基于GAN的数据增广流程实现代码示例 同态滤波&#xff08;Homomorphic Filtering&#xf…

视频融合×室内定位×数字孪生

随着物联网技术的迅猛发展&#xff0c;室内定位与视频融合技术在各行各业中得到了广泛应用。不仅能够提供精确的位置信息&#xff0c;还能通过实时视频监控实现全方位数据的可视化。 与此同时&#xff0c;数字孪生等技术的兴起为智慧城市、智慧工厂等应用提供了强大支持&#…

当科技照进现实 机器人带着机器狗乘空轨

湖北日报讯&#xff08;记者魏铼、通讯员张璨龙&#xff09;11月14日&#xff0c;武汉东湖高新区空轨高新大道站&#xff0c;在光谷装上“智慧大脑”的人形机器人&#xff0c;乘空轨&#xff0c;看AI展&#xff0c;与小朋友在生态大走廊斗舞。 京天博特&#xff1a;光谷“智慧大…

freertos任务调度学习

首先创建任务&#xff0c;创建好任务后&#xff0c;开启任务调度器&#xff0c;任务才能执行 1.开启任务调度器 2.启动第一个任务 3.任务切换