BP神经网络

【答疑】如何让BP每次的训练结果一样

作者 : 老饼 发表日期 : 2022-11-23 04:17:15 更新日期 : 2024-12-06 02:04:00
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com



往往在matlab中我们需要让BP神经网络每次训练结果一模一样,或在多次随机训练中挑出最好的一次

本文讲解怎么通过设定随机种子令matlab的BP神经网络每次训练结果都一样的方法

通过本文,可以知道如何让BP神经网络每次训练结果一样,以及如何记录下最好的一次结果




    01. 如何让BP每次的训练结果一样    




本节讲解如何使BP神经网络每次的训练结果一模一样





     让BP神经网络每次训练结果一样-解决方法    


BP神经网络会因为随机数的原因,每次训练出来的结果不一样
所以我们往往会多训练几次,使用最好的一次,那么我们怎么确定下次训练出来的还是这个网络?
其实只要在我们训练时,指定随机种子就行啦!
% ---------数据生成与参数预设-------------
X  = [-1:0.2:1;-1:0.2:1];                                           % 输入数据x
y = [sin(X( 1,:)) + X( 2,:);sin(X( 1,:).*X( 1,:)) + 0.5*X( 2,:)];   % 输出数据y
rand('seed',70);                                                    % 设定随机种子
net = newff(X,y,5,{'tansig','purelin'});                            % 网络训练
[net,tr,py_tool] = train(net,X,y);                                  % 训练网络
py = sim(net,[2;5])                                                 % 网络预测
如上面的代码,“rand('seed',70)”这句就是指定随机种子为70,
 70是随机种子,是随便设的一个数,只要随机种子是一样的,跑这片代码训练出来的网络就是一样的
如上面的代码,不管什么时候跑,结果都是一样的
BP神经网络训练代码  
所以,在训练时加入随机种子,然后训练了好的网络,
就把这个种子记下来,下次还用这个种子就可以啦





         如何寻找一个好的种子         


往往我们需要先随机跑,然后选择一个好的结果
这时,我们只需要先随机设置随机种子,然后将随机种子打印出来
遇到好的结果的时,将随机种子记下来,下次就用这个随机种子就好了
 具体代码如下:
% ---------数据生成与参数预设-------------
X  = [-1:0.2:1;-1:0.2:1];                                           % 输入数据x
y = [sin(X( 1,:)) + X( 2,:);sin(X( 1,:).*X( 1,:)) + 0.5*X( 2,:)];   % 输出数据y
seed = fix(rand()*99999);
disp(['本次随机种子:',num2str(seed)])
rand('seed',seed);  
% 设定随机种子
net = newff(X,y,5,{'tansig','purelin'});                            % 网络训练
[net,tr,py_tool] = train(net,X,y);                                  % 训练网络
py = sim(net,X);                                                    % 网络预测
e = sum(sum(abs(py-y)))/(length(y(:)))
运行结果如下
 BP神经网络的随机种子 
觉得本次误差可以,就将随机种子16115记下来,
按上面所说的方法,将种子设为16115就可以了





好了,以上就是如何让BP每次的训练结果一样的方法了~








 End 





联系老饼