📄 bpnstraining.java
字号:
////////////////////////////////////////////////////////////// /
// 第三隐层至第二隐层的权值调整、第三隐层阈值调整计算子程序/////
////////////////////////////////////////////////////////////// /
public int Delta_H3_H2(int m,int n)
{
if(n<=1)
{
for (int k=0;k<HN;k++)
{
for (int j=0;j<HN;j++)
{
U23[k][j]=U23[k][j]-a*e_err3[k]*H2[j];//第二隐层至第三隐层层的权值调整
}
YU_HN3[k]-=a*e_err3[k];//第三隐层阈值调整
}
}
else if(n>1)
{
for (int k=0;k<HN;k++)
{
for (int j=0;j<HN;j++)
{
U23[k][j]=U23[k][j]+a*e_err3[k]*H2[j]+alpha*(U23[k][j]-old_U23[k][j]);//第二隐层至第三隐层层的权值调整
}
YU_HN3[k]-=a*e_err3[k];//第三隐层阈值调整
}
}
return 1;
}//子程序Delta_H3_H2()结束
////////////////////////////////////////////////////////////// /
// 第二隐层至第一隐层的权值调整、第二隐层阈值调整计算子程序/////
////////////////////////////////////////////////////////////// /
public int Delta_H2_H1(int m,int n)
{
if(n<=1)
{
for (int k=0;k<HN;k++)
{
for (int j=0;j<HN;j++)
{
U12[k][j]=U12[k][j]-a*e_err2[k]*H1[j];//第一隐层至第二隐层层的权值调整
}
YU_HN2[k]-=a*e_err2[k];//第二隐层阈值调整
}
}
else if(n>1)
{
for (int k=0;k<HN;k++)
{
for (int j=0;j<HN;j++)
{
U12[k][j] = U12[k][j] + a*e_err2[k]*H1[j] + alpha*(U12[k][j] - old_U12[k][j]);//第一隐层至第二隐层层的权值调整
}
YU_HN2[k] -= a*e_err2[k];//第二隐层阈值调整
}
}
return 1;
}//子程序Delta_H2_H1()结束
//////////////////////////////////////////////////////////// /
// 第一隐层至输入层的权值调整、第一隐层阈值调整计算子程序/////
//////////////////////////////////////////////////////////// /
public int Delta_H1_I(int m,int n)
{
if(n<=1)
{
for (int j = 0 ; j < HN ; j++)
{
for (int i = 0 ; i < IN ; i++)
{
U11[j][i] = U11[j][i] + a*e_err1[j]*P[i];//第一隐层至输入层的权值调整
}
YU_HN1[j] += a*e_err1[j];//第一隐层阈值调整
}
}
else if(n>1)
{
for (int j=0;j<HN;j++)
{
for (int i=0;i<IN;i++)
{
U11[j][i]=U11[j][i]+a*e_err1[j]*P[i]+alpha*(U11[j][i]-old_U11[j][i]);//第一隐层至输入层的权值调整
}
YU_HN1[j]+=a*e_err1[j];//第一隐层阈值调整
}
}
return 1;
}//子程序Delta_H1_I()结束
/////////////////////////////////
// N个样本的全局误差计算子程序 //
/////////////////////////////////
public double Err_Sum()
{
double total_err=0;
for (int m = 0 ; m < N ; m++)
{
total_err += err_m[m];//每个样本的均方误差加起来就成了全局误差
}
return total_err;
}//子程序Err_sum()结束
/////////////////////////////////
// 网络参数保存程序 //
/////////////////////////////////
public void savequan() throws IOException {
FileWriter fww = new FileWriter("anns_ws.txt");//建立FileWriter对象,并实例化为fw
BufferedWriter bww = new BufferedWriter(fww); //建立BufferedWriter对象,并实例化为bw
DecimalFormat fod = new DecimalFormat("0.000");
for(int i=0;i<HN;i++)
{
for(int j=0;j<IN;j++)
{
bww.write(String.valueOf(fod.format(U11[i][j])) + " ");
System.out.print(String.valueOf(fod.format(U11[i][j]))+" ");
}
bww.newLine();
}//取得输入层至第一隐层权值
for(int i1=0;i1<HN;i1++)
{
for(int j1=0;j1<HN;j1++)
{
bww.write(String.valueOf(fod.format(U12[i1][j1])) + " ");
System.out.print(String.valueOf(fod.format(U12[i1][j1])) +" ");
}
bww.newLine();
System.out.println(" ");
}//取得第一隐层至第二隐层权值
for(int i2=0;i2<HN;i2++)
{
for(int j2=0;j2<HN;j2++)
{
bww.write(String.valueOf(fod.format(U23[i2][j2])) + " ");
System.out.print(String.valueOf(fod.format(U23[i2][j2]))+" ");
}
bww.newLine();
System.out.println(" ");
}//取得第二隐层至第三隐层权值
for(int j3=0;j3<HN;j3++)
{
bww.write(String.valueOf(fod.format(V[j3])) + " ");
System.out.print(String.valueOf(fod.format(V[j3])) + " ");
}//取得第三隐层至输出层权值
bww.newLine();
System.out.println(" ");
for(int k1=0;k1<HN;k1++)
{
bww.write(String.valueOf(fod.format(YU_HN1[k1])) + " "); //隐层阈值写入文本
System.out.print(String.valueOf(fod.format(YU_HN1[k1])) + " ");
}
//outYuFile<<"\n第二隐层的阈值为:\n";
bww.newLine();
System.out.println(" ");
for(int k2=0;k2<HN;k2++)
{
bww.write(String.valueOf(fod.format(YU_HN2[k2])) + " "); //隐层阈值写入文本
System.out.print(String.valueOf(fod.format(YU_HN2[k2])) + " ");
}
//outYuFile<<"\n第三隐层的阈值为:\n";
bww.newLine();
System.out.println(" ");
for(int k3=0;k3<HN;k3++)
{
bww.write(String.valueOf(fod.format(YU_HN3[k3])) + " "); //隐层阈值写入文本
System.out.print(String.valueOf(fod.format(YU_HN3[k3])) + " ");
}
//outYuFile<<"输出层的阈值为:\n";
bww.newLine();
System.out.println(" ");
bww.write(String.valueOf(fod.format(YU_ON)) + " "); //输出层阈值写入文本
System.out.print(String.valueOf(fod.format(YU_ON)) + " ");
bww.newLine();
System.out.println(" ");
//outQuanFile.close();
bww.close();
}
/////////////////////////////////
// 文档读取程序 //
/////////////////////////////////
public void getnetpara() throws IOException {
//FileWriter fwgw = new FileWriter("anns_ws001.txt");//建立FileReader对象,并实例化为fr
//BufferedWriter bwgw = new BufferedWriter(fwgw); //建立BufferedReader对象,并实例化为br
FileReader frgw = new FileReader("anns_ws006.txt"); //建立FileReader对象,并实例化为fr
BufferedReader brgw = new BufferedReader(frgw); //建立BufferedReader对象,并实例化为br
String s ;
for(int i=0;i<HN;i++)
{
s = brgw.readLine();
String [] ss = s.split(" ");
for(int j=0;j<IN;j++)
{
U11[i][j] = Double.valueOf(ss[j]);
System.out.print(ss[j] + " ");
}
System.out.println(" ");
}//取得输入层至第一隐层权值
for(int i1=0;i1<HN;i1++)
{
s = brgw.readLine();
String [] ss = s.split(" ");
for(int j1=0;j1<HN;j1++)
{
U12[i1][j1] = Double.valueOf(ss[j1]);
System.out.print(ss[j1] + " ");
}
}//取得第一隐层至第二隐层权值
for(int i2=0;i2<HN;i2++)
{
s = brgw.readLine();
String [] ss = s.split(" ");
for(int j2=0;j2<HN;j2++)
{
U23[i2][j2] = Double.valueOf(ss[j2]);
System.out.print(ss[j2] + " ");
}
System.out.println(" ");
}//取得第二隐层至第三隐层权值
s = brgw.readLine();
String [] ss = s.split(" ");
for(int j3=0;j3<HN;j3++)
{
V[j3] = Double.valueOf(ss[j3]);
System.out.print(ss[j3] + " ");
}//取得第三隐层至输出层权值
System.out.println(" ");
s = brgw.readLine();
ss = s.split(" ");
for(int k1=0;k1<HN;k1++)
{
YU_HN1[k1] = Double.valueOf(ss[k1]); //隐层阈值写入文本
System.out.print(ss[k1] + " ");
}
//outYuFile<<"\n第二隐层的阈值为:\n";
System.out.println(" ");
s = brgw.readLine();
ss = s.split(" ");
for(int k2=0;k2<HN;k2++)
{
YU_HN2[k2] = Double.valueOf(ss[k2]); //隐层阈值写入文本
System.out.print(ss[k2] + " ");
}
//outYuFile<<"\n第三隐层的阈值为:\n";
System.out.println(" ");
s = brgw.readLine();
ss = s.split(" ");
for(int k3=0;k3<HN;k3++)
{
YU_HN3[k3] = Double.valueOf(ss[k3]); //隐层阈值写入文本
System.out.print(ss[k3] + " ");
}
//outYuFile<<"输出层的阈值为:\n";
System.out.println(" ");
s = brgw.readLine();
ss = s.split(" ");
YU_ON = Double.valueOf(ss[0]); //输出层阈值写入文本
System.out.print(ss[0] + " ");
System.out.println(" ");
//outQuanFile.close();
brgw.close();
}
/*public int GetTrainingData()
{
for(int m=0;m<N;m++)
{
for(int i=0;i<IN;i++)
{
GetTrainingData >> Study_Data[m].input[i]; //取得输入数据
}
for(int j=0;j<ON;j++)
{
GetTrainingData >> Study_Data[m].teach[j]; //取得输出数据
}
}
GetTrainingData.close();
return 1;
}
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -