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

2023-11-01

摘要

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

训练窗口:

a4c26d1e5885305701be709a3d33442f.png

程序输出:

新式语法 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))]);

训练窗口:

a4c26d1e5885305701be709a3d33442f.png

程序输出:

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

也达到了预期目标。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matlab newff函数弃用了,MATLAB神经网络函数NEWFF()新旧用法差异 的相关文章

  • scrapy爬取链接

    近期因为工作需要 开始学习和写爬虫 学习到了很多内容 就整理了一下发上来 需求 这里爬虫的目的是检测网站的漏洞 因此希望做成类似于burpSuit的历史记录一样的 初步需求是简单地爬取网站的链接 去重 尝试绕过反爬虫 更进一步的是希望像bu
  • React既在constructor内部写state又在外部写了state的情况

    React既在constructor内部写state又在外部写了state的情况下 state到底是里面生效还是外面生效 查了一下 没有说这俩同时的帖子 所以自己验证的时候第一个想法是考虑代码的顺序 还有constructor的特殊性 看了
  • 今天在做微信分享功能的时候,遇到项目部署后出现 config:invalid url domain 弹窗提示的解决办法

    产生此错误的原因是微信公众号后台配置的微信安全网址跟当前页面的域名不一致导致的 要解决这种情况就需要在公众号的后台设置js接口安全域名 打开微信公众平台 把MP verify sfpa0ES1106ZRXnp txt 这个文件放到你的服务器
  • Codeforces 808G(KMP+DP)

    转移的时候要注意对于S 0 i 后缀的最长匹配 如果最长匹配为整个T串 那么就可以开始转移 转移时新出现的T可以从上一个完整的T的公共前缀的next转移加1过来 这就相当于用上一个T中的后缀作为当前T的前缀 不断求NEXT求出一个最大的转移
  • 蛇形矩阵/算法

    常见的蛇形矩阵 1 回性蛇形矩阵 2 上三角s型蛇形矩阵 3 完整s型蛇形矩阵 回型蛇形矩阵 输入数据 x是作为横坐标起点 y纵坐标起点 思路 四个方向右下左上 顺时针填进数字 每一次都可以用while循环一行一列依次填写 每次判断下要填的
  • Android ANR问题定位 实战

    在Android开发过程中 ANR问题可能是非常常见的一个问题 下面我分享一个亲身经历的ANR问题以及解决方法 1 发生ANR 必然会有log日志 在系统的data anr目录下 我们将所有的anr log日志pull出来 由于权限的原因
  • Lua实现定时器

    Lua实现定时器 An highlighted block local index 1 local delays local elasped 0 local function SetTimeout delay fn table insert
  • Dynamics CRM2011自定义框架解决方案

    Dynamics CRM2011自定义框架解决方案 解决方案文件下载 一 目的 许多客户习惯之前系统自定义开发的页面 操作习惯或界面风格 但使用了Dynamics CRM2011后只能使用产品自带的风格 为解决此类问题提供了此解决方案 在C
  • 阿里巴巴为什么不用 ZooKeeper 做服务发现?

    转载自 https developer aliyun com article 601745 历史的迷思 站在未来的路口 回望历史的迷途 常常会很有意思 因为我们会不经意地兴起疯狂的念头 例如如果当年某事提前发生了 而另外一件事又没有发生会怎
  • 面向对象的程序设计思想

    面向对象是当今主流的一种程序设计理念和设计规范 它取代了早期的 结构化 过程设计开发技术 主张一切皆为对象 程序以人的思维模式去解决问题 面向对像的程序是由类组成的 每个类包含对用户公开的特定功能部分和隐藏的实现部分 面向对象 Object
  • 人工智能练习题 + 知识点汇总(期末复习版)

    目录 第一章 人工智能绪论 第二章 知识与谓词 第三章 谓词与自然演绎推理 第四章 语义网表示法和框架表示法 第五章 归结原理 第六章 置换和合一 第七章 定理证明和问题求解 第八章 状态空间法和问题归约法 第九章 启发式搜索 第十章 与或
  • vite+element-plus项目基础搭建

    vite element plus项目基础搭建 1 引言 2 为什么是Vite 3 为什么是Element plus 4 项目搭建 5 参考文献 1 引言 其实本来不应该写这种CSDN比较多的博文的 主要是因为比较多 然后想解决问题的时候有
  • 设置ssh登录Linux服务器和git上ssh的使用

    设置ssh登录Linux服务器 前言 环境 配置 客户端 服务器端 可能碰到的问题 使用密钥命令登录依然提示输入密码 git如何使用ssh key 前言 我们在远程Linux服务器或者使用git的时候都需要输入密码登录后进行操作 在进行频繁
  • PaddleOCR对于手写符号识别,从零开始搭建(包括期间遇到的所有问题)

    需求 需要对手写图片进行识别 勾 叉 圈 识别成对于的 v x o 其他的符号识别成 e 搭建环境 win10 gpu模式 用cpu搭建过一版 但是cpu训练太慢 搭建cpu期间的问题比gpu问题的少 使用gpu的需要有一块N卡 英伟达 我
  • 非root用户安装 Python + MySQLdb 及使用

    资源不足时要充分发挥主观能动性 没有测试机的root权限 但想用python脚本对数据库进行压测 只能在自己的目录下安装 所以configure的 prefix以及后来install MySQLdb时的路径选项很重要 1 Python ta
  • Vue3中数组filter方法,使用reactive不更新界面,而使用ref定义更新界面

    Vue3中使用reactive定义数组 对其进行更改不更新界面 也检测不到变化 但数据变了 let todoList reactive JSON parse localStorage getItem todoList function cl
  • Initial job has not accepted any resources; check your cluster UI to ensure that workers are...

    在集群上运行spark应用程序时 出现 Initial job has not accepted any resources check your cluster UI to ensure that workers are register
  • matlab多核计算设置1

    刚才试了一下 我使用的MATLAB2010可以多核运行的 需要多核多线程跑的算法 在之前要让matlab在本地建立4个 实验室 我的机器是4核 所以是4个 gt gt matlabpool local 4 Starting matlabpo
  • (No info could be read for -p: geteuid()=1001 but you should be root.)

    场景 使用netstat nltp命令 提示 No info could be read for p geteuid 1001 but you should be root 解决方案 sudo i 切换为root用户即可

