本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
往往在matlab中我们需要让BP神经网络每次训练结果一模一样,或在多次随机训练中挑出最好的一次
本文讲解怎么通过设定随机种子令matlab的BP神经网络每次训练结果都一样的方法
通过本文,可以知道如何让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是随机种子,是随便设的一个数,只要随机种子是一样的,跑这片代码训练出来的网络就是一样的
如上面的代码,不管什么时候跑,结果都是一样的
所以,在训练时加入随机种子,然后训练了好的网络,
就把这个种子记下来,下次还用这个种子就可以啦
如何寻找一个好的种子
往往我们需要先随机跑,然后选择一个好的结果
这时,我们只需要先随机设置随机种子,然后将随机种子打印出来
遇到好的结果的时,将随机种子记下来,下次就用这个随机种子就好了
具体代码如下:
% ---------数据生成与参数预设-------------
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就可以了
好了,以上就是如何让BP每次的训练结果一样的方法了~
End