bp神经网络matlab实现时,newff函数中的网络各层神经元的激活函数怎么选啊?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bp神经网络matlab实现时,newff函数中的网络各层神经元的激活函数怎么选啊?相关的知识,希望对你有一定的参考价值。

net=newff(输入样本的取值范围,[网络各层的神经元数目],网络各层神经元的激活函数,‘训练函数',‘学习函数’,‘性能函数’),跪求大神帮忙,小弟感激不尽!!

BP网络要求激活函数处处可微,因此一般选S型函数(Sigmoid),常见的为对数S型函数(logsig)和正切S型函数(tansig)。 参考技术A 由于各个网络层的作用的不同,选择的激活函数的不同结果将会有恒大的区别
所以要注意
输出层一般采用
logsig purelin
隐含层采用
tansig logsig
同时要注意设置其他属性如最小梯度min_grad
等等本回答被提问者和网友采纳

[matlab]bp神经网络工具箱学习笔记

基本就三个函数:

newff():创建一个bp神经网络

train():训练函数

sim():仿真函数

同时具有可视化界面,但目前不知道可视化界面如何进行仿真,且设置不太全

工具箱:Neural net fitting

textread使用方法:http://blog.sina.com.cn/s/blog_9e67285801010bju.html

 ex1.

clear; 
clc;
%注意P矩阵,matlab默认将一列作为一个输入
P=[0.5152	0.8173	1.0000 ;
     0.8173	1.0000	0.7308;
     1.0000	0.7308	0.1390;
     0.7308	0.1390	0.1087;
     0.1390	0.1087	0.3520;
     0.1087	0.3520	0.0000;]‘;
%以第四个月的销售量归一化处理后作为目标向量
T=[0.7308 0.1390 0.1087 0.3520 0.0000 0.3761];
%创建一个BP神经网络,每一个输入向量的取值范围为[0 ,1],隐含层有5个神经元,输出层有一个神经元,隐含层的激活函数为tansig,输出层的激活函数为%logsig,训练函数为梯度下降函数,即标准学习算法
net=newff([0 1;0 1;0 1],[5,1],{‘tansig‘,‘logsig‘},‘traingd‘);%minmax(P)
net.trainParam.epochs=1500;%最大迭代次数.
net.trainParam.goal=0.01; %训练的误差精度
%设置学习速率为0.1
LP.lr=0.1;
net=train(net,P,T); 
a=[0.1;0.2;0.3];
a=premnmx(a);
b=sim(net,a);
b=postmnmx(b,0,1);
b

ex2.

P=[3.2 3.2 3 3.2 3.2 3.4 3.2 3 3.2 3.2 3.2 3.9 3.1 3.2;
9.6 10.3 9 10.3 10.1 10 9.6 9 9.6 9.2 9.5 9 9.5 9.7;
3.45 3.75 3.5 3.65 3.5 3.4 3.55 3.5 3.55 3.5 3.4 3.1 3.6 3.45;
2.15 2.2 2.2 2.2 2 2.15 2.14 2.1 2.1 2.1 2.15 2 2.1 2.15;
140 120 140 150 80 130 130 100 130 140 115 80 90 130;
2.8 3.4 3.5 2.8 1.5 3.2 3.5 1.8 3.5 2.5 2.8 2.2 2.7 4.6;
11 10.9 11.4 10.8 11.3 11.5 11.8 11.3 11.8 11 11.9 13 11.1 10.85;
50 70 50 80 50 60 65 40 65 50 50 50 70 70];
T=[2.24 2.33 2.24 2.32 2.2 2.27 2.2 2.26 2.2 2.24 2.24 2.2 2.2 2.35];
[p1,minp,maxp,t1,mint,maxt]=premnmx(P,T);

%创建网络
net=newff(minmax(P),[8,6,1],{‘tansig‘,‘tansig‘,‘purelin‘},‘trainlm‘);%此时的minmax函数是正确的,minmax是在每一行取最大最小值,而这也是有意义的
%设置训练次数
net.trainParam.epochs = 5000;
%设置收敛误差
net.trainParam.goal=0.0000001;
%训练网络
[net,tr]=train(net,p1,t1);
%TRAINLM, Epoch 0/5000, MSE 0.533351/1e-007, Gradient 18.9079/1e-010
%TRAINLM, Epoch 24/5000, MSE 8.81926e-008/1e-007, Gradient 0.0022922/1e-010
%TRAINLM, Performance goal met.
 
%输入数据
a=[3.0;9.3;3.3;2.05;100;2.8;11.2;50];
%将输入数据归一化
a=premnmx(a);
%放入到网络输出数据
b=sim(net,a);
%将得到的数据反归一化得到预测数据
c=postmnmx(b,mint,maxt);
c

  

 

ex3.

close all;
clear;
clc;
%读取训练数据
[f1,f2,f3,f4,class] = textread(‘Train.txt‘,‘%f%f%f%f%d‘,75,‘delimiter‘,‘,‘);
%特征值归一化
[input,minI,maxI] = premnmx( [f1,f2,f3,f4 ]‘)  ;
%构造输出矩阵
s=length(class) ;
output=zeros(s,3) ;
for i=1:s 
   output(i,class(i)) = 1 ;
end
%output=class‘;
%创建神经网络
net = newff( minmax(input),[10 3],{ ‘logsig‘,‘purelin‘ },‘traingdx‘ ); 
%设置训练参数
net.trainparam.show=50 ;
net.trainparam.epochs=500 ;
net.trainparam.goal=0.01 ;
net.trainParam.lr=0.01 ;
%开始训练
net=train(net,input,output‘) ;
 

%读取测试数据
[t1 t2 t3 t4 c]=textread(‘Test.txt‘,‘%f%f%f%f%d‘,75,‘delimiter‘,‘,‘);
%测试数据归一化
testInput=tramnmx([t1,t2,t3,t4]‘,minI,maxI);
%仿真
Y = sim(net,testInput)
%统计识别正确率
[s1,s2]=size( Y ) ;
hitNum=0 ;
for i=1:s2
    [m,Index]=max( Y(:,i));
    if(Index==c(i)) 
        hitNum=hitNum+1;
    end
end
sprintf(‘识别率是 %3.3f%%‘,100*hitNum/s2)

  

拟合曲线:

  技术分享

技术分享

 

以上是关于bp神经网络matlab实现时,newff函数中的网络各层神经元的激活函数怎么选啊?的主要内容,如果未能解决你的问题,请参考以下文章

有人知道bp神经网络Matlab R2012a 的newff用法么

运用matlab解决bp神经网络多个输入一个输出的问题

matlab BP神经网络出错 newff参数 隐含层 怎么确定

bp神经网络算法 在matlab中的实现

matlab中 BP神经网络怎么构建多个隐层

BP神经网络matlab源程序代码讲解