随机推荐

  • oled拼接屏优势详解

    湖北省是中国中部地区的一个省份 拥有着丰富的资源和广阔的市场 在这个省份中 随着科技的不断发展 越来越多的企业开始使用oled拼接屏来展示自己的产品和服务 那么 什么是oled拼接屏呢 它有哪些优势和应用场景呢 下面就让我们来了解一下 首先
  • ubuntu 12.04 安装dropbox

    在线安装可能被墙 所以采用下载后安装 step 1 在 https www dropbox com install os lnx 下载对应的 deb包 dropbox 1 6 0 i386 deb step 2 安装 deb包 dpkg i
  • ConstraintLayout约束布局的应用

    首先需要引入我们的ConstraintLayout 在build gradle中加入 compile com android support constraint constraint layout 1 0 2 ConstraintLayo
  • GZHU 网络DNS修改教程

    一 下载软件 点击下载 二 将该软件所在路径添加到系统环境变量 按 Win S 输入 坏境变量 点击该选项 进入Path的编辑 先点击环境变量 再双击 Path 最后点击新建 把dnsproxy exe 所在目录的路径填写在那里 验证是否添
  • 10个常用的Java8日期处理函数案例详解

    Java 8中的日期函数 主要是基于 ISO标准日历系统 java time 包下的所有类都是不可变类型 且线程安全 现在壹哥就日期处理的常用功能代码总结如下 1 获得当前日期 获得当前日期 Test public void testGet
  • 2023面试问答_操作系统

    简单说下你对并发和并行的理解 并行是指两个或者多个事件在同一时刻发生 而并发是指两个或多个事件在同一时间间隔发生 并行是在不同实体上的多个事件 并发是在同一实体上的多个事件 同步 异步 阻塞 非阻塞的概念 同步 当一个同步调用发出后 调用者
  • vue实现锚点定位(多级动态菜单)

    现在有一个需求是实现多级动态菜单点击跳转到相应位置 一般这种需求实现起来就是href id的方式锚点定位 但是这种方式的滚动很生硬 故不采纳 我使用的方案是根据id 获取到当前元素距离body顶部的距离 判断此时滚动条需要滚动的距离 再通过
  • (2020)End-to-end Neural Coreference Resolution论文笔记

    2020End to end Neural Coreference Resolution论文笔记 Abstract 1 Introduction 2 Related Work 3 Task 4 Model 4 1 Scoring Archi
  • Android studio中使用ViewPager和BottomNavigationView实现底部导航栏和碎片的同步切换

    前言 通过几次的踩雷和摸索 完成了以上的操作 本教程写的详细全面 包教包会 对新手有好 看了不会的联系我 我倒立洗头给你看 1 需要了解的一些知识 所需控件 fragment 作为Android中最常用的控件 它有自己的声明周期 可以粗略地
  • 静态代码检测工具 cppcheck ubantu下安装及使用教程

    Cppcheck是用在C C 中对code进行静态检查的工具 它的源码在 GitHub danmar cppcheck static analysis of C C code 它的License是GPL 3 0 它可以帮助我们检测出代码存在
  • Qt 插件创建教程

    Qt 插件创建教程 Qt 是一款非常流行的跨平台GUI应用程序开发工具 它提供了丰富的API和工具库 让开发者快速开发出高质量的应用程序 其中 在Qt中 插件是一个非常重要的概念 它可以帮助我们实现模块化编程 可以让我们的应用程序更加灵活
  • Linux内核学习笔记(八)Page Cache与Page回写

    你也可以通过我的独立博客 www huliujia com 获取本篇文章 综述 Page cache是通过将磁盘中的数据缓存到内存中 从而减少磁盘I O操作 从而提高性能 此外 还要确保在page cache中的数据更改时能够被同步到磁盘上
  • 数值分析实验(二)迭代法的应用

    目录 实验名称 数值分析实验 二 迭代法的应用 实验题目 实验原理 1 高斯消去法 2 Jacobi迭代法 3 G S迭代法 4 SOR迭代法 实验数据记录及处理 实验内容及步骤 1 高斯消元法 2 Jacobi迭代法 3 G S迭代法 4
  • 如何使用Python进行桌面应用开发?

    Python提供了多个库和框架来进行桌面应用开发 以下是使用Python进行桌面应用开发的常用方法之一 PyQt PyQt是一个用于开发跨平台桌面应用的Python库 它提供了丰富的GUI组件和工具 以下是使用PyQt创建桌面应用的基本步骤
  • Linux上启用kvm嵌套虚拟化功能

    kvm支持嵌套虚拟化 即可以在虚拟机中创建虚拟机 本文主要介绍如何在使用Intel处理器的CentOS7中开启KVM的嵌套虚拟化功能 kvm主要是通过内核模块来实现的 因此我们查看系统是否开启了kvm嵌套虚拟化 只需要 cat sys mo
  • 代码随想录算法训练营 个人总结

    训练营周期 2023 5 10 7 8 共计60天 LeetCode记录 参加训练营之前 就有想刷LeetCode的想法 一方便没有头绪地不知道按什么顺序刷题 另一方面也没有找到很好的讲解材料 都是自己看LeetCode页面上讨论模块下的高
  • Spark SQL数据源 - 基本操作

    目录 一 基本操作 二 默认数据源 一 默认数据源Parquet 二 案例演示读取Parquet文件 1 在Spark Shell中演示 2 通过Scala程序演示 一 基本操作 Spark SQL提供了两个常用的加载数据和写入数据的方法
  • git上创建自己的仓库并将新项目推上去

    1 在github上创建仓库 创建后复制地址 2 先进入项目文件夹 通过命令 git init 把这个目录变成git可以管理的仓库 git init 3 把文件添加到版本库中 使用命令 git add 添加到暂存区里面去 不要忘记后面的小数
  • 【华为OD机试真题2023B卷 JAVA&JS】找单词

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 找单词 时间限制 1秒 内存限制 32768K 语言限制 不限 题目描述 给一个字符串和一个二维字符数组 如果该字符串存在于该数组中 则按字符串的字符顺序输出字符串每个字符所在单元格的
  • matlab newff函数弃用了,MATLAB神经网络函数NEWFF()新旧用法差异

    摘要 在Matlab R2010a版中 如果要创建一个具有两个隐含层 且神经元数分别为5 3的前向BP网络 使用旧的语法可以这样写 net1 newff minmax P 5 3 1 注意minmax 函数的使用 还有对输出层神经元数 1