看到教材上有这么一个例子,先做下来,练练手,很简单的代码
//
用一个神经元来实现这个功能
// 这个二维数组中,数字的意义为
/**/ /*
bias,first input,second input,target output
1, 1, 1, 1
1, 1, -1, -1
1, -1, 1, -1
1, -1, -1, -1
*/
private double [,] myandtable = new double [ 4 , 4 ] ... {
...{1,1,1,1},
...{1,1,-1,-1},
...{1,-1,1,-1},
...{1,-1,-1,-1}
} ;
// 调整权值
// 第一前向计算
// 第二后向反馈
private void AddJustWeight()
... {
//在有了输入的情况下,我们先要,初始化权值,三个输入的权值,最后一个是调整的权值
double bw,w1,w2,addjustweight=0.1 ;
bw=new Random().NextDouble()*2-1;
w1=new Random().NextDouble()*2-1;
w2=new Random().NextDouble()*2-1;
//bw=0.5;w1=0.3;w2=0.7;
Debug.WriteLine(string.Format("random right is {0},{1},{2}",bw,w1,w2));
for(int i=0;i<4;i++)
...{
double result=bw*myandtable[i,0]+w1*myandtable[i,1]+w2*myandtable[i,2];
if(result>0.0) result=1.0;
if(result!=myandtable[i,3])
...{
double delta=addjustweight*(myandtable[i,3]-result);
bw+=delta*myandtable[i,0];
w1+=delta*myandtable[i,1];
w2+=delta*myandtable[i,2];
Debug.WriteLine(string.Format("addjust right is {0},{1},{2}",bw,w1,w2));
}
}
}
// 这个二维数组中,数字的意义为
/**/ /*
bias,first input,second input,target output
1, 1, 1, 1
1, 1, -1, -1
1, -1, 1, -1
1, -1, -1, -1
*/
private double [,] myandtable = new double [ 4 , 4 ] ... {
...{1,1,1,1},
...{1,1,-1,-1},
...{1,-1,1,-1},
...{1,-1,-1,-1}
} ;
// 调整权值
// 第一前向计算
// 第二后向反馈
private void AddJustWeight()
... {
//在有了输入的情况下,我们先要,初始化权值,三个输入的权值,最后一个是调整的权值
double bw,w1,w2,addjustweight=0.1 ;
bw=new Random().NextDouble()*2-1;
w1=new Random().NextDouble()*2-1;
w2=new Random().NextDouble()*2-1;
//bw=0.5;w1=0.3;w2=0.7;
Debug.WriteLine(string.Format("random right is {0},{1},{2}",bw,w1,w2));
for(int i=0;i<4;i++)
...{
double result=bw*myandtable[i,0]+w1*myandtable[i,1]+w2*myandtable[i,2];
if(result>0.0) result=1.0;
if(result!=myandtable[i,3])
...{
double delta=addjustweight*(myandtable[i,3]-result);
bw+=delta*myandtable[i,0];
w1+=delta*myandtable[i,1];
w2+=delta*myandtable[i,2];
Debug.WriteLine(string.Format("addjust right is {0},{1},{2}",bw,w1,w2));
}
}
}