3.1-RNN存在的问题以及LSTM的结构

文章目录

  • 1 RNN存在的问题
    • 1.1梯度消失问题
    • 1.2梯度爆炸问题
    • 1.3梯度爆炸的对策
  • 2梯度消失的对策——LSTM
    • 2.1输出门
    • 2.2遗忘门
    • 2.3输入门
    • 2.4总结
    • 2.5 LSTM梯度的流动

1 RNN存在的问题

RNN存在梯度消失和梯度爆炸的问题。

  1. 书上以下图的这句话为例,进行说明;为了正确预测出问号处的单词:

    1. 一方面需要利用RNN将前面的所有信息编码并保存在RNN层的隐藏状态中;

    在这里插入图片描述

    1. 另一方面,可以通过反向传播,将待预测单词位置处的梯度在水平方向上传递到过去(如下图所示),这种有意义的梯度,最终更新模型的权重,使得模型能够学习时间方向上的依赖关系,最终正确做出预测;

      在这里插入图片描述

  2. 但是如果梯度在反向传播的过程中,梯度越向过去传播,越小,则则靠前的模型权重就得不到更新,从而无法让模型编码有用的信息,无法让模型学习并利用水平方向上长期的依赖关系来进行预测;

  3. 此外,如果梯度越来越大,会出现梯度爆炸,这会使得模型的学习变得不稳定,也是一个问题;

  4. 而这两种问题在RNN中都存在;

  5. 下面仅仅从时间方向上看梯度的传播(如下图所示);纵向来的梯度会和水平方向上传递来的梯度相加;因此仅仅分析水平方向上梯度的变化的结论在考虑纵向时也是适用的;

    在这里插入图片描述

1.1梯度消失问题

  1. y = t a n h ( x ) y=tanh(x) y=tanh(x)函数的导数为: y ′ = 1 − y 2 y'=1-y^2 y=1y2;下图是原函数与导数的图像:

    在这里插入图片描述

  2. 由图像可知,导数值小于 1.0,并且随着 x 远离 0,它的值在变小;因此导数永远小于1,即局部梯度是小数,那么输出侧的梯度乘上局部梯度就会变小;并且如果 x 远离 0,局部梯度会非常小;那么经过这么一个tanh节点,梯度就会变小一次;而水平方向上有好多个tanh节点,那么传播到非常过去的节点,梯度甚至有可能会消失。

  3. RNN 层的激活函数一般使用 tanh 函数,但是如果改为 ReLU 函数, 则有希望抑制梯度消失的问题(当 ReLU 的输入为 x 时,它的输出是 max(0, x))。这是因为,在 ReLU 的情况下,当 x 大于 0 时,反向传播将上游的梯度原样传递到下游,梯度不会“退化”。而且可以在ReLU之前将输入全部变到正数,这样就完全是x了;

1.2梯度爆炸问题

简单起见, 这里我们忽略反向传播图中的 tanh 节点;

加法节点梯度不变,因此就没画出来了;

  1. 那么简单来看,图中只剩矩阵乘法的节点,如下图所示:

    在这里插入图片描述

  2. 前面说过矩阵相乘的梯度传播公式;这里每经过一个矩阵乘法节点,都要乘上一个局部梯度 W h \boldsymbol{W}_h Wh​;

    1. 由于RNN是使用一组权重参数的,因此这里每次乘的权重是一样的;
  3. 接下来书上初始化了一个梯度为1的矩阵,然后执行了多次局部梯度,并计算了每次反向传播之后梯度的L2范数;代码如下图所示:

    1. L2 范数定义为每个元素的平方和的平方根,因此当向量中某个元素很大时,整个范数值就会被拉大;
    2. 这就使得 L2 范数对离群值和噪声更加敏感,因为这些值在平方运算中会被放大
    3. 所以本书中就计算了这个范数,这样可以直观的去看一下梯度是不是有爆炸的趋势

    在这里插入图片描述

  4. 下图是实验结果;可见确实有爆炸的趋势;梯度爆炸会导致数值过大,甚至溢出,影响神经网络的学习;

    在这里插入图片描述

  5. 但是有一个问题,如果权重是一个标量,那么如果权重大于1,则肯定梯度会越来越大的;权重是一个矩阵的时候,就又涉及到矩阵的奇异值这个概念了(还需要深入了解);

    1. 简单而言,矩阵的奇异值表示数据的离散程度
    2. 根据这个奇异值(更准确地说是多个奇异值中的最大值)是否大于 1,可以预测梯度大小的变化
    3. 如果奇异值的最大值大于 1,则可以预测梯度很有可能会呈指数级增加;而如果奇异值的最大值小于 1,则可以判断梯度会呈指数级减小;详见论文;

