Matlab使用LSTM网络做classification和regression时XTrain的若干种数据结构-part I

目前看来,Deep learning的两大用途是classification和regression. 以LSTM为例,它的优势在于对时序数据(sequence data)强大的处理能力,简单来说,可以用作:
(1). sequence-to-label classification
(2). sequence-to-sequence classification
(3). sequence-to-label regression
(4). sequence-to-sequence regression
在不同应用场景下构建训练数据的输入XTrain是关键的一步。下面分别以上述三个应用场景为例,描述所需构建的XTrain结构。

1. sequence-to-label classification

1.1 构建网络的输入XTrain和输出YTrain

以Janpanese Vowels data 为例,在matlab中加载数据

[XTrain,YTrain] = japaneseVowelsTrainData;

在这里插入图片描述
XTrain是一个270-by-1的cell array. 每一个cell是一个12-by-N的矩阵,其中每个cell的N可以不一样。
XTrain可以描述如下:XTrain包含了270个sequences,每个sequence的长度是变化的,sequence的feature dimension是12(XTrain is a cell array containing 270 sequences of varying length with a feature dimension of 12).
XTrain的物理意义可以解释如下:采集了270匹狼嚎的声音样本,每一个声音样本的时间长度不一样,每一个声音样本提取了一个12维的特征向量。因此,对每一个声音样本来说(也就是每一个cell),每一列数据代表某一个时间点上的feature vector,其长度为12。将每一列数据沿行方向排列,构成时间尺度。以XTrain的第一个元素为例,将它展开,如下图
在这里插入图片描述
在sequence-to-label classification应用场景下,YTrain需要是category类型的数据,在该例子中,YTrain是一个270-by-1的category cell.

1.2 设计LSTM网络架构

用作sequence-to-label classification的LSTM网络,需要至少包含一个sequence input layer,一个lstm layer,一个fullyconnected layer, 一个softmax layer和一个classification output layer。关于如何创建每一个layer,在mathworks官网->support->documentation里检索‘layer’。LSTM网络的创建相对程序化,比较简单。

inputSize = 12;
numHiddenUnits = 100;
numClasses = 9;
% 参数说明: 
% 1. inputSize是sequenceInputLayer函数的实参。它是
% 特征的维度,也就是每一个cell里面矩阵的行数。
% 2. numHiddenUnits 是lstmLayer函数的参数,它设定LSTM网路包含的隐藏单元数目
% numClass是fullyConnectedLayer的实参,它是label的个数,对于该例子,就是所要识别的狼的种类数。
layers = [ ...
    sequenceInputLayer(inputSize)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

注意:在sequence-to-label classification场景下,lstmLayer函数的’OutputMode’参数的值需要设定为’last’。而在sequence-to-sequence classification场景下,使用相同的网络架构,但是’OutputMode’的值需要设定为’sequence’。

1.3 设置训练option

使用trainingOptions函数设置training options。
主要有:
(1) 求解器设置为’adam’
(2) 执行环境选’cpu’,如果在GPU上训练,则 ExecutionEnvironment的值设置为’auto’
(3) 设置mini-batch size 为27
(4) maximum number of epochs 设置为100

maxEpochs = 100;
miniBatchSize = 27;

options = trainingOptions('adam', ...
    'ExecutionEnvironment','cpu', ...
    'MaxEpochs',maxEpochs, ...
    'MiniBatchSize',miniBatchSize, ...
    'GradientThreshold',1, ...
    'Verbose',false, ...
    'Plots','training-progress');

设置好后使用trainNetwork函数训练网络,该函数需要馈入四个参数,分别是
(1) 训练数据的输入XTrain
(2) 训练数据的输出YTrain
(3) 网络架构layers
(4) 训练的training options

net=trainNetwork(XTrain,YTrain,layers, options)

后面的test等等不再赘述。
以上参考:mathworks官网->support->documentation->检索sequenceInputLayer
下一篇记录如何使用LSTM 进行sequence-to-sequence classification

发布了21 篇原创文章 · 获赞 10 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_43196262/article/details/83106239