神经网络逼近函数c语言 c语言 神经网络( 二 )


我们分成几步来模拟:
得到的结果很好地近似了目标函数 。
利用矩形脉冲函数,我们很容易近似其它任意函数,就像积分原理一样 。
这个是最简单的情况,我们使用一个不带激活函数的神经元即可模拟 。
通过调整参数,即可模拟任意平面 。
我们使用一个带Sigmoid激活函数的神经元来模拟 。
与一元函数的情况类似,我们分步实现它:
最终的神经网络结构如下图所示:
利用二元矩形脉冲函数 , 我们很容易近似其它任意二元函数,就像积分原理一样 。
原理一样,自己想象!??
构建与数字电路之上的软件程序也可以模拟任意函数,那为什么还要发明人工神经网络呢?
更多内容及可交互版本 , 请参考App:
求助 , 应用BP神经网络逼近非线性函数该作业要求不可使用Matlab自带的神经网络函数 , 这是因为如果允许使用,则三个函数:newff函数建立网络、train函数训练、sim函数就直接完成作业了 。
下面这个附件的第二个案例,就是自己编程,使用BP算法逼近非线性函数y=x1^2+x2^2.该函数为双自变量的非线性函数,完全符合你的作业的要求,可以说你可以直接不用修改,提交该代码作为你的作业 。但建议你还是改一下,例如将函数换成其他非线性函数如三角函数等 。也可使用改进的如加动量项、自适应学习率、引入陡度因子等方法 。
BP(Back Propagation)神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络 , 是目前应用最广泛的神经网络模型之一 。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程 。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小 。BP神经网络模型拓扑结构包括输入层(input)、隐层(hidden layer)和输出层(output layer) 。
我最近要写一个逼近函数f(x,y)=x*x+y*y的程序 , 我已经弄了几天了 , 因为没有学过Matlab,头疼?请教??晚上查了些资料,仿照例子造了一个逼近的程序,自己也迷迷糊糊的 , 一起商量下 。
%disdince_square.m用于BP神经网络的函数逼近
clc;clear;
x=linspace(-1,1,20);y=x;
P=zeros(400,2);
for i=1:20%将x , y数据排成两列数据点
P(i:i+20-1,1)=x(i);
P(i:i+20-1,2)=y;
end
z=P(:,1).^2+P(:,2).^2;%z值
z=z'; P=P';
%开始做函数逼近网络
s=3:8;%希望单隐藏层神经元个数3~8个依次实验下
res=1:6;
for i=1:6
net=newff(P,z,s(i));%设计网络
%net=newff(minmax(P),[s(i),1],{'tansig','logsig'},'traingdx');
net.trainParam.epochs=2000;
net.trainParam.goal=0.01;
net=train(net,P,z);%训练
k=sim(net,P);%训练输出
error=k-z;%误差
res(i)=norm(error);%对比
end
%zz=reshape(k,20,20);
%[xx,yy]=meshgrid(x,y);
%mesh(xx,yy,zz);
%————————————————————————%
后面我进行了一下绘制曲面图,结果不是很如意....
对了,顺便提一句 , 中国知网里面有一篇名叫《BP神经网络的Matlab编程实现》文章,浙江交通技术学院学报2007.12,举例就是逼近一个函数y=(x1^2+x2^2)/2,但是我下载下来发现文档有些东西显示不对头,虽然有程序 , 不过好像只是主要部分,程序的设计方式也不是利用matlab神经网络工具箱 。
神经网络(Neural Network)(1)结构:许多树突(dendrite)用于输入,一个轴突 (axon)用于输出 。

推荐阅读