1.3梯度爆炸的对策

  1. 梯度爆炸的对策为**梯度裁剪**;

  2. 裁剪按照下式进行:

    1. 将神经网络所有的参数整合到一起,合成一个”向量“ g ^ \hat{\boldsymbol{g}} g^​;
    2. t h r e s h o l d threshold threshold为梯度阈值;
    3. ∥ g ^ ∥ \|\hat{\boldsymbol{g}}\| g^为L2范数;

    i f ∥ g ^ ∥ ⩾ t h r e s h o l d : g ^ = t h r e s h o l d ∥ g ^ ∥ g ^ (1) \begin{aligned} if\; \|\hat{\boldsymbol{g}}\|&\geqslant threshold:\\ \hat{\boldsymbol{g}}&=\frac{threshold}{\|\hat{\boldsymbol{g}}\|}\hat{\boldsymbol{g}} \end{aligned} \tag{1} ifg^g^threshold:=g^thresholdg^(1)

  3. 下面的代码是书上的一个小例子:

    def clip_grads(grads, max_norm):total_norm = 0for grad in grads:total_norm += np.sum(grad**2) # 对梯度矩阵的所有元素求和;因为公式中就是把所有的梯度组合在一起,然后求的范数;total_norm = np.sqrt(total_norm) # 二范数rate = max_norm / (total_norm + 1e-6) # 公式的变形if rate < 1:for grad in grads:grad *= rateif __name__ == '__main__':dW1 = np.random.rand(3, 3) * 10dW2 = np.random.rand(3, 3) * 10grads = [dW1, dW2]  # 对应梯度裁剪公式里面的gmax_norm = 5.0 # 范数阈值clip_grads(grads, max_norm)pass
    

2梯度消失的对策——LSTM

通过改变RNN的网络结构,改变了存放”记忆“的载体;引入了门结构;即Gated RNN;

这里先看看LSTM;后面再看一下书上的GRU;

  1. LSTM这里的改进涉及:增加了一个记忆单元、输入门、输出门、遗忘门;

  2. 下图为RNN和LSTM结构的简略对比:

    1. LSTM多了记忆单元 c \boldsymbol{c} c​;
    2. 这个记忆单元仅在 LSTM 层内部接收和传递数据,不像 h \boldsymbol{h} h​那样还要传递给上面的层;
    3. 结合前面说的TRNN层,虽然我们说水平方向上有多个RNN层,但本质上就是一组参数,这些RNN层其实就是一个;后面的TLSTM也是这样;因此,书上说,记忆单元在 LSTM 层内部结束工作,不向其他层输出,对外部不可见。

    在这里插入图片描述

2.1输出门

