新版Matlab中神经网络训练函数Newff的使用方法

本文详细介绍了新版newff函数的语法及使用方法,并通过实例演示了如何创建、训练和评估BP神经网络。同时,对比了新版与旧版newff函数的区别,以及不同使用方式下的训练效果。

一、   介绍新版newff

Syntax

·         net = newff(P,T,[S1 S2...S(N-l)],{TF1 TF2...TFNl}, BTF,BLF,PF,IPF,OPF,DDF)

Description

 

newff(P,T,[S1 S2...S(N-l)],{TF1 TF2...TFNl}, BTF,BLF,PF,IPF,OPF,DDF) takes several arguments

P

R x Q1 matrix of Q1 sample R-element input vectors

T

SN x Q2 matrix of Q2 sample SN-element target vectors

Si

Size of ith layer, for N-1 layers, default = [ ].
(Output layer size SN is determined from T.)

TFi

Transfer function of ith layer. (Default = 'tansig' for
hidden layers and 'purelin' for output layer.)

BTF

Backpropagation network training function (default = 'trainlm')

BLF

Backpropagation weight/bias learning function (default = 'learngdm')

IPF

Row cell array of input processing functions. (Default = {'fixunknowns','removeconstantrows','mapminmax'})

OPF

Row cell array of output processing functions. (Default = {'removeconstantrows','mapminmax'})

DDF

Data divison function (default = 'dividerand')

 

Examples

Here is a problem consisting of inputs P and targets T to be solved with a network.

·         P = [0 1 2 3 4 5 6 7 8 9 10];T = [0 1 2 3 4 3 2 1 2 3 4];

Here a network is created with one hidden layer of five neurons.

·         net = newff(P,T,5);

The network is simulated and its output plotted against the targets.

·         Y = sim(net,P);plot(P,T,P,Y,'o')

The network is trained for 50 epochs. Again the network's output is plotted.

·         net.trainParam.epochs = 50;net = train(net,P,T);Y = sim(net,P);plot(P,T,P,Y,'o')

二、   新版newff与旧版newff调用语法对比

Example1

比如输入input6*1000),输出output为(4*1000),那么

 

旧版定义:net=newff(minmax(input),[14,4],{'tansig','purelin'},'trainlm');

新版定义:net=newff(input,output,14,{'tansig','purelin'},'trainlm');

Example2

比如输入input6*1000),输出output为(4*1000),那么

 

旧版定义:net=newff(minmax(input),[49,14,4],{'tansig','tansig','tansig'},'traingdx');

新版定义:net=newff(input,output, [49,14], {'tansig','tansig','tansig'},'traingdx');

  

三、   旧版newff使用方法在新版本中使用

提示:旧版本定义的newff虽也能在新版本中使用,但会有警告,警告如下:

 

Warning: NEWFF used in an obsolete way.
> In obs_use at 18
  In newff>create_network at 127
  In newff at 102
          See help for NEWFF to update calls to the new argument list.

四、   新版newff与旧版newff使用的训练效果对比

     旧版本:旧用法训练次数多,但精度高  

新版本:新用法训练次数少,但精度可能达不到要求

造成上述原因是:

程序里面的权值、阈值的初始值是随机赋值的,所以每次运行的结果都会不一样,有好有坏。
你可以把预测效果不错的网络的权值和阈值作为初始值。
具体可以查看net.iw{1,1}net.lw{2,1}net.b{1}net.b{2}的值。

现在给一个完整的例子

 %% 清空环境变量

clc

clear

%% 训练数据预测数据

data=importdata('test.txt');

%1768间随机排序

k=rand(1,768);

[m,n]=sort(k);

 

%输入输出数据

input=data(:,1:8);

output =data(:,9); 

%随机提取500个样本为训练样本,268个样本为预测样本

input_train=input(n(1:500),:)';

output_train=output(n(1:500),:)';

input_test=input(n(501:768),:)';

output_test=output(n(501:768),:)'; 

%输入数据归一化

[inputn,inputps]=mapminmax(input_train); 

