1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJaXlJ9u
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为它可以记忆不定时间长度的数值,区块中有一个gate能够决定input是否重要到能被记住及能不能被输出output。图1底下是四个S函数单元,最左边函数依情况可能成为区块的input,右边三个会经过gate决定input是否能传入区块,左边第二个为input gate,如果这里产出近似于零,将把这里的值挡住,不会进到下一层。左边第三个是forget gate,当这产生值近似于零,将把区块里记住的值忘掉。第四个也就是最右边的input为output gate,他可以决定在区块记忆中的input是否能输出 。LSTM有很多个版本,其中一个重要的版本是GRU(Gated Recurrent Unit),根据谷歌的测试表明,LSTM中最重要的是Forget gate,其次是Input gate,最次是Output gate。
4.部分源码
......................................................................
numFeatures = wd;
numResponses = 1;
numHiddenUnits = 128;
layers = [ sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits)
dropoutLayer(0.12)
lstmLayer(2*numHiddenUnits)
dropoutLayer(0.12)
fullyConnectedLayer(numResponses)
regressionLayer];
options = trainingOptions('adam', ...
'MaxEpochs',200, ...
'GradientThreshold',1, ...
'InitialLearnRate',0.005, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',125, ...
'LearnRateDropFactor',0.2, ...
'Verbose',0, ...
'Plots','training-progress');
net = trainNetwork(XTrain,YTrain,layers,options);
Xall = wdata_origin(:, 1:end-1)';
Yall = wdata_origin(:, end)';
YPred = predict(net,Xall,'MiniBatchSize',1);
rmse = mean((YPred(:)-Yall(:)).^2)
figure
subplot(211)
plot(data_x(1:length(Yall)), Yall)
hold on
plot(data_x(1:length(Yall)),YPred,'r-o')
legend(["Real" "Predict"])
ylabel("Data")
subplot(212)
stem(data_x(1:length(Yall)), YPred - Yall)
xlabel("Time")
ylabel("Error")
title('LSTM预测误差');
A504