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

【深度学习 | LSTM】解开LSTM的秘密:门控机制如何控制信息流

在这里插入图片描述

🤵‍♂️ 个人主页: @AI_magician
📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。
👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍
🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)

在这里插入图片描述

【深度学习 | LSTM】解开LSTM的秘密:门控机制如何控制信息流
作者: 计算机魔术师
版本: 1.0 ( 2023.8.27 )

摘要: 本系列旨在普及那些深度学习路上必经的核心概念,文章内容都是博主用心学习收集所写,欢迎大家三联支持!本系列会一直更新,核心概念系列会一直更新!欢迎大家订阅

该文章收录专栏
[✨— 《深入解析机器学习:从原理到应用的全面指南》 —✨]

LSTM最全详解,

  • LSTM
      • 原理详解(每个神经元)
        • a. 遗忘门:Forget Gate
        • b. 输入门:Input Gate
        • c. Cell State
        • d. 输出门:Output Gate
      • 参数详解
      • 参数计算
      • 实际场景

LSTM

原理详解(每个神经元)

LSTM(Long Short-Term Memory)是一种常用于处理序列数据的循环神经网络模型。LSTM的核心思想是在传递信息的过程中,通过门的控制来选择性地遗忘或更新信息。LSTM中主要包含三种门:输入门(input gate)、输出门(output gate)和遗忘门(forget gate),以及一个记忆单元(memory cell)。

在LSTM层中,有三个门控单元,即输入门、遗忘门和输出门。这些门控单元在每个时间步上控制着LSTM单元如何处理输入和记忆。在每个时间步上,LSTM单元从输入、前一个时间步的输出和前一个时间步的记忆中计算出当前时间步的输出和记忆。

在LSTM的每个时间步中,输入 x t x_t xt和前一时刻的隐状态 h t − 1 h_{t-1} ht1被馈送给门控制器,然后门控制器根据当前的输入 x t x_t xt和前一时刻的隐状态 h t − 1 h_{t-1} ht1计算出三种门的权重,然后将这些权重作用于前一时刻的记忆单元 c t − 1 c_{t-1} ct1。具体来说,门控制器计算出三个向量:**输入门的开启程度 i t i_t it、遗忘门的开启程度 f t f_t ft和输出门的开启程度 o t o_t ot,这三个向量的元素值均在[0,1]**之间。

然后,使用这些门的权重对前一时刻的记忆单元 c t − 1 c_{t-1} ct1进行更新,计算出当前时刻的记忆单元 c t c_t ct,并将它和当前时刻的输入 x t x_t xt作为LSTM的输出 y t y_t yt。最后,将当前时刻的记忆单元 c t c_t ct和隐状态 h t h_t ht一起作为下一时刻的输入,继续进行LSTM的计算。

在这里插入图片描述

