【lstm预测】基于LSTM实现人行为轨迹预测matlab代码

1 简介

LSTM(Long Short-Term Memory)是长短期记忆网络,是一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要事件。​

2 部分代码

clc;clear all;close all;

%synthetic reach data from LQG 2 joint controller
load('dat3.mat')
load netIMtoAng.mat
load netAngToPos.mat

YPred = predict(netIMtoAng,dat3);
Out1 = netAngToPos(YPred');

%% visualise decoded data
for i= 1:160
   % plot path in joint space
   p1 =  Out1(1:51,i);
   p2 =  Out1(52:102,i);
   v1 =  Out1(103:153,i);
   v2 =  Out1(154:204,i);
   subplot(131);plot(p1,p2,'.k'); title('Pos');hold on
   subplot(132);plot(v1,v2,'.k'); title('Vel');
   hold on;
%     pause
   subplot(133); plot(tTra(3,i),tTra(4,i),'o'); hold on;
end
% axis image;
subplot(132);xlabel('shoulder (rad)');
ylabel('elbow (rad)');


%% Test
t = Tiff('M7.tif','r');
S1   = read(t);
s{7} = rgb2gray(S1);
B{7} = imresize(s{7},[28 28]);
TestImage(:,:,1,1) = B{7}(:,:);

YPred = predict(netIMtoAng,TestImage(:,:,1,1));
Out2 = netAngToPos(YPred');

subplot(141); imshow(S1);title('Cartesian Work space')
subplot(142); plot(tTra(3,7),tTra(4,7),'or'); hold on;
plot(pi/2,pi/2,'or'); hold on;
xlim([0.8,2.4]);ylim([0.8,2.4]);axis square;title('Joint space');
xlabel('shoulder (rad)');
subplot(143);
p1 =  Out2(1:51,1);
p2 =  Out2(52:102,1);
v1 =  Out2(103:153,1);
v2 =  Out2(154:204,1);
plot(p1,p2,'.k'); title('Pos');hold on;
xlim([0.8,2.4]);ylim([0.8,2.4]);
xlabel('shoulder (rad)');
ylabel('elbow (rad)');
axis square
subplot(144);plot(v1,v2,'.k'); title('Vel');
xlabel('shoulder (rad/s)');
ylabel('elbow (rad/s)');
xlim([-2.5,2.5]);ylim([-2.5,2.5]);
axis square

%% Lstm
data = Out1(3:51,1)';
% dataY = Out1(54:102,1)';
% velX = Out1(105:153,1)';
% velY = Out1(156:204,1)';
% DD   = [dataX; dataY; velX; velY];

figure
plot(data)

%% prepare input -output for lstm
numTimeStepsTrain = floor(0.9*numel(data));

dataTrain = data(1:numTimeStepsTrain+1);
dataTest = data(numTimeStepsTrain+1:end);
mu       = mean(dataTrain);
sig       = std(dataTrain);
dataTrainStandardized = (dataTrain - mu) / sig;
XTra = dataTrainStandardized(1:end-1);
YTra = dataTrainStandardized(2:end);

%% LSTM training
numFeatures = 1;
numResponses = 1;
numHiddenUnits = 200;

layers = [ ...
   sequenceInputLayer(numFeatures)
   lstmLayer(numHiddenUnits)
   fullyConnectedLayer(numResponses)
   regressionLayer];

options = trainingOptions('adam', ...
   'MaxEpochs',250, ...
   'GradientThreshold',1, ...
   'InitialLearnRate',0.005, ...
   'LearnRateSchedule','piecewise', ...
   'LearnRateDropPeriod',125, ...
   'LearnRateDropFactor',0.2, ...
   'Verbose',0, ...
   'Plots','training-progress');

net = trainNetwork(XTra,YTra,layers,options);
analyzeNetwork(net)
%% forcast- predicted trajectory
dataTestStandardized = (dataTest - mu) / sig;
XTest = dataTestStandardized(1:end-1);
net = predictAndUpdateState(net,XTra);
[net,YPred] = predictAndUpdateState(net,YTra(end));

numTimeStepsTest = numel(XTest);
for i = 2:numTimeStepsTest
  [net,YPred(:,i)] = predictAndUpdateState(net,YPred(:,i-1),'ExecutionEnvironment','cpu');
end
YPred = sig*YPred + mu;
YTest = dataTest(2:end);
rmse = sqrt(mean((YPred-YTest).^2))
figure
plot(dataTrain(1:end-1),'Linewidth',6)
hold on
idx = numTimeStepsTrain:(numTimeStepsTrain+numTimeStepsTest);
plot(idx,[data(numTimeStepsTrain) YPred],'.-','Markersize',32)
hold off
legend(["Observed" "Forecast"]);
set(gca,'Fontsize',20);
xlabel('Time steps');
ylabel('Shoulder angle position(rad)')

3 仿真结果

4 参考文献

[1]刘一雄. 基于LSTM及注意力机制的行人轨迹预测模型[D]. 华中科技大学, 2018.

 

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要基于LSTM模型实现温度预测Matlab代码,首先需要导入相关的工具包,包括Deep Learning Toolbox和Neural Network Toolbox。然后,可以按照以下步骤进行实现: Step 1: 数据准备 首先,需要准备用于训练和测试的温度数据集。可以使用历史的温度数据作为输入特征,将未来某个时间点的温度作为目标输出。数据集可以是一个时间序列的数组,每一行代表一个时间步。 Step 2: 构建LSTM网络模型 使用LSTM网络是因为其在处理时间序列数据方面具有优势。在Matlab,可以使用深度学习网络设计工具箱来创建LSTM网络模型。具体可以使用下面的代码: ``` layers = [ ... sequenceInputLayer(inputSize) ... lstmLayer(hiddenSize,'OutputMode','sequence') ... fullyConnectedLayer(outputSize) ... regressionLayer]; net = trainNetwork(XTrain, YTrain, layers, options); ``` 其,inputSize表示输入特征的大小,hiddenSize表示隐藏层的神经元数量,outputSize表示输出的大小。XTrain和YTrain分别表示训练集的输入特征和目标输出。 Step 3: 模型训练 利用准备好的训练数据集,使用trainNetwork函数对LSTM模型进行训练。可以设定训练的参数和选项,如迭代次数、学习率等。具体可以使用如下代码: ``` options = trainingOptions('adam', ... 'MaxEpochs',100, ... 'GradientThreshold',1, ... 'InitialLearnRate',0.01, ... 'LearnRateSchedule','piecewise', ... 'LearnRateDropFactor',0.1, ... 'LearnRateDropPeriod',50, ... 'Verbose',0); net = trainNetwork(XTrain, YTrain, layers, options); ``` Step 4: 模型预测 训练完成后,可以使用训练好的LSTM模型进行预测。首先,需要准备好测试数据集,然后使用trainedNetwork函数对测试数据进行预测。具体可以使用如下代码: ``` YPred = predict(net, XTest); ``` 其,XTest表示测试集的输入特征。 Step 5: 结果评估 最后,可以评估预测结果的准确性。可以使用一些指标,如均方根误差(RMSE)或平均绝对百分比误差(MAPE),来衡量预测结果和实际观测值之间的差异。 以上就是基于LSTM模型的温度预测Matlab代码实现过程。希望可以帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值