matlab 深度学习工具箱使用笔记—lstm网络
在2017的版本之后,matlab上线了自己的lstm网络工具箱,至此,搭建简单的网络时,就可以只用工具包所提供的函数,并且matlab提供了GUI和训练过程界面,可以方便的使用,至于tensorflow的使用方法,将在以后的博文中讲解
data = chickenpox_dataset;%读取数据集
data = [data{:}];%将数据集变为数组的形式,此时得到的是一个1n维的数组,n代表n个时刻,其中存储的是每个时刻的值,即对于时序预测,只有发生的顺序,不存在实际的时间
figure
plot(data)
xlabel(“Month”)
ylabel(“Cases”)
title(“Monthy Cases of Chickenpox”)
numTimeStepsTrain = floor(0.9numel(data));%将90%的数据设定为训练集
dataTrain = data(1:numTimeStepsTrain+1);%定义训练集和测试集
dataTest = data(numTimeStepsTrain+1:end);%
mu = mean(dataTrain);%求均值和方差,为以后的归一化做准备
sig = std(dataTrain);dataTrainStandardized = (dataTrain - mu) / sig;%归一化,这里是防止数据发散
XTrain = dataTrainStandardized(1:end-1);做了一个时序的错位,将后一个时刻的作为标签,标签和特征参量的大小对应
YTrain = dataTrainStandardized(2:end);
numFeatures = 1;输入特征维数
numResponses = 1;输出特征维数
numHiddenUnits = 200;每一层lstm网络中存在多少神经元layers = [ …
sequenceInputLayer(numFeatures)输入层,参数是输入特征维数
lstmLayer(numHiddenUnits)lstm层,如果想要构建多层lstm,改几个参数就行了
fullyConnectedLayer(numResponses)全连接层,也就是输出的维数
regressionLayer];该参数说明是在进行回归问题,而不是分类问题
options = trainingOptions(‘adam’, …
‘MaxEpochs’,250, …这个参数是最大迭代次数,即进行250次训练,每次训练后更新神经网络参数
‘GradientThreshold’,1, …
‘InitialLearnRate’,0.005, …学习率
‘LearnRateSchedule’,‘piecewise’, …
‘LearnRateDropPeriod’,125, …训练125次后学习率下降,衰落因子为0.2
‘LearnRateDropFactor’,0.2, …
‘Verbose’,0, …
‘Plots’,‘training-progress’);
net = trainNetwork(XTrain,YTrain,layers,options);
以上是神经网络搭建与训练部分的代码,来源于2018官方文档,各参数的详细说明已经写在了参数旁边
有几个问题,与tensor不同,没有一个类似于timestep的参数来确定输入究竟和多少个参数相关,怀疑是因为lstm网络中存在自己的遗忘门和更新门,并且lstm神经网络是步进式的输入,只要有网络的的储存的状态,就可以针对输入,得到输出。
具体的预测部分的代码将在下一次的博文中进行探讨