首页 > 其他分享 >Matlab神经网络函数newff()新旧用法差异

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

时间:2022-11-01 08:33:52浏览次数:90  
标签:trainParam 语法 神经网络 Matlab mse newff net2 net1

在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技术即可。有需求也可以联系此微信。

 

标签:trainParam,语法,神经网络,Matlab,mse,newff,net2,net1
From: https://www.cnblogs.com/sy01/p/16846512.html

相关文章

  • MATLAB约束最优化之罚函数法、障碍函数法和SQP方法
    1.罚函数法罚函数方法包括外点法和内点法。外点法又叫外罚函数法,顾名思义,迭代点再约束条件的可行域之外,既用于不等式约束又可用于等式约束。同样地,罚函数方法又叫序列无......
  • matlab最小二乘法数据拟合函数详解
    定义:最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与......
  • 基于龙格-库塔法Runge-Kutta的常微分方程的求解matlab仿真
    目录一、理论基础二、核心程序三、测试结果一、理论基础四阶龙格库塔法龙格库塔法的家族中的一个成员如此常用,以至于经常被称为“RK4”或者就是“龙格库塔法”。令初......
  • 神经网络-AlexNet 21
     训练的数据集: 含有数据集的:链接:https://pan.baidu.com/s/1u8N_yRnxrNoIMc4aP55rcQ提取码:6wfe 不含数据集的:链接:https://pan.baidu.com/s/1BNVj2XSajJx8u1ZlKadnmw......
  • 基于Matlab中FDATool工具箱的滤波器设计及相关文件的生成
     招募大量matlab技术人员,有大量matlab需求订单,均为个人短期可以完成,有时间的朋友可以加我微信:nn505203,有需求也可以联系此微信。加好友备注博客园matlab技术即可。......
  • Matlab中图片保存的四种方法
    matlab的绘图和可视化能力是不用多说的,可以说在业内是家喻户晓的。Matlab提供了丰富的绘图函数,比如ez**系类的简易绘图函数,surf、mesh系类的数值绘图函数等几十个。另外其......
  • MATLAB入门实验-MATLAB实验1...MATLAB实验8
    MATLAB入门实验-MATLAB实验1...MATLAB实验8实验1MATLAB系统环境运算基础一、实验目的掌握启动和退出MATLAB的方法。掌握MATLAB操作界面的组成。掌握建立矩阵的方法......
  • Matlab实现:图像边缘提取
    1、边缘提取算法方法一:一阶微分算子Sobel算子Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好,Sobel算子对边缘定位不是很准确,图像的边缘不止一个......
  • 重磅综述 | 神经网络机器学习的数学理解
    本文是由鄂维南院士、马超、吴磊和StephanWojtowytsch2020年12月发表在CSIAMTransactionsonAppliedMathematics上的综述文章。原文题目为“TowardsaMathematicalU......
  • Matlab编程基础
    “Matlab”是“Matrix Laboratory”的缩写,中文“矩阵实验室”,是强大的数学工具。本文侧重于Matlab的编程语言侧面,讲述Matlab的基本语法,以及用Matlab语言进行程序设计。值......