第一次发表文章,如有侵权请通知我,谢谢!
newelm函数的使用格式为:
net = newelm(P,T, [S1…SN] , {TF1…TFN},BTF,BLF,PF,IPF,OPF)
输入参数如下:
P , RQ1矩阵,包含Q1个长度为R的典型输入向量。
T , SNQ2矩阵,包含Q2个长度为SN的典型目标向量,SN决定了输出向量的长度。
Si,N-1个隐含层包含的神经元个数,默认值为[]。
TFi,第i层传递函数,用字符串表示。对于输出层,默认值为‘purelin’,对于隐含层,默认值为‘tansig’。
BTF,反向传播网络的训练函数,默认值为‘traingdx’,可取值还有‘traingd’、‘traingdm’、‘traingda’。
BLF,反向传播权值/阙值学习函数,默认值为‘learndm’,可取值还有‘’learngd’等函数。
PF,性能函数,默认值为‘mse’,可取值还有‘msereg’。
IPR, 输入处理函数,默认值为‘{‘fixunknowns’,‘removeconstantrows’,‘mapminmax’}’。
OPF,输处处理函数,默认值为‘{‘removeconstantrows’,‘mapminmax’}’。
elmannet函数的使用格式如下:
elmannet(layerdelays,hiddenSizes,trainFcn)
layerdelays,表示网络层延迟的行向量,可取值为0或者正数,默认值为1:2;
hiddenSizes,隐含层大小,是一个行向量,默认值为10;
trainFcn,表示训练函数的字符串,默认值为‘trainlm’。
程序代码:
Elman1.m
load data;
a=data;
%% 选取训练数据和测试数据
for i=1:6
p(i,:)=[a(i,:),a(i+1,:),a(i+2,:)];
end
% 训练数据输入
i_train=p(1:5,:);
% 训练数据输出
o_train=a(4:8,:);
% 测试数据输入
i_test=p(6,:);
% 测试数据输出
o_test=a(9,:);
% 为适应网络结构 做转置
i_train=i_train';
o_train=o_train';
i_test=i_test';
%% 网络的建立和训练
% 利用循环,设置不同的隐藏层神经元个数
nn=[8 11 14 17];
for i=1:4
threshold=[0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1];
% 用两种不同的函数建立Elman神经网络 隐藏层为nn(i)个神经元
net=newelm(threshold,[nn(i),3],{'tansig','purelin'});
%net = elmannet(1:2,nn(i),'trainlm');
% 设置网络训练参数
net.trainparam.epochs=1000;
net.trainparam.show=20;
% 初始化网络
net=init(net);
% Elman网络训练
net=train(net,i_train,o_train);
% 预测数据
y=sim(net,i_test);
% 计算误差
error(i,:)=y'-t_test;
end