概括: t a n h ( c t ) tanh(\boldsymbol{c}_t) tanh(ct)编码了目前时刻为止所需要的信息,用输出门来控制信息中各个元素的重要程度;

  1. LSTM的记忆单元 c t \boldsymbol{c}_t ct保存了从过去到时刻 t t t的所有必要信息,基于这个充满必要信息的记忆,向外部的层(和下一时刻的 LSTM)输出隐藏状态 h t \boldsymbol{h}_t ht​;如下图所示:

    1. LSTM输出经过tanh变换后的记忆单元
    2. c t \boldsymbol{c}_t ct基于 c t − 1 \boldsymbol{c}_{t-1} ct1 h t − 1 \boldsymbol{h}_{t-1} ht1 x t \boldsymbol{x}_t xt​经过”某种计算“得到;
    3. 隐藏状态 h t = t a n h ( c t ) \boldsymbol{h}_{t}=tanh(\boldsymbol{c}_t) ht=tanh(ct);即对 c t \boldsymbol{c}_t ct各个元素应用tanh函数;

    在这里插入图片描述

  2. 门的概念:

    1. 从字面意义上看,门可以用于控制开合
    2. 但LSTM中的门,还可以控制将门打开多少来控制数据的流动;
    3. 门的开合程度由 0.0 ~1.0 的实数表示(1.0 为全开);重点是,门的开合程度也是(自动) 从数据中学习到的
  3. 接下来用到的函数的区别:

    1. tanh函数:输出是 −1.0 ~ 1.0 的实数;表示某种被编码的“信息”的强弱(程度);
    2. sigmoid函数:输出是 0.0~1.0 的实数;表示数据流出的比例;如同前面二分类时用它来转化为概率一样;
    3. 因此,在大多数情况下,门使用 sigmoid 函数作为激活函数,而包含实质信息的数据则使用 tanh 函数作为激活函数
  4. 综合2和3,我们可以说:

    1. 有专门的权重参数用于控制门的开合程度,这些权重参数通过学习被更新
    2. sigmoid函数用于求门的开合程度,即将权重参数计算之后的结果输出到0-1之间;
  5. 输出门:对 t a n h ( c t ) tanh(\boldsymbol{c}_t) tanh(ct)施加门,针对 t a n h ( c t ) tanh(\boldsymbol{c}_t) tanh(ct)中的每个元素,调整它们作为下一时刻的隐藏状态的重要程度;

    1. 由于这个门管理当前时刻的输出,即隐藏状态 h t \boldsymbol{h}_t ht,所以称为输出门

    2. 输出门的公式如下:
      o = σ ( x t W x ( o ) + h t − 1 W h ( o ) + b ( o ) ) (2) \boldsymbol{o}=\sigma\left(\boldsymbol{x}_t \boldsymbol{W}_x^{(\mathrm{o})}+\boldsymbol{h}_{t-1} \boldsymbol{W}_h^{(\mathrm{o})}+\boldsymbol{b}^{(\mathrm{o})}\right) \tag{2} o=σ(xtWx(o)+ht1Wh(o)+b(o))(2)

      1. 和单纯的RNN的公式如出一辙;输入 x t \boldsymbol{x}_t xt有权重 W x ( o ) \boldsymbol{W}_x^{(\mathrm{o})} Wx(o),上一时刻的隐藏状态 h t − 1 \boldsymbol{h}_{t-1} ht1有权重 W h ( o ) \boldsymbol{W}_h^{(\mathrm{o})} Wh(o) σ ( ) \sigma() σ()表示sigmoid函数;结果 o \boldsymbol{o} o应该是一个行向量;

      2. 然后将 o \boldsymbol{o} o t a n h ( c t ) tanh(\boldsymbol{c}_t) tanh(ct)的对应元素相乘,作为输出 h t \boldsymbol{h}_t ht,如下式所示;对应元素相乘即哈达玛积(Hadamard product),用 ⊙ \odot 来表示;
        h t = o ⊙ tanh ⁡ ( c t ) (3) \boldsymbol{h}_t=\boldsymbol{o} \odot \tanh \left(\boldsymbol{c}_t\right) \tag{3} ht=otanh(ct)(3)

    3. 下图是加入输出门之后的LSTM结构图:

      在这里插入图片描述

2.2遗忘门

  1. 前面说了: c t \boldsymbol{c}_t ct基于 c t − 1 \boldsymbol{c}_{t-1} ct1 h t − 1 \boldsymbol{h}_{t-1} ht1 x t \boldsymbol{x}_t xt经过”某种计算“得到;
  2. 遗忘门的作用:对上一个LSTM单元传递来的记忆信息进行取舍,告诉模型需要忘记什么;因此设置一个遗忘门作用在 c t − 1 \boldsymbol{c}_{t-1} ct1上,将需要忘记的赋予更低的重要性;
  1. 与输出门类似,遗忘门也是一组权重参数,加上一个sigmoid函数;如下式所示:

    f = σ ( x t W x ( f ) + h t − 1 W h ( f ) + b ( f ) ) (4) \boldsymbol{f}=\sigma\left(\boldsymbol{x}_t \boldsymbol{W}_x^{(\mathrm{f})}+\boldsymbol{h}_{t-1} \boldsymbol{W}_h^{(\mathrm{f})}+\boldsymbol{b}^{(\mathrm{f})}\right) \tag{4} f=σ(xtWx(f)+ht1Wh(f)+b(f))(4)
    其中 W x ( f ) \boldsymbol{W}_x^{(\mathrm{f})} Wx(f) W h ( f ) \boldsymbol{W}_h^{(\mathrm{f})} Wh(f) b ( f ) \boldsymbol{b}^{(\mathrm{f})} b(f)为遗忘门的权重和偏置参数; σ ( ) \sigma() σ()依旧表示sigmoid函数;然后将遗忘门 f \boldsymbol{f} f c t − 1 \boldsymbol{c}_{t-1} ct1对应元素相乘,得到当前时刻的记忆单元 c t \boldsymbol{c}_{t} ct​;如下式所示:
    c t = f ⊙ c t − 1 (5) \boldsymbol{c}_t=\boldsymbol{f} \odot \boldsymbol{c}_{t-1} \tag{5} ct=fct1(5)

  2. 加入遗忘门之后LSTM的结构如下图所示:

    在这里插入图片描述

