load dataset
stop = 0; %控制预测的序列索引(0-倒数第1 1-倒数第2 2-倒数第3,..以此类推)
series = dataset(1:end-stop,1); %导入时间序列数据
timespan = 5; %时间跨度(即历史数据条数)
%构造输入输出向量
numdata = size(series,1);
numsample = numdata - timespan - 1;
for i = 1:numsample
train(:,i) = series(i:i+timespan,:);
end
test = series(numdata-timespan:numdata,:)';
%网络节点数
len = size(train,1)-1;
num = size(train,2);
inputnum = len;
hiddennum = 10;
outputnum = 1;
%网络中门偏置
bias_input_gate = rand(1,hiddennum);
bias_forget_gate = rand(1,hiddennum);
bias_output_gate = rand(1,hiddennum);
%权重初始化
ab = 20;
W_input_x = rand(inputnum,hiddennum)/ab;
W_input_h = rand(outputnum,hiddennum)/ab;
W_inputgate_x = rand(inputnum,hiddennum)/ab;
W_inputgate_c = rand(hiddennum,hiddennum)/ab;
W_forgetgate_x = rand(inputnum,hiddennum)/ab;
W_forgetgate_c = rand(hiddennum,hiddennum)/ab;
W_outputgate_x = rand(inputnum,hiddennum)/ab;
W_outputgate_c = rand(hiddennum,hiddennum)/ab;
W_preh_h = rand(hiddennum,outputnum);
%网络状态初始化
cost_gate = 1e-6;
h_state = rand(outputnum,num);
cell_state = rand(hiddennum,num);
lr = 0.01;
maxgen = 2000;
for i = 1:maxgen
for j = 1:num
if j ==1
gate = tanh(train(1:inputnum,j)'*W_input_x);
input_gate_input = train(1:inputnum,j)'*W_inputgate_x+bias_input_gate;
output_gate_input = train(1:inputnum,j)'*W_outputgate_x+bias_output_gate;
for n = 1:hiddennum
input_gate(1,n) = 1/(1+exp(-input_gate_input(1,n)));
output_gate(1,n) = 1/(1+exp(-output_gate_input(1,n)));
end
forget_gate=zeros(1