matlab深度学习之LSTM

利用历史序列进行预测

clc
clear
%% 加载示例数据。
%chickenpox_dataset 包含一个时序,其时间步对应于月份,值对应于病例数。
%输出是一个元胞数组,其中每个元素均为单一时间步。将数据重构为行向量。
data = chickenpox_dataset;
data = [data{:}];figure
plot(data)
xlabel("Month")
ylabel("Cases")
title("Monthly Cases of Chickenpox")
%% 对训练数据和测试数据进行分区。
%序列的前 90% 用于训练,后 10% 用于测试。
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;
%% 准备预测变量和响应
%要预测序列在将来时间步的值,请将响应指定为将值移位了一个时间步的训练序列。
%也就是说,在输入序列的每个时间步,LSTM 网络都学习预测下一个时间步的值。
%预测变量是没有最终时间步的训练序列。
XTrain = dataTrainStandardized(1:end-1);
YTrain = dataTrainStandardized(2:end);
%% 定义 LSTM 网络架构
%创建 LSTM 回归网络。指定 LSTM 层有 200 个隐含单元
numFeatures = 1;
numResponses = 1;
numHiddenUnits = 200;layers = [ ...sequenceInputLayer(numFeatures)lstmLayer(numHiddenUnits)fullyConnectedLayer(numResponses)regressionLayer];
%指定训练选项。
%将求解器设置为 'adam' 并进行 250 轮训练。
%要防止梯度爆炸,请将梯度阈值设置为 1。
%指定初始学习率 0.005,在 125 轮训练后通过乘以因子 0.2 来降低学习率。
options = trainingOptions('adam', ...'MaxEpochs',250, ...'GradientThreshold',1, ...'InitialLearnRate',0.005, ...'LearnRateSchedule','piecewise', ...'LearnRateDropPeriod',125, ...'LearnRateDropFactor',0.2, ...'Verbose',0, ...'Plots','training-progress');
%% 训练 LSTM 网络
%使用 trainNetwork 以指定的训练选项训练 LSTM 网络。
net = trainNetwork(XTrain,YTrain,layers,options);
%% 预测将来时间步
%要预测将来多个时间步的值,请使用 predictAndUpdateState 函数一次预测一个时间步,并在每次预测时更新网络状态。对于每次预测,使用前一次预测作为函数的输入。
%使用与训练数据相同的参数来标准化测试数据。
dataTestStandardized = (dataTest - mu) / sig;
XTest = dataTestStandardized(1:end-1);
%要初始化网络状态,请先对训练数据 XTrain 进行预测。
%接下来,使用训练响应的最后一个时间步 YTrain(end) 进行第一次预测。
%循环其余预测并将前一次预测输入到 predictAndUpdateState。
%对于大型数据集合、长序列或大型网络,在 GPU 上进行预测计算通常比在 CPU 上快。
%其他情况下,在 CPU 上进行预测计算通常更快。
%对于单时间步预测,请使用 CPU。
%使用 CPU 进行预测,请将 predictAndUpdateState 的 'ExecutionEnvironment' 选项设置为 'cpu'。
net = predictAndUpdateState(net,XTrain);
[net,YPred] = predictAndUpdateState(net,YTrain(end));numTimeStepsTest = numel(XTest);
for i = 2:numTimeStepsTest[net,YPred(:,i)] = predictAndUpdateState(net,YPred(:,i-1),'ExecutionEnvironment','cpu');
end
%使用先前计算的参数对预测去标准化。
YPred = sig*YPred + mu;
%训练进度图会报告根据标准化数据计算出的均方根误差 (RMSE)。根据去标准化的预测值计算 RMSE。
YTest = dataTest(2:end);
rmse = sqrt(mean((YPred-YTest).^2))
%使用预测值绘制训练时序。
figure
plot(dataTrain(1:end-1))
hold on
idx = numTimeStepsTrain:(numTimeStepsTrain+numTimeStepsTest);
plot(idx,[data(numTimeStepsTrain) YPred],'.-')
hold off
xlabel("Month")
ylabel("Cases")
title("Forecast")
legend(["Observed" "Forecast"])
%将预测值与测试数据进行比较。
figure
subplot(2,1,1)
plot(YTest)
hold on
plot(YPred,'.-')
hold off
legend(["Observed" "Forecast"])
ylabel("Cases")
title("Forecast")subplot(2,1,2)
stem(YPred - YTest)
xlabel("Month")
ylabel("Error")
title("RMSE = " + rmse)
%% 使用观测值更新网络状态
%如果您可以访问预测之间的时间步的实际值,则可以使用观测值而不是预测值更新网络状态。
%首先,初始化网络状态。要对新序列进行预测,请使用 resetState 重置网络状态。
%重置网络状态可防止先前的预测影响对新数据的预测。重
%置网络状态,然后通过对训练数据进行预测来初始化网络状态。
net = resetState(net);
net = predictAndUpdateState(net,XTrain);
%对每个时间步进行预测。对于每次预测,使用前一时间步的观测值预测下一个时间步。
%将 predictAndUpdateState 的 'ExecutionEnvironment' 选项设置为 'cpu'。
YPred = [];
numTimeStepsTest = numel(XTest);
for i = 1:numTimeStepsTest[net,YPred(:,i)] = predictAndUpdateState(net,XTest(:,i),'ExecutionEnvironment','cpu');
end
%使用先前计算的参数对预测去标准化。
YPred = sig*YPred + mu;
%计算均方根误差 (RMSE)。
rmse = sqrt(mean((YPred-YTest).^2))
%将预测值与测试数据进行比较。
figure
subplot(2,1,1)
plot(YTest)
hold on
plot(YPred,'.-')
hold off
legend(["Observed" "Predicted"])
ylabel("Cases")
title("Forecast with Updates")subplot(2,1,2)
stem(YPred - YTest)
xlabel("Month")
ylabel("Error")
title("RMSE = " + rmse)

