其它神经网络

【应用】如何使用matlab训练一个Elman神经网络

作者 : 老饼 发表日期 : 2023-08-18 21:10:17 更新日期 : 2023-08-22 00:23:15
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com



Elman神经网络是 J. L. Elman于1990年提出的一种用于时序的神经网络

本文讲解如何使用matlab训练一个Elman神经网络



  01. matlab训练Elman神经网络Demo代码   



本节展示如何使用matlab训练Elman神经网络



   Elman神经网络Demo代码   


在matlab中训练Elman神经网络,只需使用newelm函数即可,具体代码如下:
% 本代码展示如何用matlab训练一个Elman神经网络
% 代码主旨用于教学,供大家学习理解如何用matlab训练一个Elman神经网络
% 转载请说明来自 《老饼讲解神经网络》 www.bbbdata.com

% 生成输入输出数据
X = -5:0.3:5;                                         % 用于训练网络的输入数据
y = sin(X);                                           % 用于训练网络的输出数据
rand('seed',408);                                     % 指定随机种子,这样每次训练出来的网络都一样。
													 
net  = newelm(X,y,6,{'tansig','purelin'});            % 新建一个elman网络
net.trainparam.goal     = 0.00001;                    % 设置训练目标
net.trainparam.epochs   = 2000;                       % 设置最大训练次数.

% ----------网络训练---------------
% 在训练时一定要将数据转为序列数据,
% 如果是矩阵格式,工具箱会认为每个数据是独立的
Xseq = con2seq(X);                                    % 将输入转成序列格式
Yseq = con2seq(y);                                    % 将输出转成序列格式
[net,tr] = train(net,Xseq,Yseq);                      % 将输入输出数据进行训练

% ----------网络预测---------------
% 注意,在预测时也必须传入序列数据,
% 如果传入矩阵格式,工具箱会认为只是一个时刻的数据,而不是多个时刻的数据,
% 也就是说,网络会对每个数据进行独立预测,它不会把上个数据的隐节点作为延迟输入传给下个数据
py = sim(net,Xseq);                                   % 用训练好的网络进行预测,
py  = cell2mat(py)                                    % 将预测结果转为矩阵格式

plot(X,y,X,py,'*')
legend('原始数据','预测结果')

matlab2018a





   运行结果   


运行以上代码,结果如下:
 
可以看到,Elman神经网络已经很好地预测了sin曲线





    老饼的提示   


Elman神经网络的训练基本与BP一致,包括参数的设置等等,
但由于Elman神经网络用于预测序列数据,所有有些方面需要注意,下面列举一二
1.训练与预测时需要传入序列数据
如代码中的注释所说,训练、预测时需要将数据通过con2seq函数转为序列数据
如果不转为序列数据,而采用矩阵格式,也不会报错,
但工具箱会认为工具箱会认为只是一个时刻的数据,而不是多个时刻的数据,
% 也就是说,网络会对每个数据进行独立预测,它不会把上个数据的隐节点作为延迟输入传给下个数据
这样就相当于忽略了Elman最重要和最具特色的“延迟输入”了

2.预测结果是相对于序列而言,而非独立样本
需要注意Elman是应用于序列数据,
也就是它是对整个序列进行预测,而不是对某个数据进行独立预测
预测序列和预测序列
虽然,但网络给出的结果将是不一样的










 End 




联系老饼