BP神经网络的迭代次数设置为20,误差阈值设置为0.7,学习率设置为0.001是否合理
在上文的网络创建部分中,已经计算出了各层的权值、阈值个数,接下来只需要进行赋值即可
% 设置网络初始权值、阈值
weight1_num = input_num*hidden_num; % 输入层到隐含层的权值数
weight2_num = hidden_num*output_num; % 隐含层到输出层的权值数
weight1 = X([1:weight1_num]); % 输入层到隐含层的权值
threshold_1 = X([weight1_num+1:weight1_num+hidden_num]); % 隐含层阈值
weight2 = X([weight1_num+hidden_num+1:weight1_num+hidden_num+weight2_num]); % 隐含层到输出层的权值
threshold_2 = X([weight1_num+hidden_num+weight2_num+1:end]); % 输出层阈值
% 赋值
net.iw{1,1} = reshape(weight1,hidden_num,input_num); % 输入层到隐含层的权值
net.lw{2,1} = reshape(weight2,output_num,hidden_num); % 隐含层到输出层的权值
net.b{1} = reshape(threshold_1,hidden_num,1); % 隐含层阈值
net.b{2} = reshape(threshold_2,output_num,1); % 输出层阈值
关于net.iw、net.lw和net.b的解释:
% net.iw为输入层到网络层(隐含层+输出层)的权值
% 通过访问net.iw{i,j}可以获得第i个网络层来自第j个输入向量的权值向量
% 本案例中,net.iw{1,1}即表示第1个网络层(即隐含层)来自第1个输入向量的权值向量
% net.lw为一个网络层到另一个网络层的权值
% 通过访问net.lw{i,j}可以获得第i个网络层来自第j个网络层的权值向量
% 本案例中,net.lw{2,1}即表示第2个网络层(即输出层)来自第1个网络层(即隐含层)的权值向量
% net.b为各网络层的阈值
% net.b{i}为第i个网络层的阈值向量
关于神经网络中其他参数的解释可以参考书籍《神经网络模型及其MATLAB仿真程序设计》
能跑起来其实就行吧。
如果没底的话,具体参数看看相似方向研究的别人文献,然后需要自己调试一下可能就还好
迭代20次……感觉有点少,matlab的bp神经网络工具箱默认最多迭代1000次呢
不过一般bp神经网络不以达到最大迭代次数作为停止条件,而更多的以误差MSE足够小/训练集和测试集有一方疑似出现过拟合/曲线收敛这样的指标作为停止的信号,会更科学一些。