长短期记忆网络LSTM(matlab)

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

  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值