1、人工神经网络的知识表示形式
人工神经网络的知识表示形式:
1、每个神经元都是一个多输入单输出的信息处理单元 ;
2、神经元输入分兴奋性输入和抑制性输入两种类型 ;
3、神经元具有空间整合特性和阈值特性 ;
4、神经元输入与输出间有固定的时滞 ,主要取决于突触延搁 ;
5、忽略时间整合作用和不应期 ;
6、神经元本身是非时变的 , 即其突触时延和突触强度均为常数 。
概念分析
人工神经网络是在现代神经生物学研究基础上提出的模拟生物过程 ,反映人脑某些特性的一种计算结构。它不是人脑神经系统的真实描写,而只是它的某种抽象、简化和模拟。
根据前面对生物神经网络的介绍可知,神经元及其突触是神经网络的基本器件 。 因此,模拟生物神经网络应首先模拟生物神经元。在人工神经网络中,神经元常被称为“处理单元” 。有时从网络的观点出发常把它称为“节点” 。
谷歌人工智能写作项目:小发猫
2、matlab神经网络多输入单输出问题
首先:你的想法(199个数作为输入,1个数作为输出)是没什么问题,但是你的输入矩阵为199*n,你的n=1,表明你的样本只有一个,这样一个孤立的样本作为训练样本没什么意义;
其次:姑且不谈你的样本意义,需要跟你说明的是,matlab神经网络工具箱是以一列为一个样本,而你的B=minmax(input')使得B为1*199的矩阵,显然不对,最好加上B=B';
最后:[net,tr]=train(net,input,output,[],[]);中的参数为三个也行,改为net=train(net,input,output);
上面所述是按旧版本来的参考:一个技术宅的学习笔记。
下面是我修改的程序,matlab版本R2012b,你的是旧版本的matlab,所以newff用法跟新的略有不同:
clear
p=1:0.05:11-0.05;
t=(p-1).*(p-2).*(p-4).*(p-9).*(p-11);
N=length(p);
input=t(1:199)';
output=t(200);
ptest=t(2:200)';
% B=minmax(input');
net = newff(input,output,[20 6],{'tansig' 'tansig' 'purelin'},'traingdx','learngdm');
[net,tr]=train(net,input ,output);
a=sim(net,ptest');
3、如何使用matlab编写多输入单输出BP神经网络 20
在你的代码基础上说了。
clc;clear;
close all;
p=load('originaldata.txt');%你问题最后说的数据文件名跟这个不同。
p1=p';
t=[1];% 这个输出(Targets)应该和输入数据对应,输入数据有10个,输出应该也是10个
所以改为 t是一个1x10的行向量,每个元素对应10个输入数据的输出。不知道你的训练数据的输出是不是都是1?我试了试假设你的数据的输出都是1,所以t=ones(1,10),可以运行。
4、运用matlab解决bp神经网络多个输入一个输出的问题
用最简单的bp网络就行,输入节点数等于变量数,输出节点数为1.在matlab里,就用newff函数建立网络即可。
newff函数的格式为:net=newff(PR,[S1 S2 ...SN],{TF1 TF2...TFN},BTF,BLF,PF),函数newff建立一个可训练的前馈网络。输入参数说明:
PR:Rx2的矩阵以定义R个输入向量的最小值和最大值;
Si:第i层神经元个数;
TFi:第i层的传递函数,默认函数为tansig函数;
BTF:训练函数,默认函数为trainlm函数;
BLF:权值/阀值学习函数,默认函数为learngdm函数;
PF:性能函数,默认函数为mse函数。
5、MATLAB BP神经网络多输入单输出代码问题
我也遇到同样的问题,问题是输入向量和目标向量之间有问题,可以把目标向量改成行向量。必须保证输入行数目和目标列数目相等。
6、MATLAB中BP神经网络多输入单输出程序
把输入转置一下 应该就可以了,这样就有10列,对应10个输出,每列的三行就对应3维
7、三个输入一个输出的人工神经网络程序
MATLAB写的:
(输入输出隐层节点数都可以改的)
clear all
inputnums=3;%输入层节点
outputnums=1;%输出层节点
hidenums=7;%隐层节点
maxcount=50000;%最大迭代次数
samplenum=19;%一个计数器,无意义
precision=0.00001;%预设精度
yyy=1.3;%yyy是帮助网络加速走出平坦区
alpha=0.02;%学习率设定值
a=0.9;%BP优化算法的一个设定值,对上组训练的调整值按比例修改
error=zeros(1,maxcount+1);%error数组初始化;目的是预分配内存空间
errorp=zeros(1,samplenum);%同上
v=rand(inputnums,hidenums);%1*10;v初始化为一个1*10的随机归一矩阵;v表输入层到隐层的权值
deltv=zeros(inputnums,hidenums);%1*10;内存空间预分配
dv=zeros(inputnums,hidenums);%1*10;
w=rand(hidenums,outputnums);%10*1
deltw=zeros(hidenums,outputnums);%10*1
dw=zeros(hidenums,outputnums);%10*1
samplelist=1:0.5:10;%样本输入值
expectlist=samplelist.^(-1);%期望输出值
%expectlist=exp(-samplelist);
[samplelist,minp,maxp]=premnmx(samplelist);
%[expectlist,mint,maxt]=premnmx(expectlist);
count=1;
while(count<=maxcount)%结束条件1迭代20000次
c=1;
while(c<=samplenum)
for k=1:outputnums
d(k)=expectlist(c);%获得期望输出的向量
end
for i=1:inputnums
x(i)=samplelist(c);%获得输入的向量数据
end
%forward();
for j=1:hidenums
net=0.0;
for i=1:inputnums
net=net+x(i)*v(i,j);%输入层到隐层的加权和
end
y(j)=1/(1+exp(-net));%输出层处理f(x)=1/(1+exp(-x)),单极性sigmiod函数
%y(j)=1/net;%输出层处理f(x)=1/(1+exp(-x)),单极性sigmiod函数
end
for k=1:outputnums
net=0.0;
for j=1:hidenums
net=net+y(j)*w(j,k);
end
if count>=2&&error(count)-error(count-1)<=0.0001
o(k)=1/(1+exp(-net)/yyy);%平坦区加大学习率
%o(k)=1/(net/yyy);%平坦区加大学习率
else o(k)=1/(1+exp(-net));%同上
%else o(k)=1/net;%同上
end
end
%BpError(c)反馈/修改
errortmp=0.0;
for k=1:outputnums
errortmp=errortmp+(d(k)-o(k))^2;%第一组训练后的误差计算
end
errorp(c)=0.5*errortmp;%误差E=∑(d(k)-o(k))^2 * 1/2
%end
%backward();
for k=1:outputnums
yitao(k)=(d(k)-o(k))*o(k)*(1-o(k));%输出层误差偏导
end
for j=1:hidenums
tem=0.0;
for k=1:outputnums
tem=tem+yitao(k)*w(j,k);%为了求隐层偏导,而计算的求和
end
yitay(j)=tem*y(j)*(1-y(j));%隐层偏导
end
%调整各层权值
for j=1:hidenums
for k=1:outputnums
deltw(j,k)=alpha*yitao(k)*y(j);%权值w的调整量deltw(已乘学习率)
w(j,k)=w(j,k)+deltw(j,k)+a*dw(j,k);%权值调整,这里的dw=deltw(t-1),实际是对BP算法的一个改进措施--增加动量项目的是提高训练速度
dw(j,k)=deltw(j,k);
end
end
for i=1:inputnums
for j=1:hidenums
deltv(i,j)=alpha*yitay(j)*x(i);%同上deltw
v(i,j)=v(i,j)+deltv(i,j)+a*dv(i,j);
dv(i,j)=deltv(i,j);
end
end
c=c+1;
end%第二个while结束;表示一次BP训练结束
double tmp;
tmp=0.0;
for i=1:samplenum
tmp=tmp+errorp(i)*errorp(i);%误差求和
end
tmp=tmp/c;
error(count)=sqrt(tmp);%误差求均方根,即精度
if(error(count)<precision)%求另一个结束条件
break;
end
count=count+1;%训练次数加1
end%第一个while结束
error(maxcount+1)=error(maxcount);
p=1:count-1;
plot(p,error(p),'-');%显示误差
p=1:1:10;
t=p.^(-1);
%t=exp(-p);
[pn,minpn,maxpn]=premnmx(p);
simt=zeros(1,10);
%while(a<=9)
for i=1:10
x=pn(i);%获得输入的向量数据
for j=1:hidenums
net=0.0;
net=net+x*v(1,j);%输入层到隐层的加权和
y(j)=1/(1+exp(-net));%输出层处理f(x)=1/(1+exp(-x)),单极性sigmiod函数
%y(j)=1/net;%输出层处理f(x)=1/(1+exp(-x)),单极性sigmiod函数
end
net=0.0;
for k=1:hidenums
net=net+y(k)*w(k,1);
end
o=1/(1+exp(-net));
simt(i)=o;
end
% simt=postmnmx(simt,mint,maxt);
figure;
plot(p,t,'*',p,simt,'-');
8、神经网络的多输入怎么理解?
现代意义上对神经网络(特指人工神经网络)的研究一般认为从1943年美国芝加哥大学的生理学家W.S. McCulloch和W.A. Pitts提出M-P神经元模型开始,到今年正好六十年。在这六十年中,神经网络的发展走过了一段曲折的道路。1965年M. Minsky和S. Papert在《感知机》一书中指出感知机的缺陷并表示出对这方面研究的悲观态度,使得神经网络的研究从兴起期进入了停滞期,这是神经网络发展史上的第一个转折。到了20世纪80年代初,J.J. Hopfield的工作和D. Rumelhart等人的PDP报告显示出神经网络的巨大潜力,使得该领域的研究从停滞期进入了繁荣期,这是神经网络发展史上的第二个转折。
到了20世纪90年代中后期,随着研究者们对神经网络的局限有了更清楚的认识,以及支持向量机等似乎更有前途的方法的出现,“神经网络”这个词不再象前些年那么“火爆”了。很多人认为神经网络的研究又开始陷入了低潮,并认为支持向量机将取代神经网络。有趣的是,著名学者C.-J. Lin于2003年1月在德国马克斯·普朗克研究所所做的报告中说,支持向量机虽然是一个非常热门的话题,但目前最主流的分类工具仍然是决策树和神经网络。由著名的支持向量机研究者说出这番话,显然有一种特殊的意味。
事实上,目前神经网络的境遇与1965年之后真正的低潮期相比有明显的不同。在1965年之后的很长一段时期里,美国和前苏联没有资助任何一项神经网络的研究课题,而今天世界各国对神经网络的研究仍然有大量的经费支持;1965年之后90%以上的神经网络研究者改变了研究方向,而今天无论是国际还是国内都有一支相对稳定的研究队伍。实际上,神经网络在1965年之后陷入低潮是因为当时该领域的研究在一定意义上遭到了否定,而今天的相对平静是因为该领域已经走向成熟,很多技术开始走进生产和生活,从而造成了原有研究空间的缩小。
在科学研究中通常有这么一个现象,当某个领域的论文大量涌现的时候,往往正是该领域很不成熟、研究空间很大的时候,而且由于这时候人们对该领域研究的局限缺乏清楚的认识,其热情往往具有很大的盲目性。从这个意义上说,过去若干年里各领域研究者一拥而上、各种专业刊物满眼“神经网络”的风光,其实是一种畸形繁荣的景象,而对神经网络的研究现在才进入了一个比较理智、正常的发展期。在这段时期中,通过对以往研究中存在的问题和局限进行反思,并适当借鉴相关领域的研究进展,将可望开拓新的研究空间,为该领域的进一步发展奠定基础。