⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bpnstraining.java

📁 java编写的bp神经网络训练程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:


//////////////////////////////////////////////////////////////	/
//	第三隐层至第二隐层的权值调整、第三隐层阈值调整计算子程序/////
//////////////////////////////////////////////////////////////	/
	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 + -