MATLAB 2018中LSTM时间序列分类

从MATLAB2018a开始,增加了LSTM神经网络工具箱。

MATLAB 2018中LSTM时间序列分类_第1张图片
上图将时序数据分类为categorical(0)或categorical(1),每一行代码解释如下:
该时序数据每一个时刻都是一个11维的列向量,隐藏层节点为270,分为两类0或1;
构造的网络层为:
序列输入层(参数为列向量维数);
LSTM层(参数为隐层节点,"outputmode"用来选择sequence to sequence 还是sequence to one);
全连接层(参数是分类种类,这里是0或1,所以是2);
softmax层(因为我们做的是分类,不是回归,所以要用softmax输出各类的概率,如果是做回归,就不需要加softmax层了);
全连接层(用于输出最后的分类结果)。
训练的次数epoch选择30次(即要用训练集中的所有数据,训练30次来求取网络参数,假设我们的训练集中有200组时序数据);
batchsize选择27,(即每次选择训练集中的27组时序数据进行一轮迭代iteration更新网络参数,那么我们可以算出每完成一次epoch,要进行200/27=7次iteration,剩下的11组数据当然被丢弃了);
trainingoptions里面的参数包括求解器、计算环境、是否要显示训练过程等;
trainNetwork用来训练网络net(参数包括训练数据、训练数据的标签、网络结构、options);
然后用classify进行分类(参数包括训练好的网络net、测试数据、batchsize可加可不加,我也不知道有什么用)

lstmLayer中的参数说明:
‘OutputMode’,‘last’—仅输出最后一个时刻的输出值(向量);
‘OutputMode’,‘sequence’—输出每一个时刻的输出值(向量);
因此,两者计算量相等,只是最后输出结果有差异。

对于双层的LSTM,需要注意:
第一种:
lstmLayer(numHiddenUnits1,‘OutputMode’,‘last’)—传递到第二层一个时刻的值
lstmLayer(numHiddenUnits2,‘OutputMode’,‘last’)
第二种:
lstmLayer(numHiddenUnits1,‘OutputMode’,‘sequence’)—传递到第二层好多时刻的值
lstmLayer(numHiddenUnits2,‘OutputMode’,‘last’)
第二种比第一种的计算量大,导致训练、测试耗时会长些,因为第二种的第一层传递更多时刻的值到第二层;
设置第一种双层的LSTM似乎没有多大意义,因为第二层没有接收到时序的数据

按照标签分类,可以将LSTM的功能分为classification和regression两类:
classification—对应的标签必须为categorical
regression—对应的标签必须为numerical
另,构建layers时,除了lstmLayer本身,经常要加入全连接层fullyConnectedLayer(numClasses)或者叫做fullyConnectedLayer(numResponses),前者对应classification,后者对应regression。
numClasses—分类的类别个数,如果label只有categorical(0)和categorical(1),那么numClasses就是2;
numResponses—回归到几个属性,就是几。

你可能感兴趣的:(MATLAB)