基于matlab的长短期神经网络的三维路径跟踪预测

news2024/11/23 6:31:26

目录
背影
摘要
LSTM的基本定义
LSTM实现的步骤
基于长短期神经网络LSTM的三维路径跟踪预测
MATALB代码
效果图
结果分析
展望
参考论文

背影

路径跟踪是指通过计算机算法,。长短期记忆模型对复杂,非线性运动的目标跟踪,解决目标跟踪困难,可以实现对目标的跟踪和路径预测。
摘要
LSTM原理,MATALB编程长短期神经网络LSTM的三维路径跟踪预测。

LSTM的基本定义

LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为它可以记忆不定时间长度的数值,区块中有一个gate能够决定input是否重要到能被记住及能不能被输出output。
图1底下是四个S函数单元,最左边函数依情况可能成为区块的input,右边三个会经过gate决定input是否能传入区块,左边第二个为input gate,如果这里产出近似于零,将把这里的值挡住,不会进到下一层。左边第三个是forget gate,当这产生值近似于零,将把区块里记住的值忘掉。第四个也就是最右边的input为output gate,他可以决定在区块记忆中的input是否能输出 。
图1 LSTM模型
图1 LSTM模型
LSTM有很多个版本,其中一个重要的版本是GRU(Gated Recurrent Unit),根据谷歌的测试表明,LSTM中最重要的是Forget gate,其次是Input gate,最次是Output gate

训练方法

为了最小化训练误差,梯度下降法(Gradient descent)如:应用时序性倒传递算法,可用来依据错误修改每次的权重。梯度下降法在递回神经网络(RNN)中主要的问题初次在1991年发现,就是误差梯度随着事件间的时间长度成指数般的消失。当设置了LSTM 区块时,误差也随着倒回计算,从output影响回input阶段的每一个gate,直到这个数值被过滤掉。因此正常的倒传递类神经是一个有效训练LSTM区块记住长时间数值的方法。

lstm的步骤

1 , LSTM的第一步是确定我们将从单元状态中丢弃哪些信息,这个策略有一个被称为遗忘门的sigmoid层决定。输入ht-1和xt遗忘门对应单元状态ct-1中每个数输出一个0到1之间的数字。1代表“完全保持”,0表示“完全遗忘”。

让那个我们回到我们的语言模型例子中尝试基于所有之前的词预测下一个词是什么。在这个问题中,单元状态中可能包括当前主题的性别,因此可以预测正确代词。当我们看到一个新的主题的性别时,我们想要忘记旧主题的性别。

=(W*[h-1,x]+b)

下一步将决定我们在单元状态中保存那些新信息。包括两个部分;第一”输入门层”的sigmoid层决定我们将更新那些值,第二,tanh层创建可以添加到状态的新候选值ct-1的向量。在下一步中,我们将结合这两个来创建状态更新。

在我们语言模型的例子中,我们想要将新主题的性别添加到单元格状态,以替换我们忘记的旧主题

=(W*[h-1,x]+b)

=tanh(W*[h-1,x]+b)

现在是时候将旧的单元状态ct-1更新为新的单元状态ct,之前的步骤已经决定要做什么,我们只需要实际做到这一点。我们将旧状态乘以ft,忘记我们之前决定忘记的事情,然后我们添加*Ct .这是新的候选值,根据我们的决定更新每个州的值来缩放。

在语言模型的情况下,我们实际上放弃了关于旧主题的性别的信息并添加新信息,正如我们在前面的步骤中所做的那样。

C=C-1+(1-)

最后,我们需要决定我们要输出的内容,此输出将基于我们的单元状态,但将是过滤版本,首先,我们运行一个sigmoid层,它决定我们要输出的单元状态的哪些部分,然后我们将单元状态设置为tanh(将值推到介于-1和1之间)并将其乘以sigmoid门的输出,以便我们只输出我们决定的部分。

