使用深度学习Sequence-to-One回归
这个例子展示了如何预测一个波形的频率使用很长一段短期记忆(LSTM)神经网络。
您可以使用一个LSTM神经网络预测数字的反应序列使用训练集序列和目标的价值观。LSTM网络是一个递归神经网络(RNN)处理输入数据随着时间的推移,循环步骤和更新网络状态。网络状态包含信息记得在以前的时间步骤。一个序列的数字反应的例子包括:
序列的性质,如频率、最大价值,的意思。
过去或未来的值时间序列的步骤。
这个例子列车sequence-to-one回归LSTM网络使用波形数据集,其中包含1000综合生成的波形不同长度的三个频道。使用传统的方法来确定频率的波形,明白了fft
。
加载序列数据
加载的数据的例子WaveformData.mat
。数据是一个numObservations
1单元阵列的组合,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——”)
另请参阅
trainNetwork
|trainingOptions
|lstmLayer
|sequenceInputLayer
|预测