net=train(net, p, t);把这句改成net=train(net, p', t');试试,matlab应该默认使用列向量。
或者直接使用matlab提供的图形界面取训练,在命令行输入nnstart。
谷歌人工智能写作项目:神经网络伪原创
第0节、引例 本文以Fisher的Iris数据集作为神经网络程序的测试数据集写作猫。Iris数据集可以在 找到。
这里简要介绍一下Iris数据集:有一批Iris花,已知这批Iris花可分为3个品种,现需要对其进行分类。不同品种的Iris花的花萼长度、花萼宽度、花瓣长度、花瓣宽度会有差异。
我们现有一批已知品种的Iris花的花萼长度、花萼宽度、花瓣长度、花瓣宽度的数据。一种解决方法是用已有的数据训练一个神经网络用作分类器。
如果你只想用C#或Matlab快速实现神经网络来解决你手头上的问题,或者已经了解神经网络基本原理,请直接跳到第二节——神经网络实现。
第一节、神经网络基本原理 1. 人工神经元( Artificial Neuron )模型 人工神经元是神经网络的基本元素,其原理可以用下图表示:图1. 人工神经元模型 图中x1~xn是从其他神经元传来的输入信号,wij表示表示从神经元j到神经元i的连接权值,θ表示一个阈值 ( threshold ),或称为偏置( bias )。
则神经元i的输出与输入的关系表示为:图中 yi表示神经元i的输出,函数f称为激活函数 ( Activation Function )或转移函数 ( Transfer Function ) ,net称为净激活(net activation)。
若将阈值看成是神经元i的一个输入x0的权重wi0,则上面的式子可以简化为:若用X表示输入向量,用W表示权重向量,即:X = [ x0 , x1 , x2 , ....... , xn ]则神经元的输出可以表示为向量相乘的形式:若神经元的净激活net为正,称该神经元处于激活状态或兴奋状态(fire),若净激活net为负,则称神经元处于抑制状态。
图1中的这种“阈值加权和”的神经元模型称为M-P模型 ( McCulloch-Pitts Model ),也称为神经网络的一个处理单元( PE, Processing Element )。
2. 常用激活函数 激活函数的选择是构建神经网络过程中的重要环节,下面简要介绍常用的激活函数。
(1) 线性函数 ( Liner Function )(2) 斜面函数 ( Ramp Function )(3) 阈值函数 ( Threshold Function )以上3个激活函数都属于线性函数,下面介绍两个常用的非线性激活函数。
(4) S形函数 ( Sigmoid Function )该函数的导函数:(5) 双极S形函数 该函数的导函数:S形函数与双极S形函数的图像如下:图3. S形函数与双极S形函数图像双极S形函数与S形函数主要区别在于函数的值域,双极S形函数值域是(-1,1),而S形函数值域是(0,1)。
由于S形函数与双极S形函数都是可导的(导函数是连续函数),因此适合用在BP神经网络中。(BP算法要求激活函数可导)具体。
t=1:20; p1=sin(t); p2=sin(t)*2; plot(t,p1,'r'); hold on plot(t,p2,'b--'); hold on t1=ones(1,20);t2=ones(1,20)*2;%产生两组向量,分别为这两波形幅值,作为输出向量 p=[p1 p2 p1 p2]; t=[t1 t2 t1 t2]; Pseq=con2seq(p);%将矩阵形式的训练样本转换为序列的形式 Tseq=con2seq(t); R=1;%输入元素的数目为1 S2=1;%输出曾的神经元个数为1 S1=10;%中间层有10个神经元 net=newelm([-2,2],[S1,S2],{'tansig','purelin'}); net.trainParam.epochs=100;%设定次数 net=train(net,Pseq,Tseq); y=sim(net,Pseq); %预测 P=randn(12,2);T=randn(12,2); threshold=[0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1]; a=[11 17 23]; for i=1:3 net=newelm(threshold,[a(i),4],{'tansig','purelin'}); net.trainParam.epochs=1000; net=init(net); net=train(net,P,T); y=sim(net,p_test); error(i,:)=y'-t; end hold off; plot(1:4,error(1,:)); hold on; plot(1:4,error(2,:),'-.'); hold on; plot(1:4,error(3,:),'--'); hold off;。
昨天花了一天的时间查怎么写程序,但是费了半天劲,不能运行,百度知道里倒是有一个,可以运行的,先贴着做标本% 生成训练样本集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,并设置其输入输出数据,包括名称,神经网络的类型以及隐含层的层数和节点数,还有隐含层及输出层的训练函数等。
net=newff(pr,[3,2],{'logsig','logsig'}); %创建 一个bp 神经网络 = 10; %显示训练迭代过程 = 0.05; %学习速率0,05 = 1e-10; %训练精度net.trainParam.epochs = 50000; %最大训练次数net = train(net,p,goal); %训练结果要么接近于1 ,要么就是0,就这俩类啊,这就是分类结果;每次都有些差异 很正常,只要不大。
%人脸识别模型,脸部模型自己找吧。
function mytest()clc;images=[ ]; M_train=3;%表示人脸N_train=5;%表示方向 sample=[]; pixel_value=[];sample_number=0; for j=1:N_train for i=1:M_train str=strcat('Images\',num2str(i),'_',num2str(j),'.bmp'); %读取图像,连接字符串形成图像的文件名。
img= imread(str); [rows cols]= size(img);%获得图像的行和列值。
img_edge=edge(img,'Sobel');%由于在分割图片中我们可以看到这个人脸的眼睛部分也就是位于分割后的第二行中,位置变化比较大,而且眼睛边缘检测效果很好 sub_rows=floor(rows/6);%最接近的最小整数,分成6行 sub_cols=floor(cols/8);%最接近的最小整数,分成8列 sample_num=M_train*N_train;%前5个是第一幅人脸的5个角度 sample_number=sample_number+1; for subblock_i=1:8 %因为这还在i,j的循环中,所以不可以用i block_num=subblock_i; pixel_value(sample_number,block_num)=0; for ii=sub_rows:(2*sub_rows) for jj=(subblock_i-1)*sub_cols+1:subblock_i*sub_cols pixel_value(sample_number,block_num)=pixel_value(sample_number,block_num)+img_edge(ii,jj); end end end end end %将特征值转换为小于1的值 max_pixel_value=max(pixel_value); max_pixel_value_1=max(max_pixel_value); for i=1:3 mid_value=10^i; if(((max_pixel_value_1/mid_value)>1)&&((max_pixel_value_1/mid_value)。