MATLAB深度学习(六)——LSTM长短期神经网络原理与应用

news2024/11/27 20:43:10

        LSTM的应用可以参见一个相当好的视频:小车倒立摆最优控制教程 - Part1 Simulink Simscape Multibody仿真建模_哔哩哔哩_bilibili

6.1 序列建模——循环神经网络

        循环神经网络RNN是一类专门用于处理序列性数据x,···,xn的神经网络结构,其结构主要包含三个关键点:本质是一种神经网络;具有循环体结构;包括隐含状态。

6.1.1 RNN

        

        输入为x,经过Wx+b和激活函数f,得到输出y,但是实际应用中会有很多序列形式的数据

        RNN引入了隐状态h,可以对序列形式的数据提取特征,再转换输出。举个例子,一张图片那是同时出现,那就不叫作序列,但如果是视频中的平衡车,每个时间都有输出,且时间不同,输出会有变化,这种就叫做序列。

        

        h1基于上一个隐藏层的状态h0和当前的输入x1计算而来,这一点所有的序列数据都是一样的

        f一般数tanh,sigmoid,ReLU等非线性激活函数,他和CNN一样,在计算时,使用的U W b都是一样的,所以参数是共享的,你把他理解成一个向量,相当于用同一个3*1的向量去乘以每个时刻。因此我们可以得出,t时刻的RNN网络具有两个输入,分别为t时刻的输入向量x与t-1时刻的隐含状态。其中h在RNN网络的循环路上。

6.1.2 BPTT

    随时间反向传播算法(BPTT)笔记-CSDN博客

6.1.3 基于门与记忆细胞的长期依赖关系 LSTM

        

        RNN循环体内的信息渠道单一,只是通过tanh神经网络层,直接输出。从训练RNN的网络角度来看,训练过程一般使用随着时间的反向传播BPTT,沿着RNN时域展开方向的反方向对每个参数依次求偏导,由此可以得到损失函数关于各个权重矩阵的BPTT梯度表达式,由于训练过程中有些值会非常接近0或者1,因此序列长了之后会导致梯度爆炸或消失。

        改进思想是增加RNN体内循环的信息流通路径,设置相应记忆单元,其基本单元称为LSTM单元(cell)。LSTM中的重复模块则包含四个交互的层,三个Sigmoid和一个tanh层,并以一个非常特殊的方式进行交互。

上图中,σ表示的Sigmoid 激活函数与 tanh 函数类似,不同之处在于 sigmoid 是把值压缩到0~1 之间而不是 -1~1 之间。这样的设置有助于更新或忘记信息,

  • 因为任何数乘以 0 都得 0,这部分信息就会剔除掉;
  • 同样的,任何数乘以 1 都得到它本身,这部分信息就会完美地保存下来

6.1.4 LSTM的门原理

(1)忘记门

        在我们LSTM中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为“忘记门”的结构完成。该忘记门会读取上一个输出和当前输入,做一个Sigmoid 的非线性映射,然后输出一个向量(该向量每一个维度的值都在0到1之间,1表示完全保留,0表示完全舍弃,相当于记住了重要的,忘记了无关紧要的),最后与细胞状态相乘。

        (2)输入门

        第一,sigmoid层称“输入门层”决定什么值我们将要更新;第二,一个tanh层创建一个新的候选值向量\tilde{C}_{t},会被加入到状态中。下一步,我们会讲这两个信息来产生对状态的更新。

     (3)细胞状态

          现在是更新旧细胞状态的时间了,C_{t-1}更新为C_{t}。前面的步骤已经决定了将会做什么,我们现在就是实际去完成。我们把旧状态与f_{t}相乘,丢弃掉我们确定需要丢弃的信息,接着加上i_{t} * \tilde{C}_{t}。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。

      (4)输出门

        最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。

        首先,我们运行一个sigmoid层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过tanh进行处理(得到一个在-1到1之间的值)并将它和sigmoid门的输出相乘,最终我们仅仅会输出我们确定输出的那部分

        

        从上面的分析我们就可以看到,一贯而终的记忆细胞 C,信息流通的路径,使得训练过程中的梯度信息长距离具有可行性,遗忘门f,输入门i,输出门o,来通过有用信息,删除以往信息。

