神经网络

来源:百度知道 编辑:UC知道 时间:2024/07/01 01:04:12
我已经训练并保存 我该如何使用他?即如何根据我的输入得到输出。
PS:程序是网上的,所以自己不太懂。
inputNums=3; %输入层节点
outputNums=3; %输出层节点
hideNums=10; %隐层节点数
maxcount=20000; %最大迭代次数
samplenum=3; %一个计数器,无意义
precision=0.001; %预设精度
yyy=1.3; %yyy是帮助网络加速走出平坦区
alpha=0.01; %学习率设定值
a=0.5;
error=zeros(1,maxcount+1); %error数组初始化;目的是预分配内存空间
errorp=zeros(1,samplenum);%同上
v=rand(inputNums,hideNums); %3*10;v初始化为一个3*10的随机归一矩阵; v表输入层到隐层的权值
deltv=zeros(inputNums,hideNums); %3*10;内存空间预分配
dv=zeros(inputNums,hideNums); %3*10;
w=rand(hideNums,outputNums); %10*3;同V
deltw=zeros(hideNums,outputNums);%10*3
dw=zeros(hideNums,outputNums); %10*3
samplelist=[0.1323,0.323,-0.132;0.321,0.2434,0.456;-0.6546,-0.3242,0.3255]; %3*3;指定输入值3*3(实为3个向量)
expectlist=[0.5435,0.422,-0.642;0.1,0.562,0.5675;-0.6464,-0.756,0.11]; %3*3;期望输出

用save * net命令保存,*是你起的网络名,然后会生成个*.mat文件,用的时候双击它,给输入就可以给出输出了。

我也知道输出就是上面的o(k),不过它是一个数值,被循环时逐个替换了。下面接着程序:
%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 3.15
%end
%Backward();
for k=1:outputNums
yitao(k)=(d(k)-o(k))*o(k)*(1-o(k)); %输入层误差偏导 3.25a
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(已乘学习率)3.26a
w(j,k)=w(j,k)+deltw(j,k)+a*dw(j,k);%权值调整,这里的dw=dletw(t-1),实际是对BP算法的一个
dw(j,k)=deltw(j,k);