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

news/2024/4/25 9:20:33/文章来源:https://www.cnblogs.com/sy01/p/16846512.html

在Matlab R2010a版中,如果要创建一个具有两个隐含层、且神经元数分别为5、3的前向BP网络,使用旧的语法可以这样写:

        net1 = newff(minmax(P), [5 3 1]);

注意minmax()函数的使用,还有对输出层神经元数(1)的指定。

  当然也可以采用新的语法,更简洁(请留意差异):

        net2 = newff(PT, [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()新旧用法差异 - iMe - 博客园 (cnblogs.com)

招募大量matlab技术人员,有大量matlab需求订单,均为个人短期可以完成,有时间的朋友可以加我微信:xiaoyuer-8988 加好友备注博客园matlab技术即可。有需求也可以联系此微信。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_410184.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

形态分类行为中的气泡佯谬

“假设光归根结底是波,只是给我们以粒子的印象,因为粒子吸收光波的能量是以离散的包的方式。波从源头传播出去像一个越来越大正在膨胀的气泡,到达一个原子时,气泡破裂,波坍缩并把所有的能量集中在一个地方,…

【数字式时间继电器】TR-23 DC110V

系列型号 TR-20数字式时间继电器;TR-21数字式时间继电器; TR-22数字式时间继电器;TR-23数字式时间继电器; TR-24数字式时间继电器;TR-25数字式时间继电器; TR-20D数字式时间继电器;TR-21D数字式…

无刷电机控制基础(3)——FOC矢量控制入门

本节我们讲一些无刷电机FOC矢量控制的入门知识。 1)FOC矢量控制的作用 我们前两节讲的无刷电机(BLDC),是最简单的结构,当转子匀速转动时,定子内产生的反电动势是梯形波;在驱动无刷电机转动时&a…

你不知道的JavaScript-----强制类型转换

目录 值类型转换 抽象值的操作 JSON 字符串化 ToNumber: 非数字值到数字值 Number(value) ToBoolean: 转换为布尔类型 Boolean(value) 强制类型转换 字符串和数字之间的显式强制类型转换 奇特的~运算符 字位截除 显式解析数字字符串 显式转换为布尔值 隐…

Mybatis查询返回结果类型专题

文章目录一、返回一条信息二、返回List集合三、返回Map集合四、返回多个Map集合五、返回List集合一、返回一条信息 Student selectById(Long id); 不再赘述 二、返回List集合 List< Student> selectAll(); 不再赘述 三、返回Map集合 用map集合去接收返回来的结果 字…

Python-- list(列表)的使用

目录 1.合并两个有序序列构成一个有序列表 2.编写程序判断列表是否为升序 3.输入一个十进制转换为二进制输出 4.将列表中的前p个元素到尾列表 1.合并两个有序序列构成一个有序列表 代码如下&#xff1a; list1 list(eval(input("请输入有序列表list1:"))) list…

【飞桨PaddleSpeech语音技术课程】— 一句话语音合成全流程实践

(以下内容搬运自飞桨PaddleSpeech语音技术课程&#xff0c;点击链接可直接运行源码) 一句话语音合成全流程实践 点击播放视频 1 声音克隆介绍 & 语音合成基本概念回顾 语音合成&#xff08;Speech Sysnthesis&#xff09;&#xff0c;又称文本转语音&#xff08;Text-t…

Web前端:angular对比React——选择2022年Web开发的理想框架

Javascript世界中的框架列表不断增长和变化&#xff0c;但有两个框架从其他框架中脱颖而出。Angular和React是市场上最受欢迎的框架之一&#xff0c;代表了创建web应用程序和网站的两种不同方法。 试图利用web开发框架的开发人员和企业家现在正在分析Angular和React——这两种方…

软考下午题第2题——E-R图 UML图 逻辑结构设计-示题与解析

下午的第二题主要是找【属性】【主键】【外键】【候选键】之间的关系。 候选键&#xff1a;属性或者是属性组合&#xff0c;其值能够唯一地标识一个元组 主键&#xff1a;在一个关系中可能有多个候选键&#xff0c;从中选择一个作为主键 外键&#xff1a;如果一个关系中的属性或…

微机期末复习指导

目录 位扩展定义字扩展定义1、线选法定义优点缺点2、部分译码法定义3、全译码法定义优点缺点⭐字位扩展定义问题

高压放大器基于声纹影法的声可视化实验的应用

实验名称&#xff1a;高压功率放大器基于声纹影法的声可视化实验应用 研究方向&#xff1a;声学超表面声学隐身斗篷 实验内容&#xff1a;利用声纹影平台&#xff0c;对所设计的声隐身斗篷进行出射平面波的测量&#xff0c;采用安泰放大器来驱动平面超声波阵列&#xff0c;可以…

CSS3专题-[上篇]:过渡、2D转换、动画

目录 CSS3&#xff1a;前置特性 CSS3&#xff1a;盒子模型 CSS3&#xff1a;图片滤镜与模糊处理 blur()&#xff1a;高斯模糊 CSS3&#xff1a;计算盒子宽度calc()函数 CSS3&#xff1a;过渡效果 transition属性 2D转换&#xff1a;transform属性 translate()方法 * t…

Mybatis MappedStatement

MappedStatement MappedStatement 类是 Mybatis 框架的核心类之一&#xff0c;它存储了一个 sql 对应的所有信息 Mybatis 通过解析 XML 和 mapper 接口上的注解&#xff0c;生成 sql 对应的 MappedStatement 实例&#xff0c;并放入 SqlSessionTemplate 中 configuration 类属…

凭此五点 这款信创传输系统解决了传输的迫切需求

早在20世纪80年代&#xff0c;我国政府IT底层基础软硬件的自主创新提出了相关要求&#xff0c;但受制于国外巨头垄断关键技术&#xff0c;诸多系统性风险与安全隐患无力解决。自2018年以来&#xff0c;在中兴和华为等公司供应链危机的催化下&#xff0c;信创产业进入快速发展期…

Verilog设计参数化的译码器与编码器,以及设计4位格雷码计数器

Verilog设计参数化的译码器与编码器&#xff0c;以及设计4位格雷码计数器 使用Quartusmodelsim完成设计 文章目录Verilog设计参数化的译码器与编码器&#xff0c;以及设计4位格雷码计数器1. 参数化的译码器分析代码实现Testbench结果2. 参数化的编码器分析代码Testbench结果3.…

Redis 主从架构数据同步

Redis 主从架构图 主从架构能够很大提升并发能力&#xff0c;master 节点负责写数据&#xff0c;slave 节点负责读数据&#xff0c;这样就涉及到 master 和 slave 数据同步的一个过程 一起来看一下数据是如何同步的吧 redis 的主从同步机制可以确保 master 和 slave 之间的数据…

Kubernetes 架构介绍

目录 一、Kubernetes 架构 1、Kubernetes 是什么&#xff1f; 2、Kubernetes 架构 3、Master 节点 4、Node 节点 5、推荐Add-ons 6、Kubeadm 7、查看组件运行状态 8、Kubeadm 容器化组件 二、namespace 1、命名空间 — namespace 2、常用命名空间命令 1. 查看存在哪…

【操作系统】混合索引分配和链接分配相关练习题

混合索引分配练习题&#xff1a; 比较简单&#xff0c;容易理解 练习1&#xff1a; 在UNIX操作系统中&#xff0c;给文件分配外存空间采用的是混合索引分配方式&#xff0c;如下图所示。UNIX系统中的某个文件的索引结点指示出了为该文件分配的外存的物理块的寻找方法。在该索…

C++ 并行编程

C 并行编程1. 进程和线程1.1 常规解释1.2 总结1.3 具体理解1.4 为什么使用多线程1.5 进程和线程的区别2. 并发与并行2.1 多进程并发2.2 多线程并发3. C中的多线程4. 时间管理4.1 C语言&#xff1a;time.h4.2 C11时间标准库&#xff1a;std::chrono4.2.1 获取时间段 int64_t/dou…

SQL学习十九、使用游标

游标&#xff08;cursor&#xff09;是一个存储在 DBMS 服务器上的数据库查询&#xff0c; 它不是一条 SELECT 语句&#xff0c;而是被该语句检索出来的结果集。在存储了 游标之后&#xff0c;应用程序可以根据需要滚动或浏览其中的数据。 我们通常的检索操作会返回一组称为结…