声明!!!转载自: http://www.cnblogs.com/xxfcz/p/4482813.html

摘要

  在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()新旧用法差异相关推荐

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

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

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

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

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

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

  4. MATLAB中newff新旧区别

    今天为了创建一个BP网络,于是使用newff函数,因为目前现在的matlab支持新的newff函数,如果继续使用旧的newff函数会导致warning,而且新的newff函数有很多方便之处. 首先,函 ...

  5. Matlab传统神经网络函数:Newff的使用方法记录

    newff,已经过时,新函数feedforwardnet似乎可以分割training set和testing set,实验中不想要这个功能,所以暂时还是使用习惯的newff,等有时间再熟悉新函数. n ...

  6. matlab神经网络函数

    1.设计函数 solvein    设计线性网络:                solverb   设计径向基网络:                      solverbe    设计精确的径向 ...

  7. matlab神经网络函数(feedforwardnet,fitnet,patternet)

    feedforwardnet (): 综述:包含一系列的层次.第一层与网络输入连接.接下来的层次与上一次连接.最后一层产生网络的输出.feedforward网络可以用作输入和输出的映射,只含有一个隐含 ...

  8. matlab feedforward,matlab神经网络函数feedforwardnet构造的网络数学模型是啥

    clc;clear all;close %% 线性系统x(k+1)=A*x(k)+B*u(k)参数(A,B) A=[1 1;-1 1]; B=[0.1; 1]; %% 神经网络训练参数 N=1000; ...

  9. MATLAB中内置的BP神经网络函数 help newff翻译【学习笔记】

    MATLAB中内置的BP神经网络函数 help翻译 原文请参考:help newff newff 创建前馈反向传播网络. 在 R2010b NNET 7.0 中已过时. 最后在 R2010a NNET ...

最新文章

  1. 手机连接服务器数据库文件,手机连接服务器数据库文件夹
  2. python 选择结构教学设计_初中信息技术_信息技术初一下册《Python选择结构if-else》教学设计学情分析教材分析课后反思...
  3. P3812 【模板】线性基
  4. 自定义应用Crash时系统显示的对话框
  5. Ext.ClassManager源码
  6. Nginx(一)-- 初体验
  7. AS5047P磁编码器ESP32驱动程序、硬件电路设计、SPI通信时序、逻辑波形分析、注意事项
  8. toad for mysql调试存储过程_【oracle】oracle 调试 存储过程
  9. k8s升级,HA集群1.12.0~HA集群1.13.2
  10. 标签传播算法(半监督图算法)
  11. ESP32-C3入门教程 IoT篇⑤——阿里云 物联网平台 EspAliYun RGB LED 实战之设备生产流程
  12. jquery foreach循环
  13. JZOJ 7.10B组第一题 可见点数
  14. python中fp是什么意思_详解python实现FP-TREE进行关联规则挖掘(带有FP树显示功能)附源代码下载(3)...
  15. 『软件测试4』耗子尾汁!2021年了,你还不知道这4种白盒测试方法吗?
  16. uni-app的生命周期说明及平台差异性说明
  17. Linux平台下动态链接库.so转换成windiws平台下.dll文件并使用python调用
  18. 知网论文免费下载,请速度存好!
  19. 区块链跨链是如何进行验证的?
  20. 第2节 网络及IP地址详解

热门文章

  1. 解码百度核心:移动的无色墙,AI的无形剑
  2. 常见密码哈希离线查询工具
  3. IP融合网络引领通信变革
  4. 工作篇 之 简单聊下有关环信的 “坑” ...
  5. python爬虫入门案例day10:珠宝图片
  6. 国家标准,行业标准文件
  7. 最美情侣怎么用计算机,最美情侣参赛宣言
  8. 【Maven相关知识 一】Maven基本概念和基本功能
  9. 量化投资 无套利 No-arbitrage
  10. Nexus6P使用小技巧