主要内容

使用深度学习Sequence-to-One回归

这个例子展示了如何预测一个波形的频率使用很长一段短期记忆(LSTM)神经网络。

您可以使用一个LSTM神经网络预测数字的反应序列使用训练集序列和目标的价值观。LSTM网络是一个递归神经网络(RNN)处理输入数据随着时间的推移,循环步骤和更新网络状态。网络状态包含信息记得在以前的时间步骤。一个序列的数字反应的例子包括:

  • 序列的性质,如频率、最大价值,的意思。

  • 过去或未来的值时间序列的步骤。

这个例子列车sequence-to-one回归LSTM网络使用波形数据集,其中包含1000综合生成的波形不同长度的三个频道。使用传统的方法来确定频率的波形,明白了fft

加载序列数据

加载的数据的例子WaveformData.mat。数据是一个numObservations1单元阵列的组合,numObservations是序列的数量。每个序列都是一个numChannels——- - - - - -numTimeSteps数字数组,numChannels频道的顺序和数量吗numTimeSteps是时间序列中的步骤的数量。在相应的目标numObservations——- - - - - -numResponses波形的频率的数字数组numResponses是渠道的数量的目标。

负载WaveformData

视图的观察。

numObservations =元素个数(数据)
numObservations = 1000

视图的大小头几个序列和相应的频率。

数据(1:4)
ans =4×1单元阵列{3×103双}{3×136双}{3×140双}{3×124双}
频率(1:4,:)
ans =4×15.8922 2.2557 4.5250 4.4418

视图的通道数序列。网络培训,每个序列必须有相同数量的渠道。

{1}numChannels =大小(数据,1)
numChannels = 3

视图的反应(渠道的数量目标)。

numResponses =大小(频率,2)
numResponses = 1

想象情节的头几个序列。

图tiledlayout (2, 2)i = 1:4 nexttile stackedplot(数据{我}’,DisplayLabels =“通道”+ (1:numChannels))包含(“时间步”)标题(频率:“+频率(i))结束

准备培训资料

预留数据验证和测试。分区数据到一个包含80%的数据训练集,验证集包含10%的数据,和一个测试集包含了剩下的10%的数据。

[idxTrain, idxValidation idxTest] = trainingPartitions (numObservations [0.8 0.1 0.1]);XTrain =数据(idxTrain);XValidation =数据(idxValidation);XTest =数据(idxTest);TTrain =频率(idxTrain);TValidation =频率(idxValidation);tt =频率(idxTest);

定义LSTM网络体系结构

创建一个LSTM回归网络。

  • 使用序列输入层和一个输入大小相匹配的渠道数量的输入数据。

  • 为更好的适应和防止培训不同,设置归一化选择序列的输入层”zscore”。这可实现零均值和单位方差序列数据。

  • 使用一个LSTM隐藏层100单元。隐藏单位的数量决定了学到的信息层。更大的值可以产生更精确的结果,但可以更容易过度拟合训练数据。

  • 为每个序列,输出一个时间步长设置OutputMode选择LSTM层”去年”。

  • 指定的值来预测,包括一个完全连接层大小匹配的数量预测,其次是一个回归层。

numHiddenUnits = 100;层= [sequenceInputLayer (numChannels正常化=“zscore”)lstmLayer (numHiddenUnits OutputMode =“最后一次”)fullyConnectedLayer (numResponses) regressionLayer]
层= 4×1层阵列层:1“序列输入序列与三维输入2”LSTM LSTM 100隐藏单位3“完全连接1完全连接层4”回归输出均方误差

指定培训选项

指定培训选项。

  • 火车用亚当优化器。

  • 火车250时代。对于更大的数据集,您可能不需要为尽可能多的火车时代一个不错的选择。

  • 指定用于验证序列和响应。

  • 出最好的输出网络,即最低,确认损失。

  • 设置学习速率为0.005。

  • 截断在每个mini-batch序列有相同的长度最短的序列。删除序列确保没有添加填充物,在丢弃的成本数据。时间序列的所有步骤的序列可能包含重要信息,截断可以防止网络实现一个不错的选择。

  • 显示训练过程在一个阴谋。

  • 禁用详细输出。

选择= trainingOptions (“亚当”,MaxEpochs = 250,ValidationData = {XValidation TValidation},OutputNetwork =“best-validation-loss”,InitialLearnRate = 0.005,SequenceLength =“最短”,情节=“训练进步”,Verbose = false);

火车LSTM网络

火车LSTM网络使用指定的培训使用的选项trainNetwork函数。

网= trainNetwork (XTrain、TTrain层,选择);

测试LSTM网络

使用测试数据做出预测。

欧美=预测(净、XTest SequenceLength =“最短”);

可视化最初几个预测在一个阴谋。

图tiledlayout (2, 2)i = 1:4 nexttile stackedplot (XTest{我}’,DisplayLabels =“通道”+ (1:numChannels))包含(“时间步”)标题(预测频率:“+字符串(欧美(i)))结束

可视化在直方图均方误差。

图直方图(意思是((tt -欧美)^ 2,2))包含(“错误”)ylabel (“频率”)

计算总体均方误差。

rmse =√意味着(YTest-TTest)。^ 2))
rmse =0.6865

预测频率与实际频率的阴谋。

图散射(欧美、tt、“b +”);包含(“预测频率”)ylabel (“实际频率”)举行m = min(频率);M = max(频率);xlim ([m m]) ylim ([m m])情节([m m], [m m],“r——”)

另请参阅

||||

相关的话题