%% BP网络训练

% %初始化网络结构

net=newff(inputn,output_train,10); 

net.trainParam.epochs=1000;

net.trainParam.lr=0.1;

net.trainParam.goal=0.0000004;

%% 网络训练

net=train(net,inputn,output_train); 

%% BP网络预测

%预测数据归一化

inputn_test=mapminmax('apply',input_test,inputps); 

%网络预测输出

BPoutput=sim(net,inputn_test); 

%% 结果分析

%根据网络输出找出数据属于哪类

BPoutput(find(BPoutput<0.5))=0;

BPoutput(find(BPoutput>=0.5))=1; 

%% 结果分析

%画出预测种类和实际种类的分类图

figure(1)

plot(BPoutput,'og')

hold on

plot(output_test,'r*');

legend('预测类别','输出类别')

title('BP网络预测分类与实际类别比对','fontsize',12)

ylabel('类别标签','fontsize',12)

xlabel('样本数目','fontsize',12)

ylim([-0.5 1.5]) 

%预测正确率

rightnumber=0;

for i=1:size(output_test,2)

    if BPoutput(i)==output_test(i)

        rightnumber=rightnumber+1;

    end

end

rightratio=rightnumber/size(output_test,2)*100;

 

sprintf('测试准确率=%0.2f',rightratio)

