clc
clear
close all
%% 加载数据
load maydata.mat
rand('seed',0)
[m nn]=sort(rand(1,1054));
m=900;
train_data1 = num(nn(1:900),1:1:8)';%训练数据的输入数据
test_data1 = num(nn(1:900),9)';%训练数据的输出数据
[train_data,inputps]=mapminmax(train_data1,0,1);%训练数据的输入数据的归一化
trainout = zeros(9,900);
for ii = 1:900
trainout(test_data1(ii),ii)=1;
end
% [trainout,outputps]=mapminmax(test_data1,0,1);%训练数据的输出数据的归一化
data_length=size(train_data,1);
data_num=size(train_data,2);
%% 网络参数初始化
% 结点数设置
input_num=8;
cell_num=20;
output_num=9;
% 网络中门的偏置
bias_input_gate=rand(1,cell_num);
bias_forget_gate=rand(1,cell_num);
bias_output_gate=rand(1,cell_num);
% ab=1.2;
% bias_input_gate=ones(1,cell_num)/ab;
% bias_forget_gate=ones(1,cell_num)/ab;
% bias_output_gate=ones(1,cell_num)/ab;
%网络权重初始化
ab=15;
weight_input_x=rand(input_num,cell_num)/ab;
weight_input_h=rand(output_num,cell_num)/ab;
weight_inputgate_x=rand(input_num,cell_num)/ab;
weight_inputgate_c=rand(cell_num,cell_num)/ab;
weight_forgetgate_x=rand(input_num,cell_num)/ab;
weight_forgetgate_c=rand(cell_num,cell_num)/ab;
weight_outputgate_x=rand(input_num,cell_num)/ab;
weight_outputgate_c=rand(cell_num,cell_num)/ab;
%hidden_output权重
weight_preh_h=rand(cell_num,output_num);
%网络状态初始化
cost_gate=1e5;
h_state=rand(output_num,data_num);
cell_state=rand(cell_num,data_num);
%% 网络训练学习
for iter=1:5
iter
yita=0.1; %每次迭代权重调整比例
for m=1:data_num
%前馈部分
if(m==1)
gate=tanh(train_data(:,m)'*weight_input_x);
input_gate_input=train_data(:,m)'*weight_inputgate_x+bias_input_gate;
output_gate_input=train_data(:,m)'*weight_outputgate_x+bias_output_gate;
for n=1:cell_num
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,cell_num);
forget_gate_input=zeros(1,cell_num);
cell_state(:,m)=(input_gate.*gate)';
else
gate=tanh(train_data(:,m)'*weight_input_x+h_state(:,m-1)'*weight_input_h);
input_gate_input=train_data(:,m)'*weight_inputgate_x+cell_state(:,m-1)'*weight_inputgate_c+bias_input_gate;
forget_gate_input=train_data(:,m)'*weight_forgetgate_x+cell_state(:,m-1)'*weight_forgetgate_c+bias_forget_gate;
output_gate_input=train_data(:,m)'*weight_outputgate_x+cell_state(:,m-1)'*weight_outputgate_c+bias_output_gate;
for n=1:cell_num
input_gate(1,n)=1/(1+exp(-input_gate_input(1,n)));
forget_gate(1,n)=1/(1+exp(-forget_gate_input(1,n)));
output_gate(1,n)=1/(1+exp(-output_gate_input(1,n)));
end
cell_state(:,m)=(input_gate.*gate+cell_state(:,m-1)'.*forget_gate)';
end
pre_h_state=tanh(cell_state(:,m)').*output_gate;
h_state(:,m)=(pre_h_state*weight_preh_h)';
%误差计算
Error=h_state(:,m)-trainout(:,m);
Error_Cost(1,iter)=sum(Error.^2);
% if(Error_Cost(1,iter)<cost_gate)
if iter==50
flag=1;
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 ]=fun_weight1(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 = sort(Error_Cost,'descend');
plot(Error_Cost,'k-*');
title('误差曲线图');
%% 使用后121个检验
%数据加载
test_final11=num(nn(901:1054),1:8)';%测试数据的输入数据
test_final1=mapminmax('apply',test_final11,inputps);
test_output=num(nn(901:1054),9)'; %测试数据的输出数据
%前馈
m=2:155;
lstmout= [];
for ii = 1:154
test_final = test_final1(:,ii);
gate=tanh(test_final'*weight_input_x+h_state(:,m(ii)-1)'*weight_input_h);
input_gate_input=test_final'*weight_inputgate_x+cell_state(:,m(ii)-1)'*weight_inputgate_c+bias_input_gate;
forget_gate_input=test_final'*weight_forgetgate_x+cell_state(:,m(ii)-1)'*weight_forgetgate_c+bias_forget_gate;
output_gate_input=test_final'*weight_outputgate_x+cell_state(:,m(ii)-1)'*weight_outputgate_c+bias_output_gate;
for n=1:cell_num
input_gate(1,n)=1/(1+exp(-input_gate_input(1,n)));
forget_gate(1,n)=1/(1+exp(-forget_gate_input(1,n)));
output_gate(1,n)=1/(1+exp(-output_gate_input(1,n)));
end
cell_state_test=(input_gate.*gate+cell_state(:,m(ii)-1)'.*forget_gate)';
pre_h_state=tanh(cell_state_test').*output_gate;
h_state_test=(pre_h_state*weight_preh_h)';
lstmout = [lstmout h_state_test];
end
% test_output
% lstmout
% test_output1 = (mapminmax('reverse',test_output,outputps));
% lstmout1= round(mapminmax('reverse',lstmout,outputps));
[mx,lstmout1] = max(lstmout);
figure (2)
plot(lstmout1,'r*')
hold on
plot(test_output,'bo')
xlabel('样本数/个')
ylabel('标签类别')
title('长短区期记忆神经网络')
legend('预测输出','期望输出')
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
LSTM.rar (13个子文件)
main1.m 6KB
fun_weight.m 4KB
23
main3.m 6KB
maydata3.mat 2KB
fun_weight.m 4KB
maydatan.mat 192B
maydata2.mat 2KB
maydatalstm3.mat 182B
maydatalstm2.mat 228B
main2.m 6KB
main.m 6KB
maydata.mat 179KB
fun_weight1.m 4KB
共 13 条
- 1
资源评论
神经网络机器学习智能算法画图绘图
- 粉丝: 2375
- 资源: 569
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功