matlab elman,请问如何用matlab工具箱训练的Elman网络参数自己搭建一个网络

%RNN 即Elman网络

%matlab自有版本

clear all;

clc;

global WI WO WR b1 b2;

%% 生成数据

[U,Y]=generateData(1000,1);

train_u=U(:,1:700);

train_y=Y(:,1:700);

test_u=U(:,701:end);

test_y=Y(:,701:end);

%数据归一化

[train_u1, st1] = mapminmax(train_u);

[train_y1, st2] = mapminmax(train_y);

% 测试数据做与训练数据相同的归一化操作

test_u1 = mapminmax('apply',test_u,st1);

test_y1 = mapminmax('apply',test_y,st2);

%% 神经初始化

% 包含15个神经元,训练函数为trainlm,traingdx

net=elmannet(1:1,15,'trainlm');

% 设置显示级别

net.trainParam.show=1;

% 最大迭代次数为2000次

net.trainParam.epochs=2000;

% 误差容限,达到此误差就可以停止训练

net.trainParam.goal=1.0e-6;

% 最多验证失败次数

net.trainParam.max_fail=5;

% 对网络进行初始化

net=init(net);

%% 输入训练样本进行训练

[net,per] = train(net,train_u,train_y);

%% 测试

test_y_1=test_y(:,1);

test_ym = sim(net, test_u);

test_ym_1= sim(net,test_u(:,1));

%% 自建格式测试

WI=net.IW{1,1};

WR=net.LW{1,1};

WO=net.LW{2,1};

b1=net.b{1};

b2=net.b{2};

[test_ym1_1,~]=forecast(test_u(:,1),zeros(15,1));

x=zeros(15,301);

for i=1:300

[test_ym1(i) x(:,i+1)]=forecast(test_u(:,i),x(:,i));

end

function [y xk]=forecast(U,X)

global WI WR WO b1 b2

xk=zeros(15,1);

S=WI*U+WR*X+b1;

xk=tansig(S);

y=purelin(WO*xk+b2);

end

%% 产生训练集

function [P Y]=generateData(dataNum,k)

pi=3.141592653;

switch k

case 1                              %训练输入为函数值

t=linspace(1,dataNum,dataNum);

u=sin(2*t'*pi/25);

y=zeros(dataNum+1,1);

for i=1:dataNum

y(i+1)=u(i)^3+y(i)/(1+y(i)^2);

end

P = [y(1:dataNum),u];  %1*R

Y = y(2:dataNum+1);

case 2                              %训练输入为随机值

u=2*rand(dataNum,1)-1;

y=zeros(dataNum+1,1);

for i=1:dataNum

y(i+1)=u(i)^3+y(i)/(1+y(i)^2);

end

P = [y(1:dataNum),u];  %1*R

Y = y(2:dataNum+1);

case 3

t=linspace(1,dataNum+1,dataNum+1);

u=sin(2*t'*pi/25);

y=zeros(dataNum+2,1);

for i=1:dataNum

y(i+2)=y(i+1)*y(i)*(y(i+1)+4.5)/(1+y(i+1)^2+y(i)^2)+u(i+1);

end

P = [y(2:dataNum+1),u(2:end)];

Y = y(3:end);

end

P = P';

Y = Y';

end

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值