如果你对LSTM以及其与反向传播算法之间的详细联系感兴趣,我建议你参考以下资源:

  1. “Understanding LSTM Networks” by Christopher Olah: https://colah.github.io/posts/2015-08-Understanding-LSTMs/ 强烈推荐!!!
  2. TensorFlow官方教程:Sequence models and long-short term memory network (https://www.tensorflow.org/tutorials/text/text_classification_rnn)
  3. PyTorch官方文档:nn.LSTM (https://pytorch.org/docs/stable/generated/torch.nn.LSTM.html)
  4. 详细讲解RNN,LSTM,GRU https://towardsdatascience.com/a-brief-introduction-to-recurrent-neural-networks-638f64a61ff4

以上资源将为你提供更多关于LSTM及其与反向传播算法结合使用的详细解释、示例代码和进一步阅读材料。

LSTM 的核心概念在于细胞状态以及“门”结构。细胞状态相当于信息传输的路径,让信息能在序列连中传递下去。你可以将其看作网络的“记忆”,记忆门一个控制信号控制门是否应该保留该信息,在实现上通常是乘1或乘0来选择保留或忘记。理论上讲,细胞状态能够将序列处理过程中的相关信息一直传递下去。因此,即使是较早时间步长的信息也能携带到较后时间步长的细胞中来,这克服了短时记忆的影响。信息的添加和移除我们通过“门”结构来实现,“门”结构在训练过程中会去学习该保存或遗忘哪些信息。

LSTM的参数包括输入到状态的权重 W x i , W h i , b i W_{xi},W_{hi},b_i Wxi,Whi,bi,输入到遗忘门的权重 W x f , W h f , b f W_{xf},W_{hf},b_f Wxf,Whf,bf,输入到输出门的权重 W x o , W h o , b o W_{xo},W_{ho},b_o Wxo,Who,bo,以及输入到记忆单元的权重 W x c , W h c , b c W_{xc},W_{hc},b_c Wxc,Whc,bc,其中 W W W表示权重矩阵, b b b表示偏置向量。在实际应用中,LSTM模型的参数通常需要通过训练来获得,以最小化预测误差或最大化目标函数。

a. 遗忘门:Forget Gate

遗忘门的功能是决定应丢弃或保留哪些信息。来自前一个隐藏状态的信息和当前输入的信息同时传递到 sigmoid 函数中去,输出值介于 0 和 1 之间,越接近 0 意味着越应该丢弃,越接近 1 意味着越应该保留。

遗忘门的计算公式

b. 输入门:Input Gate

输入门用于更新细胞状态。首先将前一层隐藏状态的信息和当前输入的信息传递到 sigmoid 函数中去。将值调整到 0~1 之间来决定要更新哪些信息。0 表示不重要,1 表示重要。其次还要将前一层隐藏状态的信息和当前输入的信息传递到 tanh 函数中去,创造一个新的侯选值向量。最后将 sigmoid 的输出值与 tanh 的输出值相乘,sigmoid 的输出值将决定 tanh 的输出值中哪些信息是重要且需要保留下来

使用tanh作为LSTM输入层的激活函数,一定程度上可以避免梯度消失和梯度爆炸的问题。

在LSTM中,如果权重值较大或者较小,那么在反向传播时,梯度值会非常大或者非常小,导致梯度爆炸或者消失的情况。而tanh函数的导数范围在[-1, 1]之间,可以抑制梯度的放大和缩小,从而避免了梯度爆炸和消失的问题(RNN遇到的问题)。此外,tanh函数在输入为0附近的时候输出接近于线性,使得网络更容易学习到线性相关的特征。另外,tanh 函数具有对称性,在处理序列数据时能够更好地捕捉序列中的长期依赖关系。

因此,使用tanh作为LSTM输入层的激活函数是比较常见的做法。

c. Cell State

首先前一层的细胞状态与遗忘向量逐点相乘。如果它乘以接近 0 的值,意味着在新的细胞状态中,这些信息是需要丢弃掉的。然后再将该值与输入门的输出值逐点相加,将神经网络发现的新信息更新到细胞状态中去。至此,就得到了更新后的细胞状态。

d. 输出门:Output Gate

输出门用来确定下一个隐藏状态的值,隐藏状态包含了先前输入的信息。首先,我们将前一个隐藏状态和当前输入传递到 sigmoid 函数中,然后将新得到的细胞状态传递给 tanh 函数。最后将 tanh 的输出与 sigmoid 的输出相乘,以确定隐藏状态应携带的信息。再将隐藏状态作为当前细胞的输出,把新的细胞状态和新的隐藏状态传递到下一个时间步长中去。

在LSTM层中,每个时间步上的计算涉及到许多参数,包括输入、遗忘和输出门的权重,以及当前时间步和前一个时间步的输出和记忆之间的权重。这些参数在模型训练过程中通过反向传播进行学习,以最小化模型在训练数据上的损失函数。总之,LSTM通过门的控制,使得信息在传递过程中可以有选择地被遗忘或更新,从而更好地捕捉长序列之间的依赖关系,广泛应用于语音识别、自然语言处理等领域。

LSTM的输出可以是它的最终状态(最后一个时间步的隐藏状态)或者是所有时间步的隐藏状态序列。通常,LSTM的最终状态可以被看作是输入序列的一种编码,可以被送入其他层进行下一步处理。如果需要使用LSTM的中间状态,可以将return_sequences参数设置为True,这样LSTM层将返回所有时间步的隐藏状态序列,而不是仅仅最终状态。

需要注意的是,LSTM层在处理长序列时容易出现梯度消失或爆炸的问题。为了解决这个问题,通常会使用一些技巧,比如截断反向传播、梯度裁剪、残差连接等

参数详解

layers.LSTM 是一个带有内部状态的循环神经网络层,其中包含了多个可训练的参数。具体地,LSTM层的输入是一个形状为(batch_size, timesteps, input_dim)的三维张量,其中batch_size表示输入数据的批次大小,timesteps表示序列数据的时间步数,input_dim表示每个时间步的输入特征数。LSTM层的输出是一个形状为**(batch_size, timesteps, units)的三维张量,其中units表示LSTM层的输出特征数**。以下是各个参数的详细说明:

  • units:LSTM 层中的单元数,即 LSTM 层输出的维度。
  • activation:激活函数,用于计算 LSTM 层的输出和激活门。
  • recurrent_activation:循环激活函数,用于计算 LSTM 层的循环状态。
  • use_bias:是否使用偏置向量。
  • kernel_initializer:用于初始化 LSTM 层的权重矩阵的初始化器。
  • recurrent_initializer:用于初始化 LSTM 层的循环权重矩阵的初始化器。
  • bias_initializer:用于初始化 LSTM 层的偏置向量的初始化器。
  • unit_forget_bias:控制 LSTM 单元的偏置初始化,如果为 True,则将遗忘门的偏置设置为 1,否则设置为 0。
  • kernel_regularizer:LSTM 层权重的正则化方法。
  • recurrent_regularizer:LSTM 层循环权重的正则化方法。
  • bias_regularizer:LSTM 层偏置的正则化方法。
  • activity_regularizer:LSTM 层输出的正则化方法。
  • dropout:LSTM 层输出上的 Dropout 比率。
  • recurrent_dropout:LSTM 层循环状态上的 Dropout 比率。
  • return_sequences: 可以控制LSTM的输出形式。如果设置为True,则输出每个时间步的LSTM的输出,如果设置为False,则只输出最后一个时间步的LSTM的输出。因此,return_sequences的默认值为False,如果需要输出每个时间步的LSTM的输出,则需要将其设置为True。

这些参数的不同设置将直接影响到 LSTM 层的输出和学习能力。需要根据具体的应用场景和数据特点进行选择和调整。

tf.keras.layers.LSTM(
units,
activation=“tanh”,
recurrent_activation=“sigmoid”, #用于重复步骤的激活功能
use_bias=True, #是否图层使用偏置向量
kernel_initializer=“glorot_uniform”, #kernel权重矩阵的 初始化程序,用于输入的线性转换
recurrent_initializer=“orthogonal”, #权重矩阵的 初始化程序,用于递归状态的线性转换
bias_initializer=“zeros”, #偏差向量的初始化程序
unit_forget_bias=True, #则在初始化时将1加到遗忘门的偏置上
kernel_regularizer=None, #正则化函数应用于kernel权重矩阵
recurrent_regularizer=None, #正则化函数应用于 权重矩阵
bias_regularizer=None, #正则化函数应用于偏差向量
activity_regularizer=None, #正则化函数应用于图层的输出(其“激活”)
kernel_constraint=None,#约束函数应用于kernel权重矩阵
recurrent_constraint=None,#约束函数应用于 权重矩阵
bias_constraint=None,#约束函数应用于偏差向量
dropout=0.0,#要进行线性转换的输入单位的分数
recurrent_dropout=0.0,#为递归状态的线性转换而下降的单位小数
return_sequences=False,#是否返回最后一个输出。在输出序列或完整序列中
return_state=False,#除输出外,是否返回最后一个状态
go_backwards=False,#如果为True,则向后处理输入序列并返回反向的序列
stateful=False,#如果为True,则批次中索引i的每个样本的最后状态将用作下一个批次中索引i的样本的初始状态。
time_major=False,
unroll=False,#如果为True,则将展开网络,否则将使用符号循环。展开可以加快RNN的速度,尽管它通常会占用更多的内存。展开仅适用于短序列。
)

参数计算

对于一个LSTM(长短期记忆)模型,参数的计算涉及输入维度、隐藏神经元数量和输出维度。在给定输入维度为(64,32)和LSTM神经元数量为32的情况下,我们可以计算出以下参数:

  1. 输入维度:(64,32)
    这表示每个时间步长(sequence step)的输入特征维度为32,序列长度为64。

  2. 隐藏神经元数量:32
    这是指LSTM层中的隐藏神经元数量。每个时间步长都有32个隐藏神经元。

  3. 输入门参数:

    • 权重矩阵:形状为(32,32 + 32)的矩阵。其中32是上一时间步的隐藏状态大小,另外32是当前时间步的输入维度。
    • 偏置向量:形状为(32,)的向量。
  4. 遗忘门参数:

    • 权重矩阵:形状为(32,32 + 32)的矩阵。
    • 偏置向量:形状为(32,)的向量。
  5. 输出门参数:

    • 权重矩阵:形状为(32,32 + 32)的矩阵。
    • 偏置向量:形状为(32,)的向量。
  6. 单元状态参数:

    • 权重矩阵:形状为(32,32 + 32)的矩阵。
    • 偏置向量:形状为(32,)的向量。
  7. 输出参数:

    • 权重矩阵:形状为(32,32)的矩阵。将隐藏状态映射到最终的输出维度。
    • 偏置向量:形状为(32,)的向量。

因此,总共的参数数量可以通过计算上述所有矩阵和向量中的元素总数来确定。

实际场景

当使用LSTM(长短期记忆)神经网络进行时间序列预测时,可以根据输入和输出的方式将其分为四种类型:单变量单步预测、单变量多步预测、多变量单步预测和多变量多步预测。

  1. 单变量单步预测:

    • 输入:只包含单个时间序列特征的历史数据。
    • 输出:预测下一个时间步的单个时间序列值。
    • 例如,给定过去几天的某股票的收盘价,使用LSTM进行单变量单步预测将预测未来一天的收盘价。
  2. 单变量多步预测:

    • 输入:只包含单个时间序列特征的历史数据。
    • 输出:预测接下来的多个时间步的单个时间序列值。
    • 例如,给定过去几天的某股票的收盘价,使用LSTM进行单变量多步预测将预测未来三天的收盘价。
  3. 多变量单步预测:

    • 输入:包含多个时间序列特征的历史数据。
    • 输出:预测下一个时间步的一个或多个时间序列值。
    • 例如,给定过去几天的某股票的收盘价、交易量和市值等特征,使用LSTM进行多变量单步预测可以预测未来一天的收盘价。
  4. 多变量多步预测:

    • 输入:包含多个时间序列特征的历史数据。
    • 输出:预测接下来的多个时间步的一个或多个时间序列值。
    • 例如,给定过去几天的某股票的收盘价、交易量和市值等特征,使用LSTM进行多变量多步预测将预测未来三天的收盘价。

这些不同类型的时间序列预测任务在输入和输出的维度上略有差异,但都可以通过适当配置LSTM模型来实现。具体的模型架构和训练方法可能会因任务类型和数据特点而有所不同。

在这里插入图片描述

						  🤞到这里,如果还有什么疑问🤞🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳

相关文章:

【深度学习 | LSTM】解开LSTM的秘密:门控机制如何控制信息流

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…...

解决npm install遇到的问题:Error while executing:

目录 一、遇到问题 二、解决办法 方法一 方法二 方法三 方法四 一、遇到问题 npm ERR! Error while executing: npm ERR! D:\IT_base\git\Git\cmd\git.EXE ls-remote -h -t ssh://gitgithub.com/sohee-lee7/Squire.git npm ERR! npm ERR! fatal: unable to access ht…...

常见的内网穿透工具有 ngrok/ localtunnel/ frp

1.内网穿透工具的工作原理 内网穿透工具的工作原理是通过在本地网络和公共网络之间建立一个通道,将公网流量转发到本地网络中的服务。这样,在没有公网 IP 或无法直接访问的情况下,用户可以通过公网访问本地网络中的服务。 2. 常见的内网穿透…...

dvwa命令执行漏洞分析

dvwa靶场命令执⾏漏洞 high难度的源码: $target trim($_REQUEST[ ‘ip’ ]);是一个接收id值的变量 array_keys()函数功能是返回包含原数组中所有键名的一个新数组。 str_replace() 函数如下,把字符串 “Hello world!” 中的字符 “world” 替换为 “S…...

今年嵌入式行情怎么样?

今年嵌入式行情怎么样? 嵌入式技术今年可以说是IT领域中最炙手可热的之一。随着中年危机和内卷问题的出现,越来越多的互联网从业者将目光投向了嵌入式领域。国内的嵌入式市场一直受终端需求变化的影响而波动,但随着国内产业自主化的发展趋势…...

Unity WebGL 编译 报错: emcc2: error: ‘*‘ failed: [WinError 2] ϵͳ�Ҳ���ָ�����ļ���解决办法

文章目录 错误日志可能的原因及解决办法:导出路径不能有中文系统名(win)含有中文, 修改环境变量Temp和Tmp, 如下图:真正的原因: 杀毒软件删除了部分wasm相关文件,如: 错误日志 Building Library\Bee\artifacts\WebGL\build\debug_WebGL_wasm\build.js failed with output: emc…...

三维模型3DTile格式轻量化压缩处理的数据质量提升方法分析

三维模型3DTile格式轻量化压缩处理的数据质量提升方法分析 在处理三维模型3DTile格式的轻量化压缩时,如何在减少数据量的同时,保证或提升数据质量是一大挑战。以下为一些提升数据质量的方法分析: 改进几何简化算法:在进行几何简化…...

Pycharm2022 pycharm64.exe.Vmoptions

Windows Pycharm pycharm64.exe.Vmoptions文件的真正路径 C:\Program Files\JetBrains\PyCharm Community Edition 2022.1.4\bin\pycharm64.exe.vmoptions 在其他路径下修改vmoptions是无效的!!! 文件内容 -Xms128m -Xmx750m -XX:Reserve…...

sql注入之高权限注入和文件读写

死在山野的风里,活在自由的梦里 sql注入之高权限注入和文件读写 高权限注入1.多个网站共享mysql服务器2.MySQL 权限介绍3.注入流程查询所有数据库名称查询表名对应的字段名查询数据 文件读写1.文件读写注入的原理2.文件读写注入的条件3.读取文件4.写入文件 高权限注…...

Java 面经

本文为Java面经,其中讲述的是在面试过程中回答得不好的地方,在这里补充,以便为后面的面试积累经验 哈罗单车 一面 Q:公司的MySQL数据库,事务隔离级别是什么? A:读已提交(RC&…...

无涯教程-JavaScript - ROUNDUP函数

描述 ROUNDUP函数将数字四舍五入,而不是0(零)。 ROUNDUP是Excel四舍五入函数之一。 语法 ROUNDUP (number, num_digits)争论 Argument描述Required/OptionalNumberAny real number that you want rounded up.RequiredNum_digitsThe number of digits to which you want to …...

【Linux旅行记】探究操作系统是如何进行管理的!

文章目录 什么是操作系统?操作系统概念操作系统的目的底层硬件驱动程序操作系统理解系统调用接口 操作系统是如何进行管理的?什么是管理?操作系统是如何管理硬件信息呢? 🍀小结🍀 🎉博客主页&am…...

【Linux C小技巧】零长度数组的使用

本期主题: 讲清Linux C的零长度数组使用,内容包括: 零长度数组是什么原理为什么要使用零长度数组与指针的差异 往期链接: 数据结构系列——先进先出队列queue数据结构系列——栈 stackLinux内核链表 目录 0.前言1.零长度数组原理…...

github 网页显示不全?

问题 解决 1、检查网页,打开 network,重新刷新 github 网页 2、查看无法加载的资源(如 css 文件) 3、查看域名地址 https://tool.chinaz.com/dns/,github.githubassets.com(检查网页元素,点击无…...

寄存器介绍

目录 寄存器的概念 寄存器工作原理 寄存器的状态 查看寄存器信息 寄存器复位 大空间寄存器复位 寄存器的概念 寄存器是计算机中一种临时存储数据的硬件设备,通常是高速缓存的一部分,用于存储、读取和操作计算机内部的数据。它们是计算机中最快的存…...

基于CNN-LSTM的时序预测MATLAB实战

一、算法原理 1.1 CNN原理 卷积神经网络具有局部连接、权值共享和空间相关等特性。卷积神经网络结构包含卷积层、激活层和池化层。 (a)二维卷积层将滑动卷积滤波器应用于输入。该层通过沿输入垂直和水平方向 移动滤波器对输入进行卷积,并计…...

MySQL高可用九种方案

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址[1] 参考视频[2] MMM 方案(单主) MySQL 高可用方案之 MMM(Multi-Master Replication Manager&#x…...

react 通过ref 获取对应 dom 的位置信息

需求: 在点击某个dom 元素的时候滚动条要同步滚动 进程: 获取ref 打印,打印出来是一个dom 元素,看不到有什么方法查找 dom 属性信息找到了两个参数,offsetLeft:返回元素的水平偏移位置。 offsetTop&…...

SpringSecurity学习 - 认证和授权

一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多,因为相比与SpringSecurity,Shiro的上手更加的简单。 一般Web应用的需要进行认证和授权。 认证:验证当前访问系统的是不是本系统的用户,并且要…...

JDK jps命令复习

之前写过jdk命令工具的博文,下面复习jps命令; jps 是 Java Process Status Tool 的简称,它的作用是为了列出所有正在运行中的 Java 虚拟机进程和相关信息; jps 命令参数 -q 只输出进程 ID,省略主类的名称 -m 输出虚拟机进程启动时传递…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)&#xff0…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层&#xf…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

【网络安全】开源系统getshell漏洞挖掘

审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...