BP神经网络算法程序作业

任务:对于三个0或1的输入,得到一个输出,样本如下:0000.90010.10100.10110.91000.11010.91100.91110.1分别用下面程序调通上述... 任务: 对于三个0或1 的输入,得到一个输出,样本如下:
0 0 0 0.9
0 0 1 0.1
0 1 0 0.1
0 1 1 0.9
1 0 0 0.1
1 0 1 0.9
1 1 0 0.9
1 1 1 0.1
分别用下面程序调通上述任务,另外在此基础上修改网络的隐藏层数,重新完成任务。

1 在程序中循环调用下面的程序:
input_P(m);
input_T(m);
IN_OUT();
Err_O_H(m);
Err_H_I();
Delta_O_H(n,study);
Delta_H_I(n,study);
saveWV();
所以就按照这个过程分析下程序吧。
2 /*第m个学习样本输入子程序*/ 输入数据的赋植
input_P(int m)
{ int i,j;
for(i=0;i<IN;i++) {P[i]=Study_Data[m].input[i];}
return 1;
}
3 /*第m个样本教师信号子程序*/ 输出数据的赋植
input_T(int m)
{int k;
for(k=0;k<ON;k++) {T[k]=Study_Data[m].teach[k];}
return 1;
}
4 /*求净输入,输出*/
IN_OUT()
{
float sigma1,sigma2;
int i,j,ii,jj;
for(i=0;i<HN;i++) { 输入层---》隐层
sigma1=0.0;
for(j=0;j<IN;j++)
{sigma1+=W[i][j]*P[j];} /*求隐层内积*/
X[i]=sigma1+YU_HN[i]; 和阀值想加
H[i]=1.0/(1.0+exp(-X[i])); 计算输出
}
for(ii=0;ii<ON;ii++) { 隐层-----》 输出层
sigma2=0.0;
for(jj=0;jj<HN;jj++)
{sigma2+=V[ii][jj]*H[jj];}
Y[ii]=sigma2+YU_ON[ii];
O[ii]=1.0/(1.0+exp(-Y[ii]));
}
return 1;
}
5 /*误差分析*/
/*δk*/
int Err_O_H(int m)
{int k;
float abs_err[ON];
float sqr_err=0.0;
for (k=0;k<ON;k++) {
abs_err[k]=T[k]-O[k];
sqr_err+=(abs_err[k])*(abs_err[k]);
d_err[k]=abs_err[k]*O[k]*(1.0-O[k]); ????????有待于弄清楚。看了后面明白了,是输出层的误差反馈,
err_m[m]=sqr_err/2;
}
return 1;
}
6 int Err_H_I()
{
int j,k;
float sigma;
for(j=0;j<HN;j++) {
sigma=0.0;
for(k=0;k<ON;k++)
{sigma+=d_err[k]*V[k][j];}
e_err[j]=sigma*H[j]*(1-H[j]); 隐层的误差反馈
}
return 1;
}
7 /*更新权值,阈值*/
/*输出层*/
int Delta_O_H(int n,int study)
{int k,j;
if((n<=1)||(study=1))
{
for (k=0;k<ON;k++) {
for (j=0;j<HN;j++)
{V[k][j]=V[k][j]+a*d_err[k]*H[j];}
YU_ON[k]+=a*d_err[k];
}
}
else
{
for (k=0;k<ON;k++) {
for (j=0;j<HN;j++)
{V[k][j]=V[k][j]+(1.0-alpha)*a*d_err[k]*H[j]+alpha*old_V[k][j];}
YU_ON[k]+=a*d_err[k];
}
}
return 1;
}
9
/*隐层*/
Delta_H_I(int n,int study)
{int i,j;
if((n<=1)||(study=1))
{
for (j=0;j<HN;j++) {
for (i=0;i<IN;i++)
{W[j][i]=W[j][i]+b*e_err[j]*P[i];}
YU_HN[j]+=b*e_err[j];
}
}
else
{
for(j=0;j<HN;j++) {
for(i=0;i<IN;i++)
{W[j][i]=W[j][i]+(1.0-alpha)*b*e_err[j]*P[i]+alpha*old_W[j][i];}
YU_HN[j]+=b*e_err[j];
}
}
return 1;
}
哪位大哥帮帮忙
展开
 我来答
挥赣匮彝瞎端C6
2009-12-21 · TA获得超过102个赞
知道答主
回答量:92
采纳率:100%
帮助的人:30.4万
展开全部
不需这么麻烦,直接调用工具箱中的神经网络模块即可

你要做的是确定输入、隐层、输出的节点数、激励函数即可。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2009-12-21
展开全部
咱们同班,我们同求
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式