matlab深度学习之LSTM预测相关推荐

  1. MATLAB深度学习之LSTM

    MATLAB深度学习之LSTM 深度学习工具箱 net = trainNetwork(sequences,Y,layers,options) clc clear %% 训练深度学习 LSTM 网络,进 ...

  2. 【深度学习】LSTM预测股票价格--单因素--多步--输出单回归特征

    入行深度学习1年多了,该还的还得还,没接触过LSTM的预测项目,这就来活了. 文章目录 前言 1. 开工 1.1 引入必须的库 1.2 数据初探 1.3 划分数据集 1.4 数据归一化 1.5 数据分 ...

  3. matlab深度学习工具箱LSTM学习心得

    通过对matlab2018b的帮助学习,对着帮助进行代码练习和学习,得到几点体会: 一单双向LSTM bilstmLayer(numHiddenUnits,'OutputMode','last')%双 ...

  4. pytorch - 深度学习之 - LSTM预测股票走势

    本次数据集采用的是沪深300指数数据,选取每天的最高价格.使用LSTM模型来捕捉最高价格的时序信息,通过训练模型,使之学会使用前n天的数据,来预测当天的数据. 本次数据集可使用 tushare来下载. ...

  5. 深度学习多变量时间序列预测:LSTM算法构建时间序列多变量模型预测交通流量+代码实战

    深度学习多变量时间序列预测:LSTM算法构建时间序列多变量模型预测交通流量+代码实战 LSTM(Long Short Term Memory Network)长短时记忆网络,是一种改进之后的循环神经网 ...

  6. 深度学习多变量时间序列预测:Encoder-Decoder LSTM算法构建时间序列多变量模型预测交通流量+代码实战

    深度学习多变量时间序列预测:Encoder-Decoder LSTM算法构建时间序列多变量模型预测交通流量+代码实战 LSTM是一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要 ...

  7. 【深度学习】LSTM神经网络解决COVID-19预测问题(二)

    [深度学习]LSTM神经网络解决COVID-19预测问题(二) 文章目录 1 概述 2 模型求解和检验 3 模型代码 4 模型评价与推广 5 参考 1 概述 建立一个普适性较高的模型来有效预测疫情的达 ...

  8. 【深度学习】LSTM神经网络解决COVID-19预测问题(一)

    [深度学习]LSTM神经网络解决COVID-19预测问题 文章目录 1 概述 2 数据分析 3 SIR模型和LSTM网络的对比 4 LSTM神经网络的建立 5 参考 1 概述 我们将SIR传播模型和L ...

  9. 浅谈深度学习:LSTM对股票的收益进行预测(Sequential 序贯模型,Keras实现)

    浅谈深度学习:LSTM对股票的收益进行预测(Sequential 序贯模型,Keras实现) 总包含文章: 一个完整的机器学习模型的流程 浅谈深度学习:了解RNN和构建并预测 浅谈深度学习:基于对LS ...

  10. matlab使用深度学习进行时间序列预测

    使用深度学习进行时间序列预测 - MATLAB & Simulink - MathWorks 中国 Deep Learning Toolbox 快速入门 - MathWorks 中国

最新文章

  1. 周志华教授:关于深度学习的一点思考!
  2. 论文笔记:[ICLR 2020] Tips for prospective and early-stage PhD students
  3. arcgis中欧氏距离操作_ArcGIS空间统计工具—平均中心与中位数中心
  4. 雌性激素过高怎么办?
  5. python PyQt5 QPixmap()控件
  6. Java io流---拷贝目录
  7. CnCiswumWN
  8. linux+nginx+php+mysql安装及配置
  9. 易语言html5内核,精易Web浏览器支持库易语言版
  10. [原创]佰志达SBO网上商城系统业务框架介绍
  11. 从0到1,数据治理一周年大纪实
  12. coreldraw x8的序列号无效在哪里找?绿色安装教程
  13. 房贷又降,不买!还能降
  14. 以太网的网络电缆线被拔出怎么解决
  15. Python 适合初学编程的人学吗?
  16. 再谈6大国产CPU处理器
  17. 系统设计中的集群隔离和机房隔离
  18. nodejs+vue+elementui高校体育馆场地预订系统
  19. 用自己的祖源成分数据与其他祖源成分数据做对比
  20. 微信小程序真机调试不能访问本地API

热门文章

  1. zTree展开树节点
  2. leaflet地图之 获取经纬度
  3. Fortran 95简单教程(二)
  4. PHP开发从入门到实战教程分享
  5. 单片机编程软件很简单(12),Keil单片机编程软件配置操作
  6. 提升效率之串口监控工具
  7. 中国科学院微电子学院计算机,周云燕 - 中国科学院大学 - 微电子学院
  8. shell脚本编程基础(三)
  9. 计算机网络工程综合布线目的,浅谈网络工程综合布线系统
  10. 扫荡波”来袭已造成大面积用户系统崩溃