• 大小: 5KB
    文件类型: .m
    金币: 2
    下载: 0 次
    发布日期: 2024-01-31
  • 语言: Matlab
  • 标签: DeepLearning  

资源简介

MATLAB复现LSTM网络学习预测,此示例说明如何使用长期短期记忆 (LSTM) 网络预测时序数据。要预测序列在将来时间步的值,您可以训练“序列到序列”回归 LSTM 网络,其中响应是将值移位了一个时间步的训练序列。也就是说,在输入序列的每个时间步,LSTM 网络都学习预测下一个时间步的值。

资源截图

代码片段和文件信息

clc;
clear;
data = chickenpox_dataset;%加载数据集 chickenpox_dataset是一个函数
data = [data{:}];%将数据集变为数组的形式,此时得到的是一个1*n维的数组,n代表n个时刻,其中存储的是每个时刻的值,即对于时序预测,只有发生的顺序,不存在实际的时间 
figure; %创建一个用来显示图形输出的一个窗口对象。各种属性都使用的默认设置  
plot(data); %若data是向量,则以data的分量为纵坐标,以元素序号为横坐标,用直线以此连接数据点,绘制曲线。若y为实矩阵,则按列绘制每列对应的曲线 
xlabel(“Month“); %纵坐标的名称 
ylabel(“Cases“); %横坐标的名称 
title(“Monthy Cases of Chickenpox“); %曲线图的标题

%对训练数据和测试数据进行分区。序列的前 90% 用于训练,后 10% 用于测试
numTimeStepsTrain = floor(0.9*numel(data));%将90%的数据设定为训练集
dataTrain = data(1:numTimeStepsTrain+1);%定义训练集 
dataTest = data(numTimeStepsTrain+1:end);%定义测试集

%为了获得较好的拟合并防止训练发散,将训练数据标准化为具有零均值和单位方差。在预测时,您必须使用与训练数据相同的参数来标准化测试数据。
mu = mean(dataTrain);%求均值,为以后的归一化做准备
sig = std(dataTrain);%求均差,为以后的归一化做准备
dataTrainStandardized = (dataTrain - mu) / sig;%归一化,这里方式数据发散

%要预测序列在将来时间步的值,请将响应指定为将值移位了一个时间步的训练序列。
%也就是说,在输入序列的每个时间步,LSTM 网络都学习预测下一个时间步的值。预测变量是没有最终时间步的训练序列。
XTrain = dataTrainStandardized(1:end-1);
YTrain = dataTrainStandardized(2:end);

%创建LSTM回归网络。指定LSTM层有200个隐含单元。
numFeatures = 1;%输入特征维数 
numResponses = 1;%输出特征维数 
numHiddenUnits = 200;%每一层lsmt网络中存在多少神经单元 
layers = [ ...     
    sequenceInputlayer(numFeatures)%输入层,参数是输入特征维数     
    lstmlayer(numHiddenUnits)%lsmt层,如果想要构建多层lstm修改参数即可   
    fullyConnectedlayer(numResponses)%全连接层 也就是输出的维数    
    regressionlayer];%该参数说明是在进行回归问题,而不是分类问题

%指定训练选项。将求解器设置为 ‘adam‘ 并进行 250 轮训练。要防止梯度爆炸,请将梯度阈值设置为 1。
%指定初始学习率 0.005,在 125 轮训练后通过乘以因子 0.2 来降低学习率。
options = trainingOptions(‘adam‘ ...   
    ‘MaxEpochs‘250 ... %这个参数是最大迭代次数,即进行250次训练,每次训练后更改神经网络参数 
    ‘GradientThreshold‘1 ...%设置梯度阀值为1 ,防止梯度爆炸   
    ‘InitialLearnRate‘0.005 ... %设置初始学习率    
    ‘LearnRateSchedule‘‘piecewise‘ ...   
    ‘LearnRateDropPeriod‘125 ... %训练125次后学习率下降,衰落因子为0.2 
    ‘LearnRateDropFactor‘0.2 ... %训练125次后的学习率的衰落因子为0.2  
    ‘Verbose‘0 ...    
    ‘Plots‘‘training-progress‘); %构建曲线图

%使用 trainNetwork 以指定的训练选项训练 LSTM 网络。
net = trainNetwork(XTrainYTrainlayersoptions);

%要预测将来多个时间步的值,请使用 predictAndUpdateState 函数一次预测一个时间步,并在每次预测时更新网络状态。对于每次预测,使用前一次预测作为函数的输入。
%使用与训练数据相同的参数来标准化测试数据。
dataTestStandardized = (dataTest - mu) / sig; %归一化处理,防止数据发散
XTest = dataTe

评论

共有 条评论