matlab newff函数弃用了,MATLAB神经网络函数NEWFF()新旧用法差异
摘要
在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()新旧用法差异相关推荐
- matlab newff函数弃用了,[转载]MATLAB神经网络函数NEWFF()新旧用法差异
摘要 在Matlab R2010a版中,如果要创建一个具有两个隐含层.且神经元数分别为5.3的前向BP网络,使用旧的语法可以这样写: net1 = newff(minmax(P), [5 3 1]); ...
- matlab newff函数弃用了,matlab的newff函数
<现代电子技术> 2009 年第 18 期总第 305 期 计算机应用技术 基于 Matlab 实现函数逼近曾德惠 ( 湖北民族学院 理学院 湖北 恩施 445000) 摘 : 为满足工程 ...
- Matlab神经网络函数newff()新旧用法差异
声明!!!转载自: http://www.cnblogs.com/xxfcz/p/4482813.html 摘要 在Matlab R2010a版中,如果要创建一个具有两个隐含层.且神经元数分别为5.3 ...
- matlab newff函数弃用了,Matlab关于newff的问题
Matlab的NNbox提供了建立神经网络的专用函数newff().用newff函数来确定网络层数,每层中的神经元数和传递函数,其语法为: net=newff(PR,[S1,S2,- ,SN],{TF ...
- matlab newff函数弃用了,matlab里面的newff函数怎么回事
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 function net = newff(varargin) %NEWFF Create a feed-forward backpropagation n ...
- newff新旧用法/minmax函数的用法
1,newff函数参数说明 net = newff(P,T,S) % 这两种定义都可以 net = newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF) P:输入参数矩阵.(R ...
- Matlab传统神经网络函数:Newff的使用方法记录
newff,已经过时,新函数feedforwardnet似乎可以分割training set和testing set,实验中不想要这个功能,所以暂时还是使用习惯的newff,等有时间再熟悉新函数. n ...
- matlab自定义函数如何报错,MATLAB自定义函数
MATLAB自定义函数形式 function [a,b,c] = funname(x1,x2,x3) 输入变量 对于输入变量,MATLAB可以识别输入变量的个数,通过nargin来记录当前输入变量个数 ...
- matlab运行函数的过程,关于matlab的一些作业一、要求写出窗口运行过程及结果1.利用Matlab求函数f(x)=-x2+ex+lnx的导数、...
共回答了20个问题采纳率:90% 代码 function main() % 一.要求写出窗口运行过程及结果 % % 1.利用Matlab求函数f(x)=-x2+ex+lnx的导数.不定积分和1到10区 ...
最新文章
- BlockChain:《区块链世界简明生存指南(一块听听)》2017-06-06 李笑来—听课笔记分享(2)
- [导入]浅析.Net下的AppDomain编程
- 一招解决IDEA启动慢的困扰
- 为什么说时代在召唤华为!
- mysql在缺省状态下_MYSQL面试题
- apple-system BlinkMacSystemFont Mac兼容字体库
- 婴儿级教学,手伤害教你用鸿蒙OS获取B站粉丝数!!
- WordPress主题制作全过程(八):制作index.php
- java日期计算天数_Java 两个日期间的天数计算
- SSM框架的Web项目实现微信登陆
- 小故事大道理:一把小椅子
- YALMIP建模+CPLEX求解,让优化问题更简单
- 大数据技术方面需要哪些支持
- 如何主动退出小程序(微信小程序)
- ADS129X芯片中文资料(二)——模拟功能部分介绍
- 产业分析:智能巡检机器人行业
- 为什么很多聪明的人,却一辈子在社会最底层?
- 如何调教ChatGPT成为你的策略助手
- 创业起步学习笔记【下】
- Linux设备驱动之usb设备驱动详解