老饼讲解-神经网络 机器学习 神经网络 深度学习
Elman神经网络

【测试】predictElman的测试Demo

作者 : 老饼 发表日期 : 2023-08-07 07:05:06 更新日期 : 2023-08-16 10:28:36
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com



本代码用于测试自写Elman神经网络的模型预测代码《predictElman》与matlab工具箱的预测结果是否一致




    代码简要解说    


DEMO代码主要干的事情如下:
 👉1. 先用工具箱进行建一个两隐层的Elman神经网络                           
👉2.用工具箱的Elman神经网络对样本进行预测                                 
👉3.提取出权重阈值,然后用自写的预测函数predictElman进行预测 
👉4.最后比较工具箱的预测结果与predictElman的预测结果是否一致

 


    InitElman的测试DEMO    


% ------------输入输出数据---------------------
rand('seed',888);                                            % 设定随机种子
X = [-1:0.2:1;-1:0.2:1]*10;
Y = sin (X(1,:)*10)+X(2,:);
% 将数据进行归一化(因为matlab工具箱会默认以归一化数据进行初始化和训练)
X = 2*(X-min(X,[],2))./(max(X,[],2)-min(X,[],2))-1;          % 对X进行归一化
Y = 2*(Y-min(Y,[],2))./(max(Y,[],2)-min(Y,[],2))-1;          % 对Y进行归一化
														     
%-------- 调用工具箱初始化elman神经网络 -------------        
net  = newelm(X,Y,[4 2], {'tansig','tansig','purelin'});     % 新建一个elman网络
py_tools = sim(net,con2seq(X));                              % 用elman网络对X进行序列预测
py_tools = cell2mat(py_tools);                               % 将输出转换为矩阵格式
disp('------matlab工具箱的预测值-------')                    % 展示网络的预测结果
py_tools

% ----------提取网络的权重和阈值-------------
layerNum = net.numLayers+1;                                  % 网络的层数
% 提取网络权重W                                              
W    = cell(layerNum,layerNum);                              % 初始化权重矩阵
W{1,2} = net.IW{1,1};                                        % 提取输入层到第一隐层的权重
for i = 2 : layerNum-1                                         
    W{i,i+1} = net.LW{i,i-1};                                % 提取其余层的权重
end    

% 提取网络延迟权重W                                        
for i = 2 : layerNum-1                                       
    W{i,i} = net.LW{i-1,i-1};                                % LW的对角元素就是延迟权重
end 

% 提取网络的阈值                                             
B = cell(1,layerNum);                                        % 初始化各层的阈值
for i = 2 : layerNum                                         
    B{i}=net.b{i-1};                                         % 提取各层的阈值
end
%-----------------预测------------------------
py = predictElman(W,B,{'tansig','tansig','purelin'},X);      % 调用自写函数对网络进行预测
disp('------自写预测函数的预测值-------')                    % 展示自写函数的预测结果
py

matlab2018a



    运行结果   


运行结果如下:
 
从结果可以看到,两者的预测结果是一致的
说明predictElman成功复现了matlab神经网络工具的预测逻辑








 End 






联系老饼