神经网络输出层用sigmoid函数能否做函数拟合

神经网络输出层用sigmoid函数能否做函数拟合,第1张

sigmoid函数的值域就在(0,1)内,所以你的输出结果肯定在0到1之间;至于能否拟合是要看情况的,如果原来可以拟合,那么更换输出函数也可以,不过效果是否好就不敢保证了,虽然signoid做了一个同胚变换,但样本毕竟不是真的在一个连续函数上,有时候误差会导致变换时效果变差。——仅个人观点

这个是做不到的。神经网络的非线性函数拟合是指非线性映射,并非对具体数学表达式进行求解。这也是神经网络的特点,即不需要精确的数学表达式,即可实现许多功能。

非线性关系是自然界的普遍特性。大脑的智慧就是一种非线性现象。人工神经元处于激活或抑制二种不同的状态,这种行为在数学上表现为一种非线性关系。具有阈值的神经元构成的网络具有更好的性能,可以提高容错性和存储容量。

这样:

clear;

%输入数据矩阵

p1=zeros(1,1000);

p2=zeros(1,1000);

%填充数据

for i=1:1000

p1(i)=rand;

p2(i)=rand;

end

%输入层有两个,样本数为1000

p=[p1;p2];

%目标(输出)数据矩阵,待拟合的关系为简单的三角函数

t = cos(pip1)+sin(pip2);

%对训练集中的输入数据矩阵和目标数据矩阵进行归一化处理

[pn, inputStr] = mapminmax(p);

[tn, outputStr] = mapminmax(t);

%建立BP神经网络

net = newff(pn, tn, [200,10]);

%每10轮回显示一次结果

nettrainParamshow = 10;

%最大训练次数

nettrainParamepochs = 5000;

%网络的学习速率

nettrainParamlr = 005;

%训练网络所要达到的目标误差

nettrainParamgoal = 10^(-8);

%网络误差如果连续6次迭代都没变化,则matlab会默认终止训练。为了让程序继续运行,用以下命令取消这条设置

netdivideFcn = '';

%开始训练网络

net = train(net, pn, tn);

%训练完网络后要求网络的权值w和阈值b

%获取网络权值、阈值

netiw = netiw;

netlw = netlw;

netb = netb;

w1 = netiw{1,1}; %输入层到隐层1的权值

b1 = netb{1} ; %输入层到隐层1的阈值

w2 = netlw{2,1}; %隐层1到隐层2的权值

b2 = netb{2} ; %隐层1到隐层2的阈值

w3 = netlw{3,2}; %隐层2到输出层的权值

b3 = netb{3} ;%隐层2到输出层的阈值

%在默认的训练函数下,拟合公式为,y=w3tansig(w2tansig(w1in+b1)+b2)+b3;

%用公式计算测试数据[x1;x2]的输出,输入要归一化,输出反归一化

in = mapminmax('apply',[x1;x2],inputStr);

y=w3tansig(w2tansig(w1in+b1)+b2)+b3;

y1=mapminmax('reverse',y,outputStr);

%用bp神经网络验证计算结果

out = sim(net,in);

out1=mapminmax('reverse',out,outputStr);

扩展资料:

注意事项

一、训练函数

1、traingd

Name:Gradient descent backpropagation (梯度下降反向传播算法 )  

Description:triangd is a network training function that updates weight and bias values  according to gradient descent              

2、traingda

Name:Gradient descent  with adaptive learning rate backpropagation(自适应学习率的t梯度下降反向传播算法)   

Description:triangd is a network training function that updates weight and bias values  according to gradient descent with adaptive learning rate it will return a trained net (net) and  the trianing record (tr)

3、traingdx (newelm函数默认的训练函数)

name:Gradient descent with momentum and adaptive learning rate backpropagation(带动量的梯度下降的自适应学习率的反向传播算法)  

Description:triangdx is a network training function that updates weight and bias values  according to gradient descent momentum and an adaptive learning rateit will return a trained net (net) and  the trianing record (tr)   

4、trainlm

Name:Levenberg-Marquardt backpropagation (L-M反向传播算法)

Description:triangd is a network training function that updates weight and bias values  according toLevenberg-Marquardt optimization it will return a trained  net (net) and  the trianing record (tr) 

注:更多的训练算法请用matlab的help命令查看。

二、学习函数

1、learngd

Name:Gradient descent weight and bias learning function (梯度下降的权值和阈值学习函数)  

Description:learngd is the gradient descent weight and bias learning function, it will return the weight change dW and a new learning state

2、learngdm 

Name:Gradient descent with momentum weight and bias learning function (带动量的梯度下降的权值和阈值学习函数)  

Description:learngd is the gradient descent  with momentum weight and bias learning function, it will return the weight change dW and a new learning state

注:更多的学习函数用matlab的help命令查看。

三、训练函数与学习函数的区别

函数的输出是权值和阈值的增量,训练函数的输出是训练好的网络和训练记录,在训练过程中训练函数不断调用学习函数修正权值和阈值,通过检测设定的训练步数或性能函数计算出的误差小于设定误差,来结束训练。    

或者这么说:训练函数是全局调整权值和阈值,考虑的是整体误差的最小。学习函数是局部调整权值和阈值,考虑的是单个神经元误差的最小。

它的基本思想是学习过程由信号的正向传播与误差的反向传播两个过程组成。

正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出(教师信号)不符,则转入误差的反向传播阶段。

反向传播时,将输出以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。

主要看均方误差和其百分比(准确率)。假如你拟合出来是ui,计算(yi-ui)^2的平均值,然后计算这个平均值与yi平均值的比(也就是均方误差百分比),当然用1减去这个百分比就是准确率了。一般也会画一幅图,把yi和ui分别用不同的颜色或者符号表示出来,直观对比。

拟合时的隐含层节点数目前没有一个通行的公式进行确定,只能凭借经验和试凑。一般情况下,问题的复杂程度(非线性程度和维度)越高,隐含层节点数越多。这里介绍一个小经验:先用不太大的节点数进行预测,如果增加节点数测试集准确率和训练集准确率都有所提升,则应该继续增加。如果增加节点数测试集准确率增加很不明显,而训练集准确率还是有所提升,则不应该继续增加,当前的就是很理想的,继续增加节点数只会起到反效果。

欠拟合是指模型不能在训练集上获得足够低的误差。而过拟合是指训练误差和测试误差之间的差距太大。

通过调整模型的容量(capacity),我们可以控制模型是否偏向于过拟合或者欠拟合。通俗地,模型的容量是指其拟合各种函数的能力。容量低的模型可能很难拟合训练集。容量高的模型可能会过拟合,因为记住了不适用于测试集的训练集性质。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12172066.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存