• 大小: 5KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2023-12-24
  • 语言: Matlab
  • 标签: lstm  

资源简介

matlab深度学习工具箱之LSTM, 采用历史序列进行预测, MATLAB应用实例 直接采用工具箱进行序列预测

资源截图

代码片段和文件信息

clc
clear
%% 加载示例数据。
%chickenpox_dataset 包含一个时序,其时间步对应于月份,值对应于病例数。
%输出是一个元胞数组,其中每个元素均为单一时间步。将数据重构为行向量。
data = chickenpox_dataset;
data = [data{:}];

figure
plot(data)
xlabel(“Month“)
ylabel(“Cases“)
title(“Monthly Cases of Chickenpox“)
%% 对训练数据和测试数据进行分区。
%序列的前 90% 用于训练,后 10% 用于测试。
numTimeStepsTrain = floor(0.9*numel(data));
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 回归网络。指定 LSTM 层有 200 个隐含单元
numFeatures = 1;
numResponses = 1;
numHiddenUnits = 200;

layers = [ ...
    sequenceInputlayer(numFeatures)
    lstmlayer(numHiddenUnits)
    fullyConnectedlayer(numResponses)
    regressionlayer];
%指定训练选项。
%将求解器设置为 ‘adam‘ 并进行 250 轮训练。
%要防止梯度爆炸,请将梯度阈值设置为 1。
%指定初始学习率 0.005,在 125 轮训练后通过乘以因子 0.2 来降低学习率。
options = trainingOptions(‘adam‘ ...
    ‘MaxEpochs‘250 ...
    ‘GradientThreshold‘1 ...
    ‘InitialLearnRate‘0.005 ...
    ‘LearnRateSchedule‘‘piecewise‘ ...
    ‘LearnRateDropPeriod‘125 ...
    ‘LearnRateDropFactor‘0.2 ...
    ‘Verbose‘0 ...
    ‘Plots‘‘training-progress‘);
%% 训练 LSTM 网络
%使用 trainNetwork 以指定的训练选项训练 LSTM 网络。
net = trainNetwork(XTrainYTrainlayersoptions);
%% 预测将来时间步
%要预测将来多个时间步的值,请使用 predictAndUpdateState 函数一次预测一个时间步,并在每次预测时更新网络状态。对于每次预测,使用前一次预测作为函数的输入。
%使用与训练数据相同的参数来标准化测试数据。
dataTestStandardized = (dataTest - mu) / sig;
XTest = dataTestStandardized(1:end-1);
%要初始化网络状态,请先对训练数据 XTrain 进行预测。
%接下来,使用训练响应的最后一个时间步 YTrain(end) 进行第一次预测。
%循环其余预测并将前一次预测输入到 predictAndUpdateState。
%对于大型数据集合、长序列或大型网络,在 GPU 上进行预测计算通常比在 CPU 

评论

共有 条评论