摘要

在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];

%%

旧式语法

net1 =

newff(minmax(P),[5 1],{'tansig', 'purelin'}, 'traingd'); %

隐含层有5个神经元

net1.trainParam.goal = 1e-5;

net1.trainParam.epochs = 300;

net1.trainParam.lr = 0.05;

net1.trainParam.showWindow =

1;

net1=

train(net1,P,T);

Y1 =

sim(net1,P);

disp(['旧式语法 mse: 'num2str(mse(T-Y1))]);

训练窗口最终如下:

程序输出如下:

Warning: NEWFF used in an obsolete

way.

> In nntobsu at 18

In newff at 86

See help for NEWFF to update calls to

the new argument list.

旧式语法 mse: 9.8073e-006

很明显,达到了设定的1e-5的目标。

不过我们也收到了警告,建议我们采用新的参数列表。于是查帮助,改成新的写法,代码如下:

%

例10-3,新式写法

clear all

P = [-1 -1 2 2;

0 5 0 5];

T = [-1 -1 2

2];

%%

新式语法

net2 =

newff(P,T,5,{'tansig', 'purelin'}, 'traingd'); %

隐含层有5个神经元

net2.trainParam.goal = 1e-5;

net2.trainParam.epochs = 300;

net2.trainParam.lr = 0.05;

net2.trainParam.showWindow =

1;

net2 =

train(net2,P,T);

Y2 =

sim(net2,P);

disp(['新式语法 mse: 'num2str(mse(T-Y2))]);

训练窗口:

程序输出:

新式语法 mse: 10.7499

可见,远远没有达到1e-5的目标。

这是为什么呢?QQ群咨询无果,无奈之下自行研究源码。

newff.m分成三大块:主程序、新版实现子函数 new_5p1()、旧版实现子函数 new_5p0()。通过仔细比较新旧这两个子函数,发现新版设置了

net.divideFcn 属性,其值为'dividerand'。该函数把样本数据三分为训练集、验证集和测试集,默认比例是6:2:2。于是在我的程序中清除该属性再训练:

%

例10-3,新写法,改进

clear all

P = [-1 -1 2 2;

0 5 0 5];

T = [-1 -1 2

2];

%%

新式语法

net2 =

newff(P,T,5,{'tansig', 'purelin'}, 'traingd'); %

隐含层有5个神经元

net2.trainParam.goal = 1e-5;

net2.trainParam.epochs = 300;

net2.trainParam.lr = 0.05;

net2.trainParam.showWindow =

1;

net2.divideFcn

= ''; %

为和书本一致,对于样本极少的情况,不要再三分了

net2 =

train(net2,P,T);

Y2 =

sim(net2,P);

disp(['新式语法,改进 mse: 'num2str(mse(T-Y2))]);

训练窗口:

程序输出:

新式语法,改进 mse: 9.8129e-006

也达到了预期目标。

其实,新旧两次的训练窗口和Performance窗口也可以发现端倪的,此处不再细说,请各位看官自行对比。

当然,至于新版为什么要引入divideFcn必有其道理,我是初学者,有所揣测暂不表,先跟着书走。

