摘要
在Matlab
R2010a版中,如果要创建一个具有两个隐含层、且神经元数分别为5、3的前向BP网络,使用旧的语法可以这样写:
net1
= newff(minmax(P),
[5
3 1]);
注意minmax()函数的使用,还有对输出层神经元数(1)的指定。
当然也可以采用新的语法,更简洁(请留意差异):
net2
= newff(P, T,
[5
3]);
不用求minmax,也不用人工指定输出层神元数了(newff会根据参数T自行推导)。
不过,为了得到与书本示例接近的结果,接下来需要清除net2.divideFcn等属性再训练,否则结果相去甚远,且远不止一个数量级。
net2.divideFcn = '';
net2.inputs{1}.processFcns = {}; % 1是输入层所在网络层编号
net2.outputs{3}.processFcns = {};
% 3 是输出层所在网络层编号
正文
最近在看朱凯的《精通Matlab神经网络》,到第10章例10-3时,发现newff()的新旧用法得到的结果相去甚远。
书中例10-3采用了旧式写法,代码如下:
%
例10-3,旧式写法
clear all
P = [-1 -1 2 2;
0 5 0 5];
T = [-1 -1 2
2];