对于语言模型示例,由于它只是看到一个主题,他可能想要输出与动物相关的信息,以防接下来会发生什么,例如,他输出主语是单数还是复数,一边我们知道动词应该与什么形式供轭。

O=(W[h-1,x]+b)

h=O*tanh©

​基于MATLAB编程的lstm长短期神经网络的三维路径跟踪预测

clc
clc
clear
close all
num = xlsread(‘测试数据.xlsx’,2);
num1 = xlsread(‘训练数据.xlsx’);
num2 = xlsread(‘测试数据1.xlsx’);

train_data1 = num1(:,1:5)‘;%训练数据的输入数据
test_data1 = num1(:,7:8)’;%训练数据的输出数据
[train_data,inputps]=mapminmax(train_data1,0,1);%训练数据的输入数据的归一化
[trainout,outputps]=mapminmax(test_data1,0,1);%训练数据的输出数据的归一化

data_length=size(train_data,1);
data_num=size(train_data,2);
%% 网络参数初始化
% 结点数设置
input_num=5;
cell_num=12;
output_num=2;

% 网络中门的偏置
bias_input_gate=rand(1,cell_num);
bias_forget_gate=rand(1,cell_num);
bias_output_gate=rand(1,cell_num);
% ab=1.2;
% bias_input_gate=ones(1,cell_num)/ab;
% bias_forget_gate=ones(1,cell_num)/ab;
% bias_output_gate=ones(1,cell_num)/ab;
%网络权重初始化
ab=15;
weight_input_x=rand(input_num,cell_num)/ab;
weight_input_h=rand(output_num,cell_num)/ab;
weight_inputgate_x=rand(input_num,cell_num)/ab;
weight_inputgate_c=rand(cell_num,cell_num)/ab;
weight_forgetgate_x=rand(input_num,cell_num)/ab;
weight_forgetgate_c=rand(cell_num,cell_num)/ab;
weight_outputgate_x=rand(input_num,cell_num)/ab;
weight_outputgate_c=rand(cell_num,cell_num)/ab;

%hidden_output权重
weight_preh_h=rand(cell_num,output_num);