6.2 训练效果

给出训练代码:

%% Data: 数据来源
fileName = {'data_45deg.mat', 'data_30deg.mat', ...
    'data_15deg.mat', 'data_5deg.mat', ...
    'data_-45deg.mat', 'data_-30deg.mat', ...
    'data_-15deg.mat', 'data_-5deg.mat' };

% training:
trainingData = [];
for i = 1:length(fileName)
    currentData = [];
    load(fileName{i});
    currentData = [out.state_data, ...
        out.control_input_data]; % 5列
    trainingData = [trainingData; currentData];
end


%% Setup: (sequence to one)
numInput = 1; % sequence 4x1 
numResponses = 1; % one 1
 
% LSTM:
numHiddenUnits = 100;
layers = [ ...
    sequenceInputLayer(numInput, Normalization="zscore")
    lstmLayer(numHiddenUnits, OutputMode="last")
    fullyConnectedLayer(numResponses)
    regressionLayer];

options = trainingOptions("adam", ...
    MaxEpochs=2000, ...
    ValidationData= ...
    {num2cell(trainingData(:,1:4),2) ...
    trainingData(:,5)}, ...
    OutputNetwork="best-validation-loss", ...
    InitialLearnRate=0.001, ...
    SequenceLength="shortest", ...
    Plots="training-progress", ...
    Verbose= false);

policy = trainNetwork(num2cell(trainingData(:,1:4),2),...
    trainingData(:,5), layers, options);

        

LSTM与RNN参考 如何从RNN起步,一步一步通俗理解LSTM_rnn lstm-CSDN博客

1111

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

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

相关文章

音视频技术扫盲之预测编码的基本原理探究

预测编码是一种数据压缩技术,广泛应用于图像、视频和音频编码等领域。其基本原理是利用数据的相关性,通过对当前数据的预测和实际值与预测值之间的差值进行编码,从而实现数据压缩的目的。 一、预测编码的基本概念 预测编码主要包括预测器和…

第六届国际科技创新学术交流大会暨信息技术与计算机应用学术会议(ITCA 2024)

重要信息 会议官网:itca2024.iaecst.org 会议时间:2024年12月06-08日 会议地点:中国-广州(越秀国际会议中心) 会议简介 第六届信息技术与计算机应用学术会议(ITCA 2024) 依旧作为第六届国际科技创新学术交流大会…

Leetcode 将有序数组转换为二叉搜索树

算法思想及代码解析: 这段代码的目的是将一个有序数组转换为 高度平衡的二叉搜索树(Balanced Binary Search Tree, BST)。以下是算法的详细解释: 1. 什么是高度平衡的二叉搜索树? 二叉搜索树:对于树中的每…

15 go语言(golang) - 并发编程goroutine原理及数据安全

底层原理 Go 的 goroutine 是一种轻量级的线程实现,允许我们在程序中并发地执行函数。与传统的操作系统线程相比,goroutine 更加高效和易于使用。 轻量级调度 用户态调度:Go 运行时提供了自己的调度器,这意味着 goroutine 的创建…

ESP-KeyBoard:基于 ESP32-S3 的三模客制化机械键盘

概述 在这个充满挑战与机遇的数字化时代,键盘已经成为我们日常学习、工作、娱乐生活必不可少的设备。而在众多键盘中,机械键盘,以其独特的触感、清脆的敲击音和经久耐用的特性,已经成为众多游戏玩家和电子工程师的首选。本文将为…

PyTorch基础05_模型的保存和加载

目录 一、模型定义组件——重构线性回归 二、模型的加载和保存 2、序列化保存对象和加载 3、保存模型参数 一、模型定义组件——重构线性回归 回顾之前的手动构建线性回归案例: 1.构建数据集;2.加载数据集(数据集转换为迭代器);3.参数初…

《Python基础》之函数的用法

一、简介 在 Python 中,函数是一段可重用的代码块,用于执行特定的任务。函数可以帮助你将代码模块化,提高代码的可读性和可维护性。 函数的用途 代码重用:通过函数,你可以将常用的代码块封装起来,避免重复…

java:aqs实现自定义锁

aqs采用模板方式设计模式,需要重写方法 package com.company.aqs;import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.AbstractQueuedSynchronizer; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock;…

