老饼讲解-神经网络 机器学习 神经网络 深度学习
BP神经网络建模
1.BP神经网络-工具箱说明
2.BP神经网络-建模代码
3.BP神经网络-训练技巧
4.BP神经网络-应用案例
5.BP神经网络-问题答疑

【神经网络】让BP神经网络每次训练的结果一样

作者 : 老饼 发表日期 : 2023-03-09 22:13:16 更新日期 : 2024-02-06 10:32:34
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com


往往我们需要让BP神经网络每次训练的结果一模一样

本文讲解怎么通过设定随机种子令matlab的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是随机种子,是随便设的一个数,
只要随机种子是一样的,跑这片代码训练出来的网络就是一样的
如上面的代码,不管什么时候跑,结果都是一样的
  
所以,在训练时加入随机种子,然后训练了好的网络,
就把这个种子记下来,下次还用这个种子就可以啦




     如何寻找一个好的种子     


往往我们需要先随机跑,然后选择一个好的结果
这时,我们只需要先随机设置随机种子,然后将随机种子打印出来
遇到好的结果的时,将随机种子记下来,下次就用这个随机种子就好了
代码如下
% ---------数据生成与参数预设-------------
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(:)))
运行结果如下
  
觉得本次误差可以,就将随机种子16115记下来,
按上面所说的方法,将种子设为16115就可以了









 End 





联系老饼