主要内容

列车网络的时间序列预测使用深层网络设计师

这个例子展示了如何训练很长时间序列数据预测短期记忆(LSTM)网络深层网络设计师

深层网络设计师可以交互式地创建和深层神经网络训练序列分类和回归的任务。

预测未来的值时间序列的步骤,你可以训练一个sequence-to-sequence回归LSTM网络,反应的训练序列值由一个时间步转移。也就是说,在每个时间步的输入序列,LSTM网络学习来预测下一个时间步的价值。

下面的例子使用了数据集chickenpox_dataset。示例创建和火车LSTM网络预测水痘病例的病例数在前几个月。

加载序列数据

加载示例数据。chickenpox_dataset包含一个时间序列,随着时间的推移步骤对应月和值相应的病例数量。输出是一个单元阵列,其中每个元素是一个时间步。重塑一个行向量数据。

数据= chickenpox_dataset;数据=({}):数据;图绘制(数据)包含(“月”)ylabel (“案例”)标题(“月度水痘病例”)

分区的训练和测试数据。火车在第一次90%的序列和测试最后10%。

地板numTimeStepsTrain =(0.9 *元素个数(数据)
numTimeStepsTrain = 448
dataTrain =数据(1:numTimeStepsTrain + 1);人数(=数据(numTimeStepsTrain + 1:结束);

标准化数据

为更好的适应和防止培训不同,规范训练数据零均值和单位方差。预测,必须规范使用相同的参数测试数据作为训练数据。

μ=意味着(dataTrain);sig =性病(dataTrain);dataTrainStandardized = (dataTrain -μ)/团体;

准备预测和响应

预测未来时间的步骤序列的值,指定的响应作为训练序列与由一个时间步长值转移。也就是说,在每个时间步的输入序列,LSTM网络学习来预测下一个时间步的价值。预测是没有最后的时间步长训练序列。

XTrain = dataTrainStandardized (1: end-1);YTrain = dataTrainStandardized(2:结束);

训练网络使用深层网络设计师,将训练数据转换成一个数据存储对象。使用arrayDatastore将训练数据预测和响应ArrayDatastore对象。使用结合结合这两种数据存储。

adsXTrain = arrayDatastore (XTrain);adsYTrain = arrayDatastore (YTrain);cdsTrain =结合(adsXTrain adsYTrain);

定义LSTM网络体系结构

要创建LSTM网络体系结构,使用深层网络设计师。的深层网络设计师应用程序允许您构建、可视化、编辑和火车深度学习网络。

deepNetworkDesigner

深层网络设计师起始页,暂停Sequence-to-Sequence并点击开放。这样做打开一个预先构建的网络适合sequence-to-sequence分类任务。你可以分类网络转换成一个回归网络取代最后一层。

删除将softmax层和分类层,代之以一个回归层。

调整图层的属性使他们适合水痘的数据集。这个数据只有一个输入特性和一个输出特性。选择sequenceInputLayer并设置InputSize1。选择fullyConnectedLayer并设置OutputSize1

检查你的网络点击分析。网络如果准备培训深入学习网络分析仪零错误报告。

导入数据

导入培训数据存储,选择数据选项卡并单击导入数据>导入数据存储。选择cdsTrain作为训练数据,没有一个验证数据。点击进口

数据预览显示一个输入时间序列和一个响应时间序列,每个448时间步。

指定培训选项

培训选项卡上,单击培训方案。集解算器亚当,InitialLearnRate0.005,MaxEpochs500年。防止梯度爆炸,设置GradientThreshold1

设置培训选项的更多信息,请参阅trainingOptions

列车网络的

点击火车

深层网络设计师显示一个动画情节展示培训进展。情节显示mini-batch损失和精度,验证损失和准确性,和额外的信息在培训的进展。

培训完成后,通过点击导出训练网络出口培训选项卡。训练网络保存的trainedNetwork_1变量。

预测未来时间的步骤

测试训练网络预测在未来多个时间步骤。使用predictAndUpdateState时间预测函数一次一个步骤在每个预测和更新网络状态。对于每一个预测,使用前面的预测函数作为输入。

标准化测试数据使用相同的参数作为训练数据。

dataTestStandardized =(人数(μ)/团体;XTest = dataTestStandardized (1: end-1);欧美=人数((2:结束);

初始化网络状态,首先对训练数据预测XTrain。接下来,让第一个预测使用最后一个时间步的训练反应YTrain(结束)。循环剩余的预测和输入之前的预测predictAndUpdateState

对于大型数据集合,长序列,或大型网络,预测在GPU上通常比预期更快的计算CPU。否则,预测在CPU上通常是更快的计算。一步预测单次使用CPU。预测使用的CPU,设置“ExecutionEnvironment”选择predictAndUpdateState“cpu”

网= predictAndUpdateState (trainedNetwork_1 XTrain);[净,YPred] = predictAndUpdateState(净,YTrain(结束));numTimeStepsTest =元素个数(XTest);我= 2:numTimeStepsTest[净,YPred(:,我)]= predictAndUpdateState(净,YPred(张:,)“ExecutionEnvironment”,“cpu”);结束

Unstandardize预测使用前面计算的参数。

YPred =团体* YPred +μ;

培训情节进展报告均方根误差(RMSE)从标准化的数据计算。计算的RMSE unstandardized预测。

rmse =√意味着(YPred-YTest)。^ 2))
rmse =175.9693

情节的培训时间序列预测的值。

图绘制(dataTrain (1: end-1))idx = numTimeStepsTrain:(numTimeStepsTrain + numTimeStepsTest);情节(idx (numTimeStepsTrain) YPred][数据,“。”)举行包含(“月”)ylabel (“案例”)标题(“预测”)传说([“观察”“预测”])

比较测试数据的预测价值。

图次要情节(2,1,1)情节(欧美)情节(YPred“。”)举行传奇([“观察”“预测”])ylabel (“案例”)标题(“预测”次要情节(2,1,2)干细胞(YPred -欧美)包含(“月”)ylabel (“错误”)标题(" RMSE = "+ rmse)

更新网络状态与观测值

如果你有访问时间的实际值预测之间的步骤,你可以更新网络状态与观测值的预测值。

首先,初始化网络状态。在一个新的序列进行预测,重置网络状态使用resetState。重置网络状态阻止先前的预测影响预测新数据。重置网络状态,然后初始化网络状态由训练数据的预测。

网= resetState(净);网= predictAndUpdateState(净,XTrain);

预测在每个时间步。对于每一个预测,预测下一个时间步使用前面的时间步的观测值。设置“ExecutionEnvironment”选择predictAndUpdateState“cpu”

YPred = [];numTimeStepsTest =元素个数(XTest);i = 1: numTimeStepsTest[净,YPred(:,我)]= predictAndUpdateState(净,XTest(:,我)“ExecutionEnvironment”,“cpu”);结束

Unstandardize预测使用前面计算的参数。

YPred =团体* YPred +μ;

计算均方根误差(RMSE)。

rmse =√意味着(YPred-YTest)。^ 2))
rmse = 119.5968

比较测试数据的预测价值。

图次要情节(2,1,1)情节(欧美)情节(YPred“。”)举行传奇([“观察”“预测”])ylabel (“案例”)标题(“与更新预测”次要情节(2,1,2)干细胞(YPred -欧美)包含(“月”)ylabel (“错误”)标题(" RMSE = "+ rmse)

这里的预测更准确的更新网络状态时观察到的值而不是预测的值。

另请参阅

相关的话题