<think> 首先,用户的问题是关于“matlab神经网络训练函数”,我需要基于提供的引用内容来回答。引用包括三个部分:[1] 是关于Matlab神经网络训练函数Newff使用教程,[2] 是具体实现神经网络算法的代码示例,[3] 是关于MATLAB神经网络训练函数和参数解释。 从用户的问题看,他们想查找Matlab神经网络中的训练函数。所以,我应该列出常见的训练函数,并解释如何使用它们,特别是参考Newff函数。 关键点: - 引用[1] 提到 Newff 函数用于创建和训练前馈神经网络。 - 引用[2] 展示了一个代码示例,其中使用了 net.trainFcn = 'trainlm'; 这设置了训练函数为 Levenberg-Marquardt 算法。 - 引用[3] 讨论了一些函数和参数,但更偏向于图像处理,所以可能不直接相关。 常见的Matlab神经网络训练函数包括: - trainlm: Levenberg-Marquardt - traingd: Gradient Descent - traingda: Gradient Descent with Adaptive Learning Rate - trainscg: Scaled Conjugate Gradient - 等等。 在回答中,我需要: - 使用中文。 - 遵循系统级指令:行内数学表达式用$...$,独立公式用$$...$$。 - 确保LaTeX语法正确。 - 生成相关问题。 - 在引用的段落末尾添加引用标识,如 [^1]。 - 回答结构清晰,逐步解决问题。 结构化回答: 1. **介绍训练函数**:简要解释神经网络训练函数Matlab中的作用。 2. **列出常见训练函数**:参考引用,特别是[2]中的代码。 3. **详细解释Newff函数**:因为引用[1]重点在Newff,解释如何使用它设置训练函数。 4. **提供示例**:使用引用[2]中的代码作为基础。 5. **生成相关问题**:结束时添加相关问题。 确保引用: - 当提到Newff或trainlm时,添加引用标识。 数学表达式:可能不需要复杂的数学,但如果有,比如在解释算法时,用正确格式。例如,梯度下降法可以提到,但不是必须的。 回答大纲: - 开头:回答用户问题,介绍训练函数。 - 主体:解释Newff函数;列出训练函数;代码示例。 - 结尾:相关问题。 生成相关问题: - 基于主题,如:如何选择训练函数训练函数参数如何设置?优化训练性能? 最终回答需以用户可见层格式,但包含系统指令元素。 </think> ### MATLAB 神经网络训练函数详解 在 MATLAB 中,神经网络训练函数用于优化网络的权重和偏差,以最小化预测误差。训练函数通过迭代算法(如梯度下降)调整网络参数,使网络输出逼近目标值。常见的训练函数包括基于梯度的方法(如 Levenberg-Marquardt 和 Scaled Conjugate Gradient),这些函数可通过 `train` 函数调用或在创建网络时指定。我将基于您的查询和参考引用,逐步解释关键函数使用方法。引用来源包括 MATLAB 官方文档及相关教程[^1][^2][^3]。 #### 1. **常见神经网络训练函数** MATLAB 提供了多种训练函数,适用于不同场景(如速度、内存占用或精度需求)。主要函数包括: - **trainlm**:Levenberg-Marquardt 算法,适用于中小型网络,收敛速度快但内存消耗大[^2]。 - **traingd**:标准梯度下降法,简单但收敛慢,适合初学者学习[^2]。 - **traingda**:自适应学习率的梯度下降法,改善 `traingd` 的稳定性[^2]。 - **trainscg**:Scaled Conjugate Gradient 算法,内存高效,适合大型网络[^2]。 - **trainbr**:Bayesian Regularization,防止过拟合,适用于高噪声数据[^1]。 这些函数可通过 `net.trainFcn` 属性设置,例如: ```matlab net.trainFcn = 'trainlm'; % 设置训练函数为 Levenberg-Marquardt ``` #### 2. **Newff 函数创建网络并指定训练函数** `newff` 是 MATLAB 中用于创建前馈神经网络函数新版中建议使用 `feedforwardnet`,但 `newff` 仍广泛使用)。它允许指定训练函数作为参数。语法如下: ```matlab net = newff(输入范围, [隐藏层大小, 输出层大小], {传输函数}, '训练函数'); ``` - **输入范围**:例如 `minmax(x)` 定义输入数据的最小/最大值。 - **传输函数**:如 `'tansig'`(双曲正切)或 `'purelin'`(线性)。 - **训练函数**:作为可选参数,默认是 `'trainlm'`[^1]。 **示例代码(基于引用[2])**: 以下代码创建网络并使用 `trainlm` 训练: ```matlab % 定义输入和目标数据 x = 1:5; y = [639, 646, 642, 624, 652]; % 创建网络:输入范围 minmax(x),1个隐藏层(20个神经元),输出层1个神经元 net = newff(minmax(x), [20, 1], {'tansig', 'purelin'}); % 设置训练函数为 trainlm(Levenberg-Marquardt) net.trainFcn = 'trainlm'; % 配置训练参数:最大迭代次数500,目标误差1e-6 net.trainParam.epochs = 500; net.trainParam.goal = 1e-6; % 训练网络 [net, tr, yy] = train(net, x, y); % 仿真并计算误差 y1 = sim(net, x); E = y - y1; MSE = mse(E); % 均方误差 % 绘制结果 figure; plot(x, y1, 'r*', x, y, 'b--'); legend('预测值', '实际值'); ``` 此示例中,`train` 函数调用 `trainlm` 进行训练训练参数(如 `epochs` 和 `goal`)控制迭代过程[^2]。 #### 3. **训练函数参数详解** 训练函数可通过 `net.trainParam` 设置参数,常见选项包括: - `epochs`:最大训练迭代次数。 - `goal`:目标误差阈值,误差低于此值时停止训练。 - `lr`:学习率(用于梯度下降类函数)。 - `show`:训练进度显示频率。 例如,使用 `traingd`(梯度下降)时,可调整学习率: ```matlab net.trainFcn = 'traingd'; net.trainParam.lr = 0.01; % 设置学习率 ``` #### 4. **选择训练函数的建议** - **高精度快速训练**:优先 `trainlm`(但内存要求高)。 - **大型数据集**:使用 `trainscg` 节省内存。 - **防止过拟合**:选择 `trainbr`。 - 旧版 MATLAB 中,`newff` 是核心函数新版推荐 `feedforwardnet`,语法更简洁[^1]。例如: ```matlab net = feedforwardnet(20, 'trainscg'); % 创建网络并指定训练函数 ``` 通过合理选择训练函数和参数,您可以提升模型性能。更多细节可参考 MATLAB 文档或教程资源[^1][^2]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值