kramann.info
© Guido Kramann

Login: Passwort:










COACH2
1 Planung
2 Architektur
3 Anzeige
4 EEPROM
5 I2C
..5.1 MasterSendByte
..5.2 MasterSend2Bytes
..5.3 MasterReceiveByte
..5.4 MasterReceive2Bytes
6 UART
7 DFT
8 FFT
9 Planung2
10 Klassen
..10.1 AnzeigeTaster
..10.2 RS232
..10.3 MotorServo
..10.4 Drehgeber
..10.5 Sensor
..10.6 Funk
11 Adaption
..11.1 Programmiertechnik
..11.2 Evoopt
12 Fuzzy
..12.1 Uebungsaufgabe
..12.2 Fuzzygroesse
..12.3 Fuzzyset
..12.4 Lookuptable
13 Skript
..13.1 Funkkorrektur
..13.2 Skriptsprachen
..13.3 Anforderungen
..13.4 Agentensysteme
..13.5 Implementierung
..13.6 Experimente
14 Gesamtkonzept
..14.1 Skripterweiterung
..14.2 Makroverhalten
67 Echtzeitsysteme
..67.1 Einfuehrung
....67.1.1 Echtzeit
....67.1.2 Korrektheit
....67.1.3 Hardware
....67.1.4 Ziele
....67.1.5 Synchronprogramm
..67.2 Threads
....67.2.1 Java
....67.2.2 Synchronisierung
..67.3 COACH
....67.3.1 Kaskadenregler
....67.3.2 Zeitebene1
....67.3.3 Zeitebene2
....67.3.4 Zeitebene3
....67.3.5 Puck
....67.3.6 Puckschwarm
..67.4 RTAIlab
....67.4.1 Slax
....67.4.1 USB_Stick
....67.4.2 Sinus
..67.5 Semaphor
....67.5.1 Laufkatze
....67.5.2 Java
....67.5.3 Semaphor
..67.6 Audio
....67.6.1 wav
....67.6.2 Linux
..67.7 Lookup
....67.7.1 Fuzzy
....67.7.2 PWM
..67.8 NeuronaleNetze
....67.8.1 Neuron
....67.8.2 Backpropagation
....67.8.3 Umsetzung
....67.8.4 Winkelerkennung
..67.9 Internetprogrammierung
....67.9.1 Codegenerierung
....67.9.2 PHP_Programmierung
....67.9.3 PHP_OOP
....67.9.4 Java
....67.9.5 UDP
..67.10 DFT
..67.11 FFT
..67.12 Zustandsmaschine
..67.13 Fuzzy
....67.13.1 Fuzzylogik
....67.13.2 FuzzyRegler
....67.13.3 Uebung9
....67.13.5 Softwareentwicklung
......67.13.5.1 AgileSoftwareentwicklung
......67.13.5.2 FuzzyRegler
......67.13.5.3 Uebung
....67.13.6 Umsetzung
......67.13.6.1 FuzzyRegler
......67.13.6.2 Simulation
......67.13.6.3 Optimierung
......67.13.6.4 Uebung
....67.13.7 Haengependel
......67.13.7.1 Haengependel
......67.13.7.2 Simulation
......67.13.7.3 FuzzyRegler
......67.13.7.4 Optimierer
......67.13.7.5 Genetisch
....67.13.8 Information
....67.13.9 Energie

67.8.1 Einzelnes Neuron

  • Das am häufigsten eingesetzte Modell für eine Neuron ist das s.g. Perzeptron.
  • Hier kann es eine beliebige Anzahl von Eingängen xk geben, die mit den Gewichten wk multipliziert werden.
  • Die Summe der gewichteten Eingänge liefert das Argument für eine sigmoide Funktion, deren Ergebnis z.B. der Ausgang des i-ten Neurons oi ist.
Durch Veränderungen der Gewichte wk und d "lernt" ein Neuronales Netz.
Schema eines Perzeptrons

Bild 67.8.1-1: Schema eines Perzeptrons

  • Als sigmoide Funktion werden teilweise abschnittsweise Geraden verwendet.
  • Häufig kommt die folgende Funktion zum Einsatz:
Beispiel einer sigmoiden Funktion