2.3输入门

  1. 除了遗忘一部分信息,还需要让模型记住一些新的信息;
  2. 新的信息也有重要程度之分,因此引入输入门,判断新增信息的各个元素的价值有多大;
  1. 将新的信息加入到记忆单元中,因此使用tanh函数,而不用sigmoid函数;计算公式如下:
    g = tanh ⁡ ( x t W x ( g ) + h t − 1 W h ( g ) + b ( g ) ) (6) \boldsymbol{g}=\tanh \left(\boldsymbol{x}_t \boldsymbol{W}_x^{(\mathrm{g})}+\boldsymbol{h}_{t-1} \boldsymbol{W}_h^{(\mathrm{g})}+\boldsymbol{b}^{(\mathrm{g})}\right) \tag{6} g=tanh(xtWx(g)+ht1Wh(g)+b(g))(6)
    相关参数类似前面的输出门和遗忘门的参数;

    这是计算的新的信息;将此信息加入到上一时刻的记忆单元 c t − 1 \boldsymbol{c}_{t-1} ct1​中,形成新的记忆;

  2. 为了区分新的信息中元素的价值,构建输入门,用输入门对新的信息加权;输入门公式如下:
    i = σ ( x t W x ( i ) + h t − 1 W h ( i ) + b ( i ) ) (7) \boldsymbol{i}=\sigma\left(\boldsymbol{x}_t \boldsymbol{W}_x^{(\mathrm{i})}+\boldsymbol{h}_{t-1} \boldsymbol{W}_h^{(\mathrm{i})}+\boldsymbol{b}^{(\mathrm{i})}\right) \tag{7} i=σ(xtWx(i)+ht1Wh(i)+b(i))(7)
    用这个权值 i \boldsymbol{i} i与新增加的信息 g \boldsymbol{g} g相乘,对应元素相乘,然后再添加到被筛选过的保留下来的上一时刻的记忆单元 c t − 1 \boldsymbol{c}_{t-1} ct1中。

  3. 加入新增信息和输入门之后LSTM的结构如下:

    在这里插入图片描述

2.4总结

  1. 上一时刻传来的记忆单元有些信息需要被遗忘,因此增加了遗忘门;

  2. 当前时刻有新的信息需要添加,且增加的信息也有重要程度之分,因此加了输入门;

  3. 1和2形成了当前时刻的记忆单元;

  4. 当前时刻输出的隐藏状态原本就是要包含目前为止所有的信息的,因此基于当前时刻的记忆单元,计算当前时刻的隐藏状态;而输出门就是用来调整当前时刻记忆单元作为下一时刻隐藏状态的重要程度的。

  5. 另外,从公式上看,不管是哪个门,以及新增的记忆单元,都是基于 h t − 1 \boldsymbol{h}_{t-1} ht1 x t \boldsymbol{x}_t xt;每个门的权重参数具体数值不同,但形式相同。

2.5 LSTM梯度的流动

LSTM中最关键的就是记忆单元 c \boldsymbol{c} c,隐藏状态 h \boldsymbol{h} h就是基于 c \boldsymbol{c} c计算得到的;因此LSTM的记忆信息主要来自于 c \boldsymbol{c} c;所以梯度的流动我们主要关注一下记忆单元 c \boldsymbol{c} c部分。

  1. 涉及记忆单元的梯度流动如下图所示:

    1. 涉及两种计算:加法和乘法
    2. 加法节点,梯度直接传递,没有任何变化;因此主要看一下乘法节点

    在这里插入图片描述

  2. 不会梯度消失或者爆炸的原因:

    1. RNN里面的乘法节点是矩阵乘法,而且每次都是相同的权重矩阵,因此出现了梯度消失或者梯度爆炸的情况;
    2. 而这里的LSTM的乘法是对应元素相乘,因此不会像矩阵乘法的梯度那样,每经过一个节点,都要再乘上一个矩阵;
    3. 而且这里每次的梯度都是不同的门值(因为每次输入 x \boldsymbol{x} x​不一样,虽然依然是一套权重参数)
  3. 另外,这里的乘法节点是遗忘门处的:

    1. 遗忘门作为权重乘到了上一时刻的记忆单元上,需要被忘记的会被分配较低的权重;
    2. 那么反向传播时,需要被忘记的对应的梯度就小,需要保持记住的对应的梯度就大;
    3. 梯度大,意味着能够被学习;且在水平方向上需要保持记住的,它们的梯度就会保持住,不会退化,能够传播到非常开始的时刻;那么这就让模型能够保持长期的记忆、保持长期的依赖关系
  4. LSTM是Long Short-Term Memory(长短期记忆)的缩写,意思是可以长(Long)时间维持短期记忆(Short-Term Memory):

    1. 每经过一个时刻都可以形成新的记忆,这是短期的;
    2. 但是由于该记住的,对应的梯度不会退化,因此可以长期记住;

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

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