【小白学机器学习34】基础统计2种方法:用numpy的方法np().mean()等进行统计,pd.DataFrame.groupby() 分组统计

目录 1 用 numpy 快速求数组的各种统计量:mean, var, std 1.1 数据准备 1.2 直接用np的公式求解 1.3 注意问题 1.4 用print() 输出内容,显示效果 2 为了验证公式的背后的理解,下面是详细的展开公式的求法 2.1 均值mean的详细 2.2 方差…

vue2 中使用 Ag-grid-enterprise 企业版

文章目录 问题Vue2 引入企业版不生效npm run dev 时卡住了94% after seal 卡在这里了测试打包源 git 解决方案记录 问题 我想用企业版的树状表格 Vue2 引入企业版不生效 编译引入 // vue.config.js module.exports {transpileDependencies: ["ag-grid-enterprise"…

RESTful快速开发

(3)RESTful快速开发 (2)中的控制器仍然存在大量的冗余代码 问题1: 每个方法的RequestMapping注解中都定义了访问路径/users,重复性太高 问题2:每个方法的RequestMapping注解中都要使用method属…

万能门店小程序管理系统 doPageGetFormList SQL注入漏洞复现

0x01 产品简介 万能门店小程序管理系统是一款功能强大的工具,旨在为各行业商家提供线上线下融合的全方位解决方案。是一个集成了会员管理和会员营销两大核心功能的综合性平台。它支持多行业使用,通过后台一键切换版本,满足不同行业商家的个性化需求。该系统采用轻量后台,搭…

【作业九】RNN-SRN-Seq2Seq

点击查看作业内容 目录 1 实现SRN (1)使用numpy实现 (2)在(1)的基础上,增加激活函数tanh (3)使用nn.RNNCell实现 (4)使用nn.RNN实现 2 使用R…

Emgu (OpenCV)

Emgu Github Emgu 环境: Emgu CV 4.9.0 netframework 4.8 1、下载 libemgucv-windesktop-4.9.0.5494.exe 安装后,找到安装路径下的runtime文件夹复制到c#项目Debug目录下 安装目录 c# Debug目录

YOLOv8模型pytorch格式转为onnx格式

一、YOLOv8的Pytorch网络结构 model DetectionModel((model): Sequential((0): Conv((conv): Conv2d(3, 64, kernel_size(3, 3), stride(2, 2), padding(1, 1))(act): SiLU(inplaceTrue))(1): Conv((conv): Conv2d(64, 128, kernel_size(3, 3), stride(2, 2), padding(1, 1))(a…

澳洲房产市场数据清洗、聚类与可视化综合分析

本项目涉及数据清洗及分析时候的思路,如果仅在CSDN中看,可能会显得有些乱,建议去本人和鲸社区对应的项目中去查看,源代码和数据集都是免费下载的。 声明:本项目的成果可无偿分享,用于学习交流。但请勿用于…

IT服务团队建设与管理

在 IT 服务团队中,需要明确各种角色。例如系统管理员负责服务器和网络设备的维护与管理;软件工程师专注于软件的开发、测试和维护;运维工程师则保障系统的稳定运行,包括监控、故障排除等。通过清晰地定义每个角色的职责&#xff0…

go-zero(八) 中间件的使用

go-zero 中间件 一、中间件介绍 中间件(Middleware)是一个在请求和响应处理之间插入的程序或者函数,它可以用来处理、修改或者监控 HTTP 请求和响应的各个方面。 1.中间件的核心概念 请求拦截:中间件能够在请求到达目标处理器之…

Qt Graphics View 绘图架构

Qt Graphics View 绘图架构 "QWGraphicsView.h" 头文件代码如下&#xff1a; #pragma once#include <QGraphicsView>class QWGraphicsView : public QGraphicsView {Q_OBJECTpublic:QWGraphicsView(QWidget *parent);~QWGraphicsView();protected:void mouseM…

【eNSP】动态路由协议RIP和OSPF

动态路由RIP&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;和OSPF&#xff08;Open Shortest Path First&#xff0c;开放式最短路径优先&#xff09;是两种常见的动态路由协议&#xff0c;它们各自具有不同的特点和使用场景。本篇会对这两种协…