Matlab语言是MathWorks公司推出的一套高性能计算机编程语言,集数学计算、图形显示、语言设计于一体,其强大的扩展功能为用户提供了广阔的应用空问。
它附带有30多个工具箱,神经网络工具箱就是其中之一。
谷歌人工智能写作项目:神经网络伪原创
matlab 带有神经网络工具箱,可直接调用,建议找本书看看,或者MATLAB论坛找例子写作猫。
核心调用语句如下:%数据输入%选连样本输入输出数据归一化[inputn,inputps]=mapminmax(input_train);[outputn,outputps]=mapminmax(output_train);%% BP网络训练% %初始化网络结构net=newff(inputn,outputn,[8 8]);net.trainParam.epochs=100;=0.01;=0.01;%网络训练net=train(net,inputn,outputn);%% BP网络预测%预测数据归一化inputn_test=mapminmax('apply',input_test,inputps); %网络预测输出an=sim(net,inputn_test); %网络输出反归一化BPoutput=mapminmax('reverse',an,outputps);%% 结果分析。
为了看懂师兄的文章中使用的方法,研究了一下神经网络昨天花了一天的时间查怎么写程序,但是费了半天劲,不能运行,百度知道里倒是有一个,可以运行的,先贴着做标本% 生成训练样本集clear all;clc;P=[110 0.807 240 0.2 15 1 18 2 1.5;110 2.865 240 0.1 15 2 12 1 2;110 2.59 240 0.1 12 4 24 1 1.5;220 0.6 240 0.3 12 3 18 2 1;220 3 240 0.3 25 3 21 1 1.5;110 1.562 240 0.3 15 3 18 1 1.5;110 0.547 240 0.3 15 1 9 2 1.5];0 1.318 300 0.1 15 2 18 1 2];T=[54248 162787 168380 314797;28614 63958 69637 82898;86002 402710 644415 328084;230802 445102 362823 335913;60257 127892 76753 73541;34615 93532 80762 110049;56783 172907 164548 144040];@907 117437 120368 130179];m=max(max(P));n=max(max(T));P=P'/m;T=T'/n;%-------------------------------------------------------------------------%pr(1:9,1)=0; %输入矢量的取值范围矩阵pr(1:9,2)=1;bpnet=newff(pr,[12 4],{'logsig', 'logsig'}, 'traingdx', 'learngdm');%建立BP神经网络, 12个隐层神经元,4个输出神经元%tranferFcn属性 'logsig' 隐层采用Sigmoid传输函数%tranferFcn属性 'logsig' 输出层采用Sigmoid传输函数%trainFcn属性 'traingdx' 自适应调整学习速率附加动量因子梯度下降反向传播算法训练函数%learn属性 'learngdm' 附加动量因子的梯度下降学习函数 net.trainParam.epochs=1000;%允许最大训练步数2000步=0.001; %训练目标最小误差0.001=10; %每间隔100步显示一次训练结果=0.05; %学习速率0.05bpnet=train(bpnet,P,T);%-------------------------------------------------------------------------p=[110 1.318 300 0.1 15 2 18 1 2];p=p'/m;r=sim(bpnet,p);R=r'*n;display(R);运行的结果是出现这样的界面点击performance,training state,以及regression分别出现下面的界面再搜索,发现可以通过神经网络工具箱来创建神经网络,比较友好的GUI界面,在输入命令里面输入nntool,就可以开始了。
点击import之后就出现下面的具体的设置神经网络参数的对话界面,这是输入输出数据的对话窗首先是训练数据的输入然后点击new,创建一个新的神经网络network1,并设置其输入输出数据,包括名称,神经网络的类型以及隐含层的层数和节点数,还有隐含层及输出层的训练函数等点击view,可以看到这是神经网络的可视化直观表达创建好了一个network之后,点击open,可以看到一个神经网络训练,优化等的对话框,选择了输入输出数据后,点击train,神经网络开始训练,如右下方的图,可以显示动态结果下面三个图形则是点击performance,training state以及regression而出现的下面就是simulate,输入的数据是用来检验这个网络的数据,output改一个名字,这样就把输出数据和误差都存放起来了在主界面上点击export就能将得到的out结果输入到matlab中并查看下图就是输出的两个outputs结果还在继续挖掘,to be continue……
精度是自己设定的,是那个水平的直线,这里的神经网络没有best曲线,就是个goal和training两条的。
是训练过程中的误差曲线,表示经过X次训练,感知器输出达到目标值,也就是感知器的输出已经和目标向量一致了。
每一代BP训练过程的MSE指标的性能,每一代BP交叉验证过程的MSE指标shu的性能以及BP测试的MSE指标在每一代中执行的过程。 特别是,应该注意内部的TEST红线,这是BP计算/训练结果。
扩展资料:BP(Back Propagation)神经网络是由Rumelhart和McCelland领导的一组科学家于1986年提出的。
BP(Back Propagation)是由反向传播误差反向传播算法训练的多层前馈网络,是使用最广泛的神经网络模型之一。
BP网络可以学习并存储大量的输入-输出模式映射关系,而无需事先揭示描述这些映射关系的数学方程式。
BP网络的学习规则是使用最速下降法,并通过反向传播来不断调整网络的权重和阈值,以最小化网络的平方误差之和。 BP神经网络模型的拓扑包括输入层,隐藏层和输出层。参考资料来源:百度百科-BP神经网络。
clear all;clcfor kk=0:89 pl=ones(16,16); m=strcat(int2str(kk),'.bmp'); x=imread('2.bmp'); bw=im2bw(x,0.5); [i,j]=find(bw==0); imin=min(i); imax=max(i); jmin=min(j); jmax=max(j); bw1=bw(imin:imax:jmin:jmax); rate=16/max(size(bw1)); bw1=imresize(bw1,rate); [i,j]=size(bw1); i1=round((16-i)/2); j1=round((16-j)/2); p1(i1+1:i1+i,j1+1:j1+j)=bw1; p1=-1.*p1+ones(16,16); for m=0:15 p(m*16+1:(m+1)*16,kk+1)=p1(1:16,m+1); end switch kk case{0,10,20,30,40,50,60,70,80,90} t(kk+1)=0; case{1,11,21,31,41,51,61,71,81,91} t(kk+1)=1; case{2,12,22,32,42,52,62,72,82,92} t(kk+1)=2; case{3,13,23,33,43,53,63,73,83,93} t(kk+1)=3; case{4,14,24,34,44,54,64,74,84,94} t(kk+1)=4; case{5,15,25,35,45,55,65,75,85,95} t(kk+1)=5; case{6,16,26,36,46,56,66,76,86,96} t(kk+1)=6; case{7,17,27,37,47,57,67,77,87,97} t(kk+1)=7; case{8,18,28,38,48,58,68,78,88,98} t(kk+1)=8; case{9,19,29,39,49,59,69,79,89,99} t(kk+1)=9; endend。
若果对你有帮助,请点赞。 神经网络的结构(例如2输入3隐节点1输出)建好后,一般就要求神经网络里的权值和阈值。
现在一般求解权值和阈值,都是采用梯度下降之类的搜索算法(梯度下降法、牛顿法、列文伯格-马跨特法、狗腿法等等),这些算法会先初始化一个解,在这个解的基础上,确定一个搜索方向和一个移动步长(各种法算确定方向和步长的方法不同,也就使各种算法适用于解决不同的问题),使初始解根据这个方向和步长移动后,能使目标函数的输出(在神经网络中就是预测误差)下降。
然后将它更新为新的解,再继续寻找下一步的移动方向的步长,这样不断的迭代下去,目标函数(神经网络中的预测误差)也不断下降,最终就能找到一个解,使得目标函数(预测误差)比较小。
而在寻解过程中,步长太大,就会搜索得不仔细,可能跨过了优秀的解,而步长太小,又会使寻解过程进行得太慢。因此,步长设置适当非常重要。
学习率对原步长(在梯度下降法中就是梯度的长度)作调整,如果学习率lr = 0.1,那么梯度下降法中每次调整的步长就是0.1*梯度, 而在matlab神经网络工具箱里的lr,代表的是初始学习率。
因为matlab工具箱为了在寻解不同阶段更智能的选择合适的步长,使用的是可变学习率,它会根据上一次解的调整对目标函数带来的效果来对学习率作调整,再根据学习率决定步长。
机制如下:if newE2/E2 > maxE_inc %若果误差上升大于阈值 lr = lr * lr_dec; %则降低学习率 else if newE2 < E2 %若果误差减少 lr = lr * lr_inc;%则增加学习率 end详细的可以看《神经网络之家》nnetinfo里的《[重要]写自己的BP神经网络(traingd)》一文,里面是matlab神经网络工具箱梯度下降法的简化代码。