Bild 67.8.1-2: Beispiel einer sigmoiden Funktion

  • o ist dabei der Ausgang.
  • u ist die Summe der gewichteten Eingänge des Neurons.
  • Je größer der positive Parameter d ist, desto mehr nähert sich die Funktion einer Rechteckfunktion.

Umsetzung der Antivalenzschaltung durch geschickte Wahl der Gewichte

  • Im folgenden soll gleich eine Umsetzung einer logischen Antivalenzschaltung mit Hilfe der folgenden Neuronalen Struktur umgesetzt werden:
Neuronales Netz, mit dessen Hilfe eine logische Antivalenzverknüpfung realisiert werden soll.

Bild 67.8.1-3: Neuronales Netz, mit dessen Hilfe eine logische Antivalenzverknüpfung realisiert werden soll.

  • Idee zur Verteilung der Gewichte...
  • Vom Eingang zur ersten Schicht:
  • w0 = 1
  • w1 = -1
  • w2 = -1
  • w3 = 1
  • Vom Eingang zur zweiten Schicht:
  • w4 = 1
  • w5 = 1
  • Bei Neuronalen Netzen wird häufig zur "Belernung" der Backpropagation-Algorithmus eingesetzt.
  • Bei diesem Algorithmus wird der Fehler am Ausgang nach bestimmten Regeln anteilig Schicht für Schicht negativ auf die Gewichte verteilt.
  • Zunächst verwenden wir aber was wir haben:
  • Einen Genetischen Algorithmus.
Übung
  • Das folgende Java-Programm repräsentiert obiges Neuronale Netz und enthält auch gleich eine Fehlerfunktion.
  • Testen Sie die Güte obiger Gewichtsparameterverteilung in Bezug auf eine Realisierung des Antivalenzgatters.
  • Optimieren Sie das Neuronale Netz automatisiert.
  • Ziehen Sie eine weitere Schicht mit zwei Neuronen ein und optimieren Sie neu.
public class Neuro1
{
    public static double[] ww = new double[6];
    public static double[] dd = new double[3];
    public static double sigmoid(double u, double d)
    {
        return 1.0 / ( 1.0 + Math.exp(-d*u) );
    }
    public static double netz(double in0, double in1,double[] w, double[] d)
    {
        double n10 = sigmoid(in0*w[0]+in1*w[3],d[0]);
        double n11 = sigmoid(in1*w[2]+in0*w[1],d[1]);
        double n20 = sigmoid(n10*w[4]+n11*w[5],d[2]);
        return n20;
    }
    public static double berechneFehler(double[] w, double[] d)
    {
        double ausgang;      
        double fehler = 0.0;
        ausgang = netz(0.0,0.0,w,d);
        //System.out.println("in: 0 0 sollout: 0, istwert:"+ausgang);
        fehler += (ausgang-0.0)*(ausgang-0.0);
        ausgang = netz(1.0,0.0,w,d);
        //System.out.println("in: 1 0 sollout: 1, istwert:"+ausgang);
        fehler += (ausgang-1.0)*(ausgang-1.0);
        ausgang = netz(0.0,1.0,w,d);
        //System.out.println("in: 0 1 sollout: 1, istwert:"+ausgang);
        fehler += (ausgang-1.0)*(ausgang-1.0);
        ausgang = netz(1.0,1.0,w,d);
        //System.out.println("in: 1 1 sollout: 0, istwert:"+ausgang);
        fehler += (ausgang-0.0)*(ausgang-0.0);
        return fehler;
    }
    public static double berechneFehler(double[] param)
    {
        for(int i=0;i<6;i++)
            ww[i] = 100.0*param[i]-50.0;
        for(int i=0;i<3;i++)
            dd[i] = 100.0*param[i+6]-50.0;
        return berechneFehler(ww,dd);
    }
    public static void main(String[] args)
    {
        double[] w = new double[]
        {1.0,-1.0,-1.0,1.0,1.0,1.0};
        double[] d = new double[]
        {1.0, 1.0, 1.0};
        System.out.println("Fehler = "+berechneFehler(w,d));
    }
}

Code 67.8.1-1: Java-Implementierung eines Neuronalen Netzes.