%网络状态初始化
cost_gate=1e-10;
h_state=rand(output_num,data_num);
cell_state=rand(cell_num,data_num);
%% 网络训练学习
for iter=1:3000
iter
yita=0.1; %每次迭代权重调整比例
for m=1:data_num

    %前馈部分
    if(m==1)
        gate=tanh(train_data(:,m)'*weight_input_x);
        input_gate_input=train_data(:,m)'*weight_inputgate_x+bias_input_gate;
        output_gate_input=train_data(:,m)'*weight_outputgate_x+bias_output_gate;
        for n=1:cell_num
            input_gate(1,n)=1/(1+exp(-input_gate_input(1,n)));
            output_gate(1,n)=1/(1+exp(-output_gate_input(1,n)));
        end
        forget_gate=zeros(1,cell_num);
        forget_gate_input=zeros(1,cell_num);
        cell_state(:,m)=(input_gate.*gate)';
    else
        gate=tanh(train_data(:,m)'*weight_input_x+h_state(:,m-1)'*weight_input_h);
        input_gate_input=train_data(:,m)'*weight_inputgate_x+cell_state(:,m-1)'*weight_inputgate_c+bias_input_gate;
        forget_gate_input=train_data(:,m)'*weight_forgetgate_x+cell_state(:,m-1)'*weight_forgetgate_c+bias_forget_gate;
        output_gate_input=train_data(:,m)'*weight_outputgate_x+cell_state(:,m-1)'*weight_outputgate_c+bias_output_gate;
        for n=1:cell_num
            input_gate(1,n)=1/(1+exp(-input_gate_input(1,n)));
            forget_gate(1,n)=1/(1+exp(-forget_gate_input(1,n)));
            output_gate(1,n)=1/(1+exp(-output_gate_input(1,n)));
        end
        cell_state(:,m)=(input_gate.*gate+cell_state(:,m-1)'.*forget_gate)';   
    end
    pre_h_state=tanh(cell_state(:,m)').*output_gate;
    h_state(:,m)=(pre_h_state*weight_preh_h)';
    %误差计算
    Error=h_state(:,m)-trainout(:,m);
    Error_Cost(1,iter)=sum(Error.^2);
    if(Error_Cost(1,iter)<cost_gate)
        flag=1;
        break;
    else
        [   weight_input_x,...
            weight_input_h,...
            weight_inputgate_x,...
            weight_inputgate_c,...
            weight_forgetgate_x,...
            weight_forgetgate_c,...
            weight_outputgate_x,...
            weight_outputgate_c,...
            weight_preh_h ]=fun_weight(m,yita,Error,...
                                               weight_input_x,...
                                               weight_input_h,...
                                               weight_inputgate_x,...
                                               weight_inputgate_c,...
                                               weight_forgetgate_x,...
                                               weight_forgetgate_c,...
                                               weight_outputgate_x,...
                                               weight_outputgate_c,...
                                               weight_preh_h,...
                                               cell_state,h_state,...
                                               input_gate,forget_gate,...
                                               output_gate,gate,...
                                               train_data,pre_h_state,...
                                               input_gate_input,...
                                               output_gate_input,...
                                               forget_gate_input);

    end
end
if(Error_Cost(1,iter)<cost_gate)
    break;
end

end
plot(Error_Cost,‘k-*’);
title(‘误差曲线图’);

%% 使用后121个检验
%数据加载
test_final11=num((601:721),1:10)‘;%测试数据的输入数据
test_final1=mapminmax(‘apply’,test_final11,inputps);
test_output=num((601:721),11)’; %测试数据的输出数据
%前馈
m=601:721;
lstmout= [];
for ii = 1:121
test_final = test_final1(:,ii);
gate=tanh(test_final’*weight_input_x+h_state(:,m(ii)-1)‘*weight_input_h);
input_gate_input=test_final’*weight_inputgate_x+cell_state(:,m(ii)-1)‘*weight_inputgate_c+bias_input_gate;
forget_gate_input=test_final’*weight_forgetgate_x+cell_state(:,m(ii)-1)‘*weight_forgetgate_c+bias_forget_gate;
output_gate_input=test_final’*weight_outputgate_x+cell_state(:,m(ii)-1)‘*weight_outputgate_c+bias_output_gate;
for n=1:cell_num
input_gate(1,n)=1/(1+exp(-input_gate_input(1,n)));
forget_gate(1,n)=1/(1+exp(-forget_gate_input(1,n)));
output_gate(1,n)=1/(1+exp(-output_gate_input(1,n)));
end
cell_state_test=(input_gate.*gate+cell_state(:,m(ii)-1)’.*forget_gate)‘;
pre_h_state=tanh(cell_state_test’).output_gate;
h_state_test=(pre_h_state
weight_preh_h)';
lstmout = [lstmout h_state_test];

end
% test_output
% lstmout
% test_output1 = (mapminmax(‘reverse’,test_output,outputps));
lstmout1= (mapminmax(‘reverse’,lstmout,outputps));

结果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结果分析

从图中可以看出来,基于长短期神经网络LSTM的三维路径跟踪预测 ,预测准确,泛发性好

展望

长短期神经网络在处理有时间关联性的问题方面,拥有独特的优势,预测结果更平滑,稳定,并且可调参,LSTM可以和其他是算法结合,比如粒子群优化LSTM参数,DBN+LSTM,等

参考论文

百科

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

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

相关文章

回溯算法专题

回溯算法专题 框架篇全排列问题N 皇后问题如果只需要一个合法答案&#xff0c;怎么办&#xff1f; 快速排序LeetCode 912. 排序数组解题思路代码实现LeetCode 215. 数组中的第K个最大元素解题思路代码实现总结 不要纠结&#xff0c;干就完事了&#xff0c;熟练度很重要&#xf…

e与phi不互素 --- 四道题详记

文章目录 题一([MoeCTF2022]signin)题目描述&#xff1a;题目分析&#xff1a; 题二(unusualrsa5)题目描述&#xff1a;题目分析&#xff1a; 题三([0ctf 2016]RSA?)题目描述&#xff1a;题目分析&#xff1a; 题四(2022ctfshow卷王杯现代密码签到)题目描述&#xff1a;题目分…

【Python】re模块

一、re模块简介及操作方法 正则表达式其本身就是一种小型的&#xff0c;高度专业化的编程语言。在Python中&#xff0c;它被内 嵌在了re模块里面&#xff0c;正则表达式模式被编译成一系列的字节码&#xff0c;然后由用C编写的匹 配引擎执行。 1、re.search方法 re.search 扫描…

“王炸”组合竞逐「行泊一体」

去年开始&#xff0c;在中国市场&#xff0c;「行泊一体」的热度&#xff0c;不亚于当年特斯拉推出FSD&#xff0c;甚至更加火热。从上游芯片、传感器&#xff0c;到域控制器、智能驾驶系统供应商以及车企&#xff0c;都在公开场合不断普及这个组合功能。 「行泊一体」市场的启…

MongoDBRedis基础知识

MongoDB&Redis基础知识 1. MongoDB简介2. Redis 关系型数据库遵循ACID原则&#xff1a; 原子性一致性独立性持久性 分布式系统&#xff1a;由多台计算机和通信的软件组件通过计算机网络连接组成&#xff0c;分布式系统是建立在网络之上的软件系统&#xff0c;因为软件的特…

操作系统论文导读(七):Response-Time Analysis for Mixed Criticality Systems——混合关键系统的响应时间分析

目录 一、论文核心思想 二、案例引入 三、基础定义 四、分区关键性调度 (PC) 五、SMC调度 5.1 调度流程 5.2 响应时间分析&#xff08;考虑EDF分配&#xff09; 5.3 优先级分配 六、AMC调度 6.1 调度流程 6.2 响应时间分析&#xff08;考虑EDF分配&#xff09; 6.3 AMC…

Cesium 核心概念 核心接口

Cesimum 可以做什么 Cesium 是一个开源的3D地球可视化引擎&#xff0c;它可以在Web浏览器中以高性能和高质量呈现全球范围内的地球表面数据。 Cesium 可以用于以下领域&#xff1a; 地理信息系统&#xff1a;Cesium 可以呈现地球表面上的各种地理信息数据&#xff0c;包括卫…

【Python入门】NumPy 数组裁切及数据类型

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 裁切数组 python 中裁切的意思是将元素从一个给定的索引带到另一个给定的索引。 我们像这样传递切片而不是索引&#xff1a;[start&#xff1a;end]。 我们还可以定义步长&#xff0c;如下所示&#xff1a;[start&#x…

RabbitMQ实现消息的延迟推送或延迟发送

一、RabbitMQ是什么&#xff1f; 1.RabbitMQ简介 RabbitMQ是有erlang语言开发&#xff0c;基于AMQP&#xff08;Advanced Message Queue 高级消息队列协议&#xff09;协议实现的消息队列。 常见的消息队列有&#xff1a;RabbitMQ、Kafka 和 ActiveMQ 2.RabbitMQ的优点 Rab…

设计模式 --- 创建者模式

一、概述 创建型模式的主要关注点是“怎样创建对象&#xff1f;”&#xff0c;它的主要特点是“将对象的创建与使用分离”。 这样可以降低系统的耦合度&#xff0c;使用者不需要关注对象的创建细节。 创建型模式分为&#xff1a; 单例模式 工厂方法模式 抽象工程模式 原型…

【linux】yum “应用商店” 的基本用法

好多工具 yum软件包查看软件包安装软件卸载软件 yum 通俗的讲&#xff0c;这就似我们手机上的应用商店&#xff0c;只不过是在linux下的。 我们可以用yum来下载东西。 软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序。 但是这样…

【Linux 命令】chroot

文章目录 一、背景二、语法三、案例3.1 命令3.2 系统调用3.3 查找服务是否存在于 chrooted 监禁内 四、注意事项 chroot 用来在指定根目录运行命令&#xff08;即指定 / 的位置&#xff09;&#xff0c;不可操作指定目录之外的地方。其是一种非常简单的资源隔离化操作&#xff…

idea 配置docker 进行上传镜像,部署启动容器

前言 在我们开发测试过程中&#xff0c;需要频繁的更新docker镜像&#xff0c;然而默认情况下&#xff0c;docker的2375端口是关闭的&#xff0c;下面介绍如何打开端口。 修改docker配置文件 操作步骤&#xff1a; 1.1、修改配置 登录docker所在服务器&#xff0c;修改docker…

web前端实验5

实 验 报 告 课 程 Web前端应用开发 实验项目 Jquery AJAX编程 成 绩 专业班级 班内序号 指导教师 姓 名 学 号 实验日期 实验目的及要求&#xff1a; &#xff08;1&#xff09; 理解和掌握Jquery AJAX的get方式请求 &#xff08;2&#xff09; 理解和掌握Jquery AJAX的pos…

释放ChatGPT潜能:4款高效插件让你的AI助手更强大

你的ChatGPT页面是什么样的&#xff1f;是这样的吗&#xff1f; 今天我要向大家推荐四款「ChatGPT免费插件」。这些插件是我们在与GPT日常交流中&#xff0c;使用频率最高的四个工具。 一旦安装这些插件&#xff0c;你的GPT将立即变身为「超级ChatGPT」。使用起来更为流畅&am…

BEV+Transformer对无人驾驶硬件体系的巨大改变

摘要&#xff1a; BEVTransformer彻底终结了2D直视图CNN时代&#xff0c;BEVTransformer对智能驾驶硬件系统有着什么样的影响&#xff1f;背后的受益者又是谁&#xff1f; 图片来源&#xff1a;特斯拉 BEVTransformer是目前智能驾驶领域最火热的话题&#xff0c;没有之一&…

【大数据平台开发】【Web框架】001Django框架简介

【大数据平台开发】【Web框架】001Django框架简介 文章目录 【大数据平台开发】【Web框架】001Django框架简介一. Django简介与安装1.1 Django安装1.2 Django简介1.3 框架功能简介 二. Django框架的最小程序2.1 新建工程2.2 修改工程2.3 运行工程2.4 django-admin与manage.py2.…

(二)EalsticSearch 辅助工具 Kibana 介绍与安装

1、什么是 kibana &#xff1f; Kibana 是一个针对Elasticsearch的开源分析及可视化平台&#xff0c;用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana&#xff0c;可以通过各种图表进行高级数据分析及展示。 Kibana让海量数据更容易理解。它操作简单&#xff…

Python高光谱遥感数据处理与机器学习

Python高光谱遥感数据处理与机器学习 第一章、高光谱基础 高光谱遥感简介 什么是高光谱遥感&#xff1f; 高光谱遥感为什么重要&#xff1f; 高光谱遥感与其他遥感技术的区别是什么&#xff1f; 高光谱遥感的历史和发展 高光谱传感器与数据获取 高光谱传感器类型 如何获…

RHCE第五次作业

目录 一、判断当前磁盘剩余空间是否有20G&#xff0c;如果小于20G&#xff0c;则将报警邮件发送给管理员&#xff0c;每天检查一次磁盘剩余空间 1.创建脚本test1.sh 2.下载邮件服务并执行 3.测试 4.做计划 二、 判断web服务是否运行&#xff08;1、查看进程的方式判断该程序…