相关文章

前瞻断言与后瞻断言:JavaScript 正则表达式的秘密武器

JavaScript 中的前瞻断言&#xff08;lookahead&#xff09;和后瞻断言&#xff08;lookbehind&#xff09;相信用过的小伙伴就知道它的威力了&#xff0c;在一些特定的需求场景下&#xff0c;可以做到四两拨千斤的作用&#xff0c;今天让我们来盘点一下在 JavaScript 正则表达…

昇思25天学习打卡营第14天|munger85

基于MindNLPMusicGen生成自己的个性化音乐 这个所谓的个性化的音乐就是指你输入一段文字它会根据这个文字输出一段音乐这个音乐是贴近于那段文字的所以叫做文生成音乐&#xff0c; 如果网络正常的话就可以直接从下载这个模型。 那么音乐生成的有两种方式呢有两种方式&#xff…

【C++初阶】C/C++内存管理

【C初阶】C/C内存管理 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;C&#x1f96d; &#x1f33c;文章目录&#x1f33c; 1. C/C内存分布 2. C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free 3. C内存管理方式 3…

拉格朗日乘子法和KKT条件

拉格朗日乘子法(Lagrange Multiplier) 和 KKT(Karush-Kuhn-Tucker) 条件是求解约束优化问题的重要方法&#xff0c;在有等式约束时使用拉格朗日乘子法&#xff0c;在有不等约束时使用 KKT 条件。当然&#xff0c;这两个方法求得的结果只是必要条件&#xff0c;只有当目标函数…

ssrf复习(及ctfshow351-360)

1. SSRF 概述 服务器会根据用户提交的URL发送一个HTTP请求。使用用户指定的URL&#xff0c;Web应用可以获取图片或者文件资源等。典型的例子是百度识图功能。 如果没有对用户提交URL和远端服务器所返回的信息做合适的验证或过滤&#xff0c;就有可能存在“请求伪造"的缺陷…

FPGA学习笔记(一) FPGA最小系统

文章目录 前言一、FPGA最小系统总结 前言 今天学习下FPGA的最小系统一、FPGA最小系统 FPGA最小系统与STM32最小系统类似&#xff0c;由供电电源&#xff0c;时钟电路晶振&#xff0c;复位和调试接口JTAG以及FLASH配置芯片组成&#xff0c;其与STM32最大的不同之处就是必须要有…

链表面试练习习题集(Java)

1. 思路&#xff1a; 因为杨辉三角是由二维数组构成&#xff0c;所以要先创建一个二维数组&#xff0c;如何用顺序表表示二维数组&#xff0c;可以通过List<List<Interger>>来表示一个二维数组&#xff0c;可以这样理解&#xff1a;先创建一个一维数组List&#x…

modbus slave 设备通过 网关thingsboard-gateway 将数据上传到thingsboard云平台

搭建thingsboard物联网云平台花了大量时间&#xff0c;从小白到最后搭建成功&#xff0c;折磨了好几天&#xff0c;也感谢网友的帮助&#xff0c;提供了思路最终成功搞定&#xff0c;特此记录。 一、thingsboard环境搭建&#xff08;Ubuntu20.04LTS&#xff09; 参考官方文档&a…

java之 junit单元测试案例【经典版】

一 junit单元测试 1.1 单元测试作用 单元测试要满足AIR原则&#xff0c;即 A&#xff1a; automatic 自动化&#xff1b; I: Independent 独立性&#xff1b; R&#xff1a;Repeatable 可重复&#xff1b; 2.单元测试必须使用assert来验证 1.2 案例1 常规单元测试 1.…

