📄 nn.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.io.*;
import java.net.*;
import java.util.Properties;
public class nn extends Applet {
Choice netChoice;//网络模型
Choice inNumChoice;
Choice hideNumChoice;
Choice outNumChoice;
Checkbox chkbox_save;
int task;
BpNet bpnet;
RbfNet rbfnet;
boolean clear;
int row;
int left;
int bottom;
int top;
double p1[][];//训练样本集输入
double t1[][];//训练样本集输出
double p2[][];//模拟数据输入
int inNum;
int hideNum;
int outNum;
int sampleNum;
int simNum;
PrintStream ps;
int epochs;
TextArea txtarea;
public void init() {
left=50;
top=80;
bottom=300;
clear=false;
row=0;
epochs=70001;
setLayout(new BorderLayout());
Panel topPanel=new Panel();
Panel bottomPanel=new Panel();
netChoice=new Choice();
netChoice.addItem("BP network");
netChoice.addItem("LBG clustering");
netChoice.addItem("RBF network");
netChoice.addItemListener(new ItemListener(){
public void itemStateChanged (ItemEvent event){
repaint();
}
});
topPanel.add(netChoice);
Label lab_inNum=new Label("输入节点数:");
topPanel.add(lab_inNum);
inNumChoice=new Choice();
for (int i=1;i<10;i++)
inNumChoice.addItem(String.valueOf(i));
topPanel.add(inNumChoice);
Label lab_hideNum=new Label("隐含节点数:");
topPanel.add(lab_hideNum);
hideNumChoice=new Choice();
for (int i=1;i<10;i++)
hideNumChoice.addItem(String.valueOf(i));
hideNumChoice.select("3");
topPanel.add(hideNumChoice);
Label lab_outNum=new Label("输出节点数:");
topPanel.add(lab_outNum);
outNumChoice=new Choice();
for (int i=1;i<10;i++)
outNumChoice.addItem(String.valueOf(i));
topPanel.add(outNumChoice);
Button button_load=new Button("LoadData");
button_load.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
task=10;
repaint();
}
});
topPanel.add(button_load);
Button button_train=new Button("Train");
button_train.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
task=1;
repaint();
}
});
topPanel.add(button_train);
Button button_sim=new Button("Simulation");
button_sim.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
task=2;
repaint();
}
});
topPanel.add(button_sim);
Button printButton=new Button("print...");
printButton.setForeground(Color.black);
//p.add(printButton);
printButton.addActionListener(new ActionListener(){
public void actionPerformed (ActionEvent event){
printComponents(nn.this);
}
});
topPanel.add(printButton);
chkbox_save=new Checkbox("save data");
// bottomPanel.add(chkbox_save);
add("North",topPanel);
txtarea=new TextArea(12,105);
bottomPanel.add(txtarea);
add("South", bottomPanel);
}
public void paint(Graphics g){
setBackground(Color.white);
switch (task)
{
case 1:if (netChoice.getSelectedItem()=="BP network")
drawBpTrain(g);
else if (netChoice.getSelectedItem()=="LBG clustering")
drawLBG(g);
else if (netChoice.getSelectedItem()=="RBF network")
drawRbfTrain(g);
break;
case 2:if (netChoice.getSelectedItem()=="BP network")
drawBpSim(g);
else if (netChoice.getSelectedItem()=="RBF network")
drawRbfSim(g);
break;
case 10:loadData(g);
break;
}//end switch
task=0;
}
public void drawBpTrain(Graphics g){
int time=1000;
double etime=1000.0;
//g.drawString(netChoice.getSelectedItem(),300,300);
// double p1[][]={{0.1},{0.2},{0.3},{0.4},{0.5}};
// double t1[][]={{0.12},{0.22},{0.32},{0.42},{0.52}};
bpnet=new BpNet(Integer.parseInt(inNumChoice.getSelectedItem()),Integer.parseInt(hideNumChoice.getSelectedItem()),Integer.parseInt(outNumChoice.getSelectedItem()));
//bpnet=new BpNet(2,3,1);
//绘制误差曲线坐标
g.setColor(getBackground());
g.fillRect(0,0,left,bottom);
g.setColor(getForeground());
g.drawLine(left,bottom,left+1000,bottom);
g.drawLine(left,bottom,left,0);
for (int i=0;i<epochs;i++)
{
bpnet.train(p1,t1,sampleNum);
if (i==0)
{ //System.out.println(String.valueOf(bpnet.e));
etime=(int)(150/bpnet.e);
//System.out.println(String.valueOf(etime));
for (int m=0;m<=bottom/20-3;m++)
{
g.drawLine(left,bottom-20*m,left-3,bottom-20*m);
g.drawString(String.valueOf((int)(m*20/etime*1000)/1000.0),left-30,bottom-20*m);
}
}
if ((i/100)*100==i)
g.setColor(Color.blue);
g.drawLine(left+i/100,bottom-(int)(bpnet.e*etime),left+i/100,bottom-(int)(bpnet.e*etime)-1);
if ((i/10000)*10000==i){
g.setColor(Color.black);
g.drawLine(left+i/100,bottom,left+i/100,bottom+3);
g.drawString(String.valueOf(i),left+i/100,bottom+15);
}
}
txtarea.appendText("-----------------------------------\n");
txtarea.appendText("BpNet\n");
txtarea.appendText("-----------------------------------\n");
txtarea.appendText("inNum:"+String.valueOf(bpnet.inNum)+"\n");
txtarea.appendText("hideNum:"+String.valueOf(bpnet.hideNum)+"\n");
txtarea.appendText("outNum:"+String.valueOf(bpnet.outNum)+"\n");
txtarea.appendText("in_rate:"+String.valueOf(bpnet.in_rate)+"\n");
txtarea.appendText("w\n");
for (int i=0;i<bpnet.inNum;i++)
for (int j=0;j<bpnet.hideNum;j++)
txtarea.appendText("w("+String.valueOf(i)+","+String.valueOf(j)+")"+String.valueOf(bpnet.w[i][j])+"\n");
txtarea.appendText("w1\n");
for (int i=0;i<bpnet.hideNum;i++)
for (int j=0;j<bpnet.outNum;j++)
txtarea.appendText("w1("+String.valueOf(i)+","+String.valueOf(j)+")"+String.valueOf(bpnet.w1[i][j])+"\n");
txtarea.appendText("b1\n");
for (int i=0;i<bpnet.hideNum;i++)
txtarea.appendText("b1("+String.valueOf(i)+")"+String.valueOf(bpnet.b1[i])+"\n");
txtarea.appendText("b2\n");
for (int i=0;i<bpnet.outNum;i++)
txtarea.appendText("b2("+String.valueOf(i)+")"+String.valueOf(bpnet.b2[i])+"\n");
txtarea.appendText("-----------------------------------\n");
if (chkbox_save.getState())
{ try{
ps=null;
//ps=new PrintStream(new FileOutputStream(getCodeBase()+"nnsave.txt"));
ps=new PrintStream(new FileOutputStream("nnsave.txt"));
ps.println("-----------------------------------");
ps.println("BpNet");
ps.println("-----------------------------------");
ps.println("inNum:"+String.valueOf(bpnet.inNum));
ps.println("hideNum:"+String.valueOf(bpnet.hideNum));
ps.println("outNum:"+String.valueOf(bpnet.outNum));
ps.println("w");
for (int i=0;i<bpnet.inNum;i++)
for (int j=0;j<bpnet.hideNum;j++)
ps.println("w("+String.valueOf(i)+","+String.valueOf(j)+")"+String.valueOf(bpnet.w[i][j]));
ps.println("w1");
for (int i=0;i<bpnet.hideNum;i++)
for (int j=0;j<bpnet.outNum;j++)
ps.println("w1("+String.valueOf(i)+","+String.valueOf(j)+")"+String.valueOf(bpnet.w1[i][j]));
ps.println("b1");
for (int i=0;i<bpnet.hideNum;i++)
ps.println("b1("+String.valueOf(i)+")"+String.valueOf(bpnet.b1[i]));
ps.println("b2");
for (int i=0;i<bpnet.outNum;i++)
ps.println("b2("+String.valueOf(i)+")"+String.valueOf(bpnet.b2[i]));
ps.println("-----------------------------------");
}
catch(Exception e){}
}//end if
}//end drawbptarin
public void drawBpSim(Graphics g){
double p21[]=new double[inNum];
double t2[]=new double[outNum];
if (chkbox_save.getState())
{ try{
ps=null;
//ps=new PrintStream(new FileOutputStream(getCodeBase()+"nnsave.txt"));
ps=new PrintStream(new FileOutputStream("nnsave.txt"));
ps.println("-------------------------------");
ps.println("BpNet Simulation Results:");
ps.println("-------------------------------");
}
catch(Exception e){}
}
txtarea.appendText("-------------------------------\n");
txtarea.appendText("BpNet Simulation Results:\n");
txtarea.appendText("-------------------------------\n");
for (int n=0;n<simNum;n++){
for(int i=0;i<inNum;i++)
p21[i]=p2[n][i];
if (row>10)
{
row=0;
cleartext(g);
}
t2=bpnet.sim(p21);
row++;
//g.drawString("inputValue:",left,bottom+20+row*20);
txtarea.appendText("inputvalue:\n");
for(int i=0;i<bpnet.inNum;i++)
//g.drawString(String.valueOf(p21[i]),left+100+80*i,bottom+20+row*20);
txtarea.appendText(String.valueOf(p21[i])+"\n");
row++;
//g.drawString("outputValue:",left,bottom+20+row*20);
txtarea.appendText("outputvalue:\n");
for(int i=0;i<bpnet.outNum;i++)
//g.drawString(String.valueOf(t2[i]),left+100+80*i,bottom+20+row*20);
txtarea.appendText(String.valueOf(t2[i])+"\n");
if (chkbox_save.getState())
{ try{
ps.println("input:");
for(int i=0;i<bpnet.inNum;i++)
ps.println(String.valueOf(p21[i]));
ps.println("output:");
for(int i=0;i<bpnet.outNum;i++)
ps.println(String.valueOf(t2[i]));
}
catch(Exception e){}
}
}//end for n
}//end drawbpsim
public void drawRbfTrain(Graphics g){
int time=1000;
double etime=100.0;
rbfnet=null;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -