public class SiecNeuronowa {
private static class Neuron{
double netA; // sygnały dla neuronów w warstwie ukrytej
double netB;
double x0 = 1.0;
double x1,x2,x3; // sygnały z warstwy wejściowej
double w0a,w0b; // wagi połączeń między neuronami
double w1a, w1b;
double w2a,w2b;
double w3a,w3b;
double w0z,waz,wbz; // wagi połączeń między neuronami warstwy ukrytej a neuronem wyjściowym "Z"
Neuron(double x1,double x2,double x3
,double w0a, double w0b, double w1a,double w1b,double w2a,double w2b
,double w3a, double w3b)
{
this.w0a=w0a; //this.w0z=w0z; this.w0z=w0z;
this.x1=x1; this.w1a=w1a; this.w1b=w1b; //this.waz=waz;
this.x2=x2; this.w2a=w2a; this.w2b=w2b; //this.wbz=wbz;
this.x3=x3; this.w3a=w3a; this.w3b=w3b;
}
public double netA(){
netA = (w0a*x0)+(w1a*x1)+(w2a*x2)+(w3a*x3);
return netA;
}
public double netB(){
netB = (w0b*x0)+(w1b*x1)+(w2b*x2)+(w3b*x3);
return netB;
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Neuron A = new Neuron(0.4,0.2,0.7,0.5,0.7,0.6,0.9,0.8,0.8,0.6,0.4);
System.out.print(A.netA()+"\n"+A.netB());
}
}
To mój prototypowy program dla na razie dwóch neuronów z warstwy ukrytej.
Wyniki zgodne z przykł. książkowym - netA = 1.32; netB = 0.8;
W póżniejszym czasie przeciąże parę metod i konstruktory.
Wygląda nieżle - chyba, ale prosze o ocenę. Jestem laikiem w sprawach inżynierii oprogramowania.
Jak to ulepszyć? Oczywiście pod względem dopisania funkcji aktywacji i propagacji wstecznej.