PSINS工具箱函数介绍——r2d

介绍工具箱里面r2d这个小函数的作用。 程序源码 function deg r2d(rad) % Convert angle unit from radian to degree % % Prototype: deg r2d(rad) % Input: rad - angle in radian(s) % Output: deg - angle in degree(s) % % See also r2dm, r2dms, d2r, dm2r, dms2r% …

多种方式实现 元素高度丝滑的从0-1显示出来

选择合适的方式&#xff0c;给用户更好的体验&#xff0c;多种方式实现 元素高度丝滑的从0-1显示出来。 能用 CSS 实现的动画&#xff0c;就不要采用 JS 去实现。 1、浏览器可以对CSS动画进行优化&#xff0c;其优化原理类似于requestAnimationFrame&#xff0c;会把每一帧的…

appium2.0 执行脚本遇到的问题

遇到的问题&#xff1a; appium 上的日志信息&#xff1a; 配置信息 方法一 之前用1.0的时候 地址默认加的 /wd/hub 在appium2.0上&#xff0c; 服务器默认路径是 / 如果要用/wd/hub 需要通过启动服务时设置基本路径 appium --base-path/wd/hub 这样就能正常执行了 方法二…

mysql的索引事务和存储引擎

一、索引 1、索引 索引的概念 &#xff1a;索引是一个排序的列表&#xff0c;在列表当中存储索引的值以及索引值对应数据所在的物理行。 索引的引用&#xff1a; 使用索引之后&#xff0c;就不需要扫描全表来定位某行的数据。 加快数据库的查询速度。 索引可以是表中的一…

在 K8s 上使用 KubeBlocks 提供的 MySQL operator 部署高可用 WordPress 站点

引言 WordPress WordPress 是全球最流行的内容管理系统&#xff08;CMS&#xff09;&#xff0c;自 2003 年发布以来&#xff0c;已成为网站建设的首选工具。其广泛的插件和主题生态系统使用户能够轻松扩展功能和美化外观。活跃的社区提供丰富的资源和支持&#xff0c;进一步…

[RK3588-Android12] 关于如何取消usb-typec的pd充电功能

问题描述 RK3588取消usb-typec的pd充电功能 解决方案&#xff1a; 在dts中fusb302节点下usb_con: connector子节点下添加如下熟悉&#xff1a; 打上如下2个补丁 diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c index c8a4e57c9f9b..173f8cb7…

使用OpenCV寻找图像中的轮廓

引言 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库。它提供了大量的视觉处理功能&#xff0c;包括图像和视频捕获、特征检测与匹配、图像变换、图像分割、颜色空间转换等。在图像处理中&#xff0c;寻找图像中的…

electron项目中实现视频下载保存到本地

第一种方式&#xff1a;用户自定义选择下载地址位置 渲染进程 // 渲染进程// 引入 import { ipcRenderer } from "electron";// 列表行数据下载视频操作&#xff0c;diffVideoUrl 是视频请求地址 handleDownloadClick(row) {if (!row.diffVideoUrl) {this.$message…

【数字电路学习新助手】掌握电路仿真软件,开启数字电路知识的新篇章

在信息科技日新月异的今天&#xff0c;数字电路知识的重要性不言而喻。无论是通信工程、计算机科学与技术&#xff0c;还是电子信息技术等领域&#xff0c;数字电路都是基础中的基础。然而&#xff0c;对于初学者来说&#xff0c;数字电路的学习往往充满了挑战。幸运的是&#…

Axure中继器入门:打造你的动态原型

前言 中继器 是 Axure 中的一个高级功能&#xff0c;它能够在静态页面上模拟后台数据交互的操作&#xff0c;如增加、删除、修改和查询数据&#xff0c;尽管它不具备真实数据存储能力。 中继器就像是一个临时的数据库&#xff0c;为我们在设计原型时提供动态数据管理的体验&a…

中职省培丨2024年大数据技术中职教师专业技能培训班企业参观实践圆满结束

7月17日&#xff0c;“2024年大数据技术中职教师专业技能培训班&#xff08;省培&#xff09;”参训老师莅临广东泰迪智能科技股份有限公司产教融合实训中心开展企业参观实践。泰迪智能科技董事长张良均、中职业务部总监李振林、中职业务部经理黄炳德、校企合作经理吴桂锋及来自…