基于matlab的LSTM模型

1 介绍

使用matlab处理时序预测问题,导入的是一个一维向量,前5个作为输入,第6个作为输出,这样就是1-5输入,6输出,2-6输入,7输出。使用matlab进行处理,先进行数据形状改变,归一化等,然后搭建lstm模型,再进行预测,在使用的过程中,由于数据数量级差别过大,所以使用log对数据进行处理

2 导入数据,数据处理

%%  导入数据(时间序列的单列数据)
result = xlsread('data1.xlsx');
result = log(result);

%%  数据分析
num_samples = length(result);  % 样本个数 
kim = 5;                      % 延时步长(kim个历史数据作为自变量)
zim = 1;                      % 跨zim个时间点进行预测

%%  划分数据集
for i = 1: num_samples - kim - zim + 1
    res(i, :) = [reshape(result(i: i + kim - 1), 1, kim), result(i + kim + zim - 1)];
end

%%  划分训练集和测试集
temp = 1: 1: 20475;

P_train = res(temp(1: 16379), 1: kim)';
T_train = res(temp(1: 16379), kim+1)';
M = size(P_train, 2);

P_test = res(temp(16380: end), 1: kim)';

T_test = res(temp(16380: end), kim+1)';
N = size(P_test, 2);

3 搭建模型和训练

%%  创建模型
layers = [
    sequenceInputLayer(5)              % 建立输入层
    
    lstmLayer(10, 'OutputMode', 'last') % LSTM层
    reluLayer                           % Relu激活层
    
    fullyConnectedLayer(1)              % 全连接层
    regressionLayer];                   % 回归层
 
%%  参数设置
options = trainingOptions('adam', ...       % Adam 梯度下降算法
    'MaxEpochs', 100, ...                  % 最大训练次数
    'InitialLearnRate', 5e-5, ...           % 初始学习率
    'LearnRateSchedule', 'piecewise', ...   % 学习率下降
    'LearnRateDropFactor', 0.1, ...         % 学习率下降因子
    'LearnRateDropPeriod', 800, ...         % 经过800次训练后 学习率为 0.005 * 0.1
    'Shuffle', 'every-epoch', ...           % 每次训练打乱数据集
    'Plots', 'training-progress', ...       % 画出曲线
    'Verbose', false);

%%  训练模型
net = trainNetwork(p_train, t_train, layers, options); % 训练集输入、训练集输出、模型结构、超参数

4 最后的结果展示

基于matlab的LSTM模型_第1张图片
如果有需要,可以联系:https://docs.qq.com/doc/DWEtRempVZ1NSZHdQ。

你可能感兴趣的:(matlab,lstm,开发语言)