
1 简介针对高炉炼铁是一个动态过程,具有大延迟,工况复杂的特性.采用LSTM-RNN模型进行硅含量预测,充分发挥了其处理时间序列时挖掘前后关联信息的优势.首先根据时间序列趋势及相关系数选择自变量,并采用复杂工况的实际生产数据进行验证.然后用程序自动求解最优参数进行硅含量预测.最后将LSTM-RNN模型与PLS模型及RNN模型的结果进行对比,验证该方法的优势.研究发现LSTM-RNN模型预测误差稳定,预测精度较高,比传统的统计学及神经网络方法取得了更好的预测精度.2 部分代码%%% LSTM网络结合实例仿真 %% 程序说明 % 1、数据为7天四个时间点的空调功耗用前三个推测第四个训练依次类推。第七天作为检验 % 2、LSTM网络输入结点为12输出结点为4个隐藏结点18个 clear all; clc; %% 数据加载并归一化处理 [train_data,test_data]LSTM_data_process(); data_lengthsize(train_data,1); data_numsize(train_data,2); %% 网络参数初始化 % 结点数设置 input_num12; cell_num18; output_num4; % 网络中门的偏置 bias_input_gaterand(1,cell_num); bias_forget_gaterand(1,cell_num); bias_output_gaterand(1,cell_num); % ab1.2; % bias_input_gateones(1,cell_num)/ab; % bias_forget_gateones(1,cell_num)/ab; % bias_output_gateones(1,cell_num)/ab; %网络权重初始化 ab20; weight_input_xrand(input_num,cell_num)/ab; weight_input_hrand(output_num,cell_num)/ab; weight_inputgate_xrand(input_num,cell_num)/ab; weight_inputgate_crand(cell_num,cell_num)/ab; weight_forgetgate_xrand(input_num,cell_num)/ab; weight_forgetgate_crand(cell_num,cell_num)/ab; weight_outputgate_xrand(input_num,cell_num)/ab; weight_outputgate_crand(cell_num,cell_num)/ab; %hidden_output权重 weight_preh_hrand(cell_num,output_num); %网络状态初始化 cost_gate1e-10; h_staterand(output_num,data_num); cell_staterand(cell_num,data_num); %% 网络训练学习 for iter1:4000 yita0.15; %每次迭代权重调整比例 for m1:data_num %前馈部分 if(m1) gatetanh(train_data(:,m)*weight_input_x); input_gate_inputtrain_data(:,m)*weight_inputgate_xbias_input_gate; output_gate_inputtrain_data(:,m)*weight_outputgate_xbias_output_gate; for n1:cell_num input_gate(1,n)1/(1exp(-input_gate_input(1,n))); output_gate(1,n)1/(1exp(-output_gate_input(1,n))); end forget_gatezeros(1,cell_num); forget_gate_inputzeros(1,cell_num); cell_state(:,m)(input_gate.*gate); else gatetanh(train_data(:,m)*weight_input_xh_state(:,m-1)*weight_input_h); input_gate_inputtrain_data(:,m)*weight_inputgate_xcell_state(:,m-1)*weight_inputgate_cbias_input_gate; forget_gate_inputtrain_data(:,m)*weight_forgetgate_xcell_state(:,m-1)*weight_forgetgate_cbias_forget_gate; output_gate_inputtrain_data(:,m)*weight_outputgate_xcell_state(:,m-1)*weight_outputgate_cbias_output_gate; for n1:cell_num input_gate(1,n)1/(1exp(-input_gate_input(1,n))); forget_gate(1,n)1/(1exp(-forget_gate_input(1,n))); output_gate(1,n)1/(1exp(-output_gate_input(1,n))); end cell_state(:,m)(input_gate.*gatecell_state(:,m-1).*forget_gate); end pre_h_statetanh(cell_state(:,m)).*output_gate; h_state(:,m)(pre_h_state*weight_preh_h); %误差计算 Errorh_state(:,m)-test_data(:,m); Error_Cost(1,iter)sum(Error.^2); if(Error_Cost(1,iter)cost_gate) flag1; break; else [ weight_input_x,... weight_input_h,... weight_inputgate_x,... weight_inputgate_c,... weight_forgetgate_x,... weight_forgetgate_c,... weight_outputgate_x,... weight_outputgate_c,... weight_preh_h ]LSTM_updata_weight(m,yita,Error,... weight_input_x,... weight_input_h,... weight_inputgate_x,... weight_inputgate_c,... weight_forgetgate_x,... weight_forgetgate_c,... weight_outputgate_x,... weight_outputgate_c,... weight_preh_h,... cell_state,h_state,... input_gate,forget_gate,... output_gate,gate,... train_data,pre_h_state,... input_gate_input,... output_gate_input,... forget_gate_input); end end if(Error_Cost(1,iter)cost_gate) break; end end %% 绘制Error-Cost曲线图 % for n1:1:iter % text(n,Error_Cost(1,n),*); % axis([0,iter,0,1]); % title(Error-Cost曲线图); % end for n1:1:iter semilogy(n,Error_Cost(1,n),*); hold on; title(Error-Cost曲线图); end %% 使用第七天数据检验 %数据加载 test_final[0.4557 0.4790 0.7019 0.8211 0.4601 0.4811 0.7101 0.8298 0.4612 0.4845 0.7188 0.8312]; test_finaltest_final/sqrt(sum(test_final.^2)); test_outputtest_data(:,4); %前馈 m4; gatetanh(test_final*weight_input_xh_state(:,m-1)*weight_input_h); input_gate_inputtest_final*weight_inputgate_xcell_state(:,m-1)*weight_inputgate_cbias_input_gate; forget_gate_inputtest_final*weight_forgetgate_xcell_state(:,m-1)*weight_forgetgate_cbias_forget_gate; output_gate_inputtest_final*weight_outputgate_xcell_state(:,m-1)*weight_outputgate_cbias_output_gate; for n1:cell_num input_gate(1,n)1/(1exp(-input_gate_input(1,n))); forget_gate(1,n)1/(1exp(-forget_gate_input(1,n))); output_gate(1,n)1/(1exp(-output_gate_input(1,n))); end cell_state_test(input_gate.*gatecell_state(:,m-1).*forget_gate); pre_h_statetanh(cell_state_test).*output_gate; h_state_test(pre_h_state*weight_preh_h) test_output figure plot(h_state_test,bo-) hold on plot(test_output,rs-) xlabel(时间) legend(真实值,预测值) ylabel(值)3 仿真结果4 参考文献[1]吴鹏程, and 罗亮. 基于RNN-LSTM的船舶运动轨迹预测. 造船技术 3(2021):6.博主简介擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真有科研问题可私信交流。部分理论引用网络文献若有侵权联系博主删除。