matlab newff函数弃用了,[转载]MATLAB神经网络函数NEWFF()新旧用法差异相关推荐

  1. matlab newff函数弃用了,MATLAB神经网络函数NEWFF()新旧用法差异

    摘要 在Matlab R2010a版中,如果要创建一个具有两个隐含层.且神经元数分别为5.3的前向BP网络,使用旧的语法可以这样写: net1 = newff(minmax(P), [5 3 1]); ...

  2. Matlab神经网络函数newff()新旧用法差异

    声明!!!转载自: http://www.cnblogs.com/xxfcz/p/4482813.html 摘要 在Matlab R2010a版中,如果要创建一个具有两个隐含层.且神经元数分别为5.3 ...

  3. matlab的newff函数是用来,[转载]matlab神经网络newff函数的使用

    设[P,T]是训练样本,[X,Y]是测试样本: net=newrb(P,T,err_goal,spread); %建立网络 q=sim(net,p); e=q-T; plot(p,q); %画训练误差 ...

  4. matlab的函数要写在哪,matlab函数库在哪

    ---WORD 格式--可编辑--专业资料--- 在 MATLAB 环境下访问外部函数的共享库文件,必须首先把该库文件加载到内存中.一旦加载 成功,就能直接在 MATLAB 中直接请求...... 1 ...

  5. newff新旧用法/minmax函数的用法

    1,newff函数参数说明 net = newff(P,T,S) % 这两种定义都可以 net = newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF) P:输入参数矩阵.(R ...

  6. matlab newff函数弃用了,matlab的newff函数

    <现代电子技术> 2009 年第 18 期总第 305 期 计算机应用技术 基于 Matlab 实现函数逼近曾德惠 ( 湖北民族学院 理学院 湖北 恩施 445000) 摘 : 为满足工程 ...

  7. matlab newff函数弃用了,Matlab关于newff的问题

    Matlab的NNbox提供了建立神经网络的专用函数newff().用newff函数来确定网络层数,每层中的神经元数和传递函数,其语法为: net=newff(PR,[S1,S2,- ,SN],{TF ...

  8. matlab pdepe函数边界,科学网-使用MATLAB中pdepe函数求解一维偏微分方程-邓浩鑫的博文...

    由于自己科研水平较低,记录的各种体会更多的是给自己做个小结,错误之处,欢迎大家指正. 使用MATLAB求解偏微分方程或者方程组,大致有三类方法.第一种是使用MATLAB中的PDE Toolbox,PD ...

  9. matlab一般函数的绘制方法,基于MATLAB的函数图像绘制方法

    C DOI:10.16707~.cnki.fjpc.2017.01.084 E 晒 亍嚣 基于 MATLAB的函数图像绘制方法 张笑笑 一,童 键 z (1湖南省长沙市第一中学 湖南 长沙 410() ...

最新文章

  1. 数据结构与算法笔记(十四)—— 二叉树
  2. 每日程序C语言25-查找100以内的素数
  3. python程序—名片管理系统
  4. 看似简单的dual,其实深藏玄机
  5. 中国最有名的8个程序员:不只雷军、张小龙,其中3人都当过首富!
  6. SpringMVC3 AnnotationMethodHandlerAdapter与mvc:annotation-driven冲突的解决方案
  7. 选择a哪个href以某个字符串结尾
  8. android项目模块导入eclipse编译报错,android环信demo导入eclipse编译出错
  9. OA报账规范(出差专用)
  10. 基于R语言的贝叶斯网络模型的实践技术
  11. 关于FTP的两种连接模式
  12. 三角色:程序员、技术主管与架构师
  13. 笔记本电脑清灰打硅脂后,开机一直黑屏,如何破?
  14. ABAP 透明表操作备忘 刘欣
  15. main flag redefined: graceful
  16. 世界那么大,如何去看看?进入新世界的框架和脉络
  17. linux下ppt转图片的方法
  18. 矩阵并行加速之NENO与SSE
  19. Redis学习笔记·
  20. sql语句多表查询实例

热门文章

  1. jquery实现王者荣耀手风琴(折叠卡片)效果
  2. 解一元二次方程 matlab,如何用Matlab求一元二次方程式解的个数以及解
  3. 127个常用的JS代码片段,每段代码花30秒就能看懂(六)
  4. 对象的深度复制和浅复制 (深度拷贝和浅拷贝)
  5. Bibtex中作者太多怎么办
  6. 抽送蓝牙耳机等大奖,送书50本 | 华为开发者学堂2021年终盘点
  7. 【前端】【HTML】基础知识
  8. python 两个dataFrame取不同部分
  9. CEBR-160L-T17A、CEBR-320L-T19A螺纹插式比例减压阀放大器
  10. 报错:SLF4J: Failed to load class org.slf4j.impl.StaticLoggerBinder“. SLF4J: Defaulting to no-operation