- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 50

Thema: lernfähiger Lininenfolger mit KI

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Natürlich kann die Steuerung des linken und rechten Motors verfeinert werden. Indem man, richtig von HaWe dargestellt, mehr Ausgangsneuronen verwendet.

    Das, was vorgestellt wurde, ist ein sehr einfacher Lernmechanismus, bei dem die möglichen Eingangszustände vorgegeben sind.
    Soll das Netz selbstständig lernen, zum Beispiel nur mit der Information, ob das Verhalten "richtig" oder "falsch" war, wird es komplizierter.
    Denn in diesem Fall hat das KNN keine Vorgabe, welche Fälle es, mit welchem Ergebnis, trainieren muss. Das Wissen darüber (also die Wahrheitstabelle)
    könnte wieder von einem KNN eingespeist werden. Auch das Wissen, welcher Ausgang dann wann aktiviert werden muss.
    Anders könnte aber auch eine Zielvorgabe formuliert werden, die beschreibt, dass das Ergebnis immer dann richtig ist, wenn beide Eingangsneuronen
    nicht aktiviert (0) sind, also kein Signal bekommen. Dieses Traingsverfahren könnte ewig dauern, weil der Roboter dann durch Zufall herausfinden muss,
    wann die Linie überfahren wurde und wann sie sich zwischen den Sensoren befindet. Das kann auch dazu führen, dass sich der Roboter sehr weit von
    der Linie entfernt und erst nach einigen Minuten oder Stunden die Linie erneut überquert. Womöglich könnte so ein unkoordiniertes Training dann
    Tage, Wochen oder Monate dauern. Vielleicht ist es aber auch so, dass das KNN die Aufgabe gar nicht lösen kann, weil die Linie verloren wurde
    und dann das Herumdrehen an den Gewichten, der einzelnen Neuronen, zu keinem Ergebnis führen kann oder zu einem falschen Ergebnis. Denn das
    beide Lichtsensoren "0" liefern (Bedingung, die oben genannt wurde), wäre auch dann bewerkstelligt, wenn der Roboter ganz einfach die Linie nicht überquert.
    Er könnte also einfach lernen, sich von der Linie fernzuhalten, ohne ihr zu folgen.

    Würde das KNN nach der Wahrheitstabelle trainiert und der Roboter würde die Linie verlieren, würde er einfach weiter geradeaus fahren.

  2. #2
    HaWe
    Gast
    Ich hatte, wie gesagt, dein "langsam oder stop" schlicht falsch verstanden, es war für mich unscharf bzw. missverständlich ausgedrückt.
    Zum Workshop:
    Ich finde nach wie vor, dass ein Linienfolger zu schwierig als Anfängerprojekt ist. Speziell ist es mir selber zu schwierig, eine Motorsteuerung per KI für Anfänger herunterzubrechen, sowohl (einfach) per Hard-Coding der Lernsets als auch (erst recht) für das echte autonome Muster-Training durch Abfahren von Linien samt manuell gemachter Korrekturen.
    Selbst als Fortgeschrittenenprojekt ist letzteres recht anspruchsvoll, wenn es Sinn machen soll (hatte ich oben auch bereits grob umrissen).
    Ich finde vielmehr, man sollte bei der Mustererkennung aus Mxts Link aufsetzen und als Anfängerprojekt einfach versuchen, andere Muster zu trainieren und dann multipel zu erweitern.

    Ich habe meine diesbezüglichen Netze bereits konstruiert (und auch verlinkt).

    Deine Erfahrung in Programmierung in allen Ehren, aber du hast bestimmt noch keine 10 Jahre selber verschiedene Netze programmiert und auch getestet und optimiert.
    Aber wie Konfuzius sagt:
    Der Mensch hat dreierlei Wege, klug zu Handeln;
    erstens durch Nachdenken, das ist das Edelste,
    zweitens durch Nachahmen, das ist das Leichteste,
    und drittens durch Erfahrung, das ist das Bitterste.
    Ich habe von daher überhaupt keine Probleme damit, wenn du deine eigene Erfahrung sammeln willst.
    Geändert von HaWe (14.12.2019 um 12:51 Uhr) Grund: typo

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Zitat Zitat von HaWe Beitrag anzeigen
    Ich habe von daher überhaupt keine Probleme damit, wenn du deine eigene Erfahrung sammeln willst.
    Offenbar hast Du es nicht verstanden, dass DU das tun solltest, uns das zu vermitteln.
    Du machst es nicht.

    Also gibt es zwei Möglichkeiten:
    1. das Thema bleibt hier unbehandelt
    2. wir beschäftigen uns selbst damit

    Ich hatte auch schon mal Fragen gestellt, die ich nun teilweise selbst beantworten kann. Warum war Dir das nicht möglich? Weil Du das Wissen nicht hast?



    selber verschiedene Netze programmiert und auch getestet und optimiert
    Nein muss ich auch nicht. Ich will nicht jahrelang irgend etwas kopieren und damit herummachen. Das kann ich zu Anfang tun.

    Falls es um Wissendiskussionen geht, habe ich hier und da schon gewissen Spielraum geschaffen, wo man diskutieren könnte, da vermisse ich aber Deine Teilnahme.

    Deine Erfahrung in Programmierung in allen Ehren, ..
    In der Äußerung zeigt sich, dass Du die nicht einzuschätzen vermagst.



    So, HaWe. Um es zu beweisen, dass Du etwas davon verstehst, bevor wir hier sinnlos weiter diskutieren, möchte ich jetzt, dass Du uns erklärst, auf welchen Prinzipien des Rumguckers Code funktioniert und welche Aussichten auf eine Intelligenz er, jenseits eines XOR-Problemlösung, hat.

    Ich bin jetzt kurz davor, gar nichts mehr zum Thema KNN auszuführen. Und Deine unquallifizierten Äußerungen zukünftig zu ignorieren oder gleich ganz hier weg zu bleiben.

    Bitte zeige jetzt, was Du auf dem Kasten hast!
    Nochmal die Fragestellung: dass Du uns erklärst, auf welchen Prinzipien des Rumguckers Code funktioniert und welche Aussichten auf eine Intelligenz er, jenseits eines XOR-Problemlösung, hat




    MfG
    Geändert von Moppi (14.12.2019 um 13:15 Uhr)

  4. #4
    HaWe
    Gast
    Offenbar hast Du es nicht verstanden, dass DU das tun solltest, uns das zu vermitteln.
    Du machst es nicht.
    Also gibt es zwei Möglichkeiten:
    1. das Thema bleibt hier unbehandelt
    2. wir beschäftigen uns selbst damit
    Ich hatte auch schon mal Fragen gestellt, die ich nun teilweise selbst beantworten kann. Warum war Dir das nicht möglich? Weil Du das Wissen nicht hast?
    selber verschiedene Netze programmiert und auch getestet und optimiert
    Nein muss ich auch nicht. Ich will nicht jahrelang irgend etwas kopieren und damit herummachen. Das kann ich zu Anfang tun.
    Falls es um Wissendiskussionen geht, habe ich hier und da schon gewissen Spielraum geschaffen, wo man diskutieren könnte, da vermisse ich aber Deine Teilnahme.
    Deine Erfahrung in Programmierung in allen Ehren, ..
    In der Äußerung zeigt sich, dass Du die nicht einzuschätzen vermagst.
    So, HaWe. Um es zu beweisen, dass Du etwas davon verstehst, bevor wir hier sinnlos weiter diskutieren, möchte ich jetzt, dass Du uns erklärst, auf welchen Prinzipien des Rumguckers Code funktioniert und welche Aussichten auf eine Intelligenz er, jenseits eines XOR-Problemlösung, hat.
    Ich bin jetzt kurz davor, gar nichts mehr zum Thema KNN auszuführen. Und Deine unquallifizierten Äußerungen zukünftig zu ignorieren oder gleich ganz hier weg zu bleiben.
    Bitte zeige jetzt, was Du auf dem Kasten hast!
    Nochmal die Fragestellung: dass Du uns erklärst, auf welchen Prinzipien des Rumguckers Code funktioniert und welche Aussichten auf eine Intelligenz er, jenseits eines XOR-Problemlösung, hat
    WAS sollte ICH tun?

    PS
    du hast deinen Post nachträglich geändert, aber ich habe meinen Standpunkt ja nun schon mehrfach dargelegt.
    Ich muss dir hier überhaupt nichts beweisen -
    was ich von der Idee " KI-Linienfolger für Anfänger" halte, habe ich bereits geschrieben,
    welche anderen Ansätze ich für sinnvoller halte, ebenfalls,
    großartiges Interesse von anderen an KI erkenne ich nicht,
    Anfänger arbeiten sich besser selber an Hand von Tutorials und Lehrbüchern selber in das Thema ein,
    KI-Linienfolger interessiert mich selber überhaupt nicht, und würde es das, wäre das IMO eher ein Projekt für Fortgeschrittene.
    Und nach speziell nach deinem - gelinde ausgedrückt - unkooperativen Verhalten im Topic html-Interface für KI und im Topic outdoor I werde ich bestimmt kein Anfänger- oder Fortgeschrittenen-Privat-Tutorial speziell für dich erstellen, sorry.
    Alles weitere wurde bereits gesagt, und speziell zu gucki lies bitte bei gucki nach.
    Geändert von HaWe (14.12.2019 um 13:40 Uhr)

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Ich muss dir hier überhaupt nichts beweisen -

    Musst Du nicht, aber Du kannst. Sonstige Hilfegesuche gehen ja an Dir vorbei.
    Noch direkter konnte ich mich nicht ausdrücken.
    Normal bringt man sein Wissen in Diskussionen mit ein.
    Bei diesem Thema funktioniert das aber irgendwie nicht.

    Kein Mensch hat was gegen Deine Meinung.
    Du hast zu Anfang schon gesagt, dass Du davon nichts hältst, einen einfachen Linienfolger zu bauen.
    Gut, ist doch in Ordnung, wurde gelesen und zur Kenntnis genommen! Aber mir scheint, dass für Dich
    das nicht ausreichend ist. Wenn das dann doch diskutiert wird und Lösungsansätze vorgestellt werden,
    gibst Du dazu Kommentare ab, weil Du was nicht verstanden hast, was nicht so schlimm ist,
    ich erkläre das dann. - Vielleicht drücke ich mich manchmal auch nicht ganz 100% verständlich aus.
    Deine Reaktion dann da drauf, unterm Strich: habe ich schon mal gesagt, dass ich das für zu schwer halte.


    Du kannst immer wieder betonen, dass Du das für zu schwer hältst, vielleicht kommt die Diskussion dann
    tatsächlich irgendwann zum Erliegen.


    großartiges Interesse von anderen an KI erkenne ich nicht
    Kann ich mir vorstellen. Ich sehe schon ein großes Interesse.
    Was erwartest Du? Dass sich 50 User aus dem Forum hier melden und betteln, dass Du das tun sollst?
    Das wurde ja praktisch schon gemacht, selbst Inka hat das vorgeschlagen. Erwartest Du, dass noch mehr
    das machen?


    Anfänger arbeiten sich besser selber an Hand von Tutorials und Lehrbüchern selber in das Thema ein
    Deine Ansicht? Gut, ist auch kein Problem!
    Aber dann lass sie das machen! Lass Leute sich in das Thema einarbeiten! Da muss man nicht dauernd dazwischen
    gehen mit: ist zu schwer für Anfänger.. Habe ich schon mal gesagt, funktioniert so nicht..
    Ich habe 10 Jahre Erfahrung, Du kannst auf mich hören oder es lassen ... und ähnliche Sachen.


    Und nach speziell nach deinem - gelinde ausgedrückt - unkooperativen Verhalten im Topic html-Interface für KI und im Topic outdoor I

    Kann mich zwar nicht erinnern, dass ich unkooperativ war, aber wenn Du das so sehen solltest, solltest Du Dich fragen, woran es gelegen haben könnte.
    "im Topic html-Interface für KI" habe ich mehr als 24h Arbeit reingesteckt, ink. ausführlicher Schnittstellenbeschreibung.
    "Topic outdoor I" hast Du nicht richtig gelesen, den Thread nicht richtig verfolgt. Angemahnt, dass Du mit dem Inhalt der Quelltexte nicht einverstanden bist,
    in welcher Richtung auch immer. Du gehst mal eben bei zwei Usern, die an einem Quelltext arbeiten, der nicht von Dir stammt, dazwischen indem Du
    den einfach änderst und wehement darauf bestehst, dass man sich an die Regeln halten soll, die Du gerade für gut hältst.




    und speziell zu gucki lies bitte bei gucki nach

    Das habe ich und deswegen wollte ich wissen, was Du dazu sagst.




    Mein Vorschlag oder Wunsch:
    Rücke von dem Prinzip ab: ich weiß alles besser und wer nicht auf mich hört ist selber Schuld, aber erklären tu ich nichts.
    So kommen wir im Forum nicht weiter.






    MfG

  6. #6
    HaWe
    Gast
    ich habe gesagt, was zu sagen war - und selbst jetzt beweist du ja wieder, das du nichts besseres zu tun hast als meine wohlgemeinten Ratschläge ganz besonders auch in diesem Topic in pampiger Weise in den Wind zu schlagen als wäre Borniertheit eine Tugend - statt auf sie zu hören.
    Und ich bin tatsächlich der Meinung, ich weiß es im eigentlichen Wortsinne "besser", während vor allem du derjenige bist, der ständig alles "besser weiß" - nur eben im übertragenen Sinne.
    Ich bin daher hier erst mal raus, es sei denn vom OP kommen noch inhaltliche Vorschläge, die uns weiterführen.
    Oder derart unsinnige Behauptungen von anderer Seite, die man einfach nicht unkorrigiert stehen lassen kann, um andere Leser nicht zu verwirren.
    Du bist jetzt jedenfalls erst mal auf meiner ignore-Liste.
    Geändert von HaWe (15.12.2019 um 08:57 Uhr)

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Zitat Zitat von HaWe Beitrag anzeigen
    ich habe gesagt, was zu sagen war - und selbst jetzt beweist du ja wieder, das du nichts besseres zu tun hast als meine wohlgemeinten Ratschläge ganz besonders auch in diesem Topic in pampiger Weise in den Wind zu schlagen als wäre Borniertheit eine Tugend - statt auf sie zu hören.
    Und ich bin tatsächlich der Meinung, ich weiß es im eigentlichen Wortsinne "besser", während vor allem du derjenige bist, der ständig alles "besser weiß" - nur eben im übertragenen Sinne.
    Ich bin daher hier erst mal raus, es sei denn vom OP kommen noch inhaltliche Vorschläge, die uns weiterführen.
    Oder derart unsinnige Behauptungen von anderer Seite, die man einfach nicht unkorrigiert stehen lassen kann, um andere Leser nicht zu verwirren.
    Du bist jetzt jedenfalls erst mal auf meiner ignore-Liste.
    Ja, vielleicht hilft diskreditieren weiter.



  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von HaWe Beitrag anzeigen
    Du bist jetzt jedenfalls erst mal auf meiner ignore-Liste.
    aus eigener erfahrung - das funktioniert nicht. Man möchte dann doch wissen was der andere "idiot" geschrieben hat

    noch einmal vielleicht andersherum zu meinen "bedürfnissen" was KI bzw. NN betrifft. Ich will keinen code schreiben bzw. entwickeln. Ich möchte am anfang an einem - für mich schon recht komplexen - beispiel wie dem hier z.b.

    Code:
    /******************************************************************
       ArduinoANN - An artificial neural network for the Arduino
       All basic settings can be controlled via the Network Configuration
       section.
       See robotics.hobbizine.com/arduinoann.html for details.
     ******************************************************************/
    
    #include <math.h>
    
    /******************************************************************
       Network Configuration - customized per network
     ******************************************************************/
    
    const int PatternCount = 10;
    const int InputNodes = 7;
    const int HiddenNodes = 8;
    const int OutputNodes = 4;
    const float LearningRate = 0.3;
    const float Momentum = 0.9;
    const float InitialWeightMax = 0.5;
    const float Success = 0.0004;
    
    const byte Input[PatternCount][InputNodes] =
    {
      { 1, 1, 1, 1, 1, 1, 0 },  // 0
      { 0, 1, 1, 0, 0, 0, 0 },  // 1
      { 1, 1, 0, 1, 1, 0, 1 },  // 2
      { 1, 1, 1, 1, 0, 0, 1 },  // 3
      { 0, 1, 1, 0, 0, 1, 1 },  // 4
      { 1, 0, 1, 1, 0, 1, 1 },  // 5
      { 0, 0, 1, 1, 1, 1, 1 },  // 6
      { 1, 1, 1, 0, 0, 0, 0 },  // 7
      { 1, 1, 1, 1, 1, 1, 1 },  // 8
      { 1, 1, 1, 0, 0, 1, 1 }   // 9
    };
    
    const byte Target[PatternCount][OutputNodes] =
    {
      { 0, 0, 0, 0 },
      { 0, 0, 0, 1 },
      { 0, 0, 1, 0 },
      { 0, 0, 1, 1 },
      { 0, 1, 0, 0 },
      { 0, 1, 0, 1 },
      { 0, 1, 1, 0 },
      { 0, 1, 1, 1 },
      { 1, 0, 0, 0 },
      { 1, 0, 0, 1 }
    };
    
    /******************************************************************
       End Network Configuration
     ******************************************************************/
    
    
    int i, j, p, q, r;
    int ReportEvery1000;
    int RandomizedIndex[PatternCount];
    long  TrainingCycle;
    float Rando;
    float Error;
    float Accum;
    
    
    float Hidden[HiddenNodes];
    float Output[OutputNodes];
    float HiddenWeights[InputNodes + 1][HiddenNodes];
    float OutputWeights[HiddenNodes + 1][OutputNodes];
    float HiddenDelta[HiddenNodes];
    float OutputDelta[OutputNodes];
    float ChangeHiddenWeights[InputNodes + 1][HiddenNodes];
    float ChangeOutputWeights[HiddenNodes + 1][OutputNodes];
    
    void setup() {
      Serial.begin(9600);
      randomSeed(analogRead(3));
      ReportEvery1000 = 1;
      for ( p = 0 ; p < PatternCount ; p++ )
      {
        RandomizedIndex[p] = p ;
      }
    }
    
    void loop ()
    {
    
    
      /******************************************************************
        Initialize HiddenWeights and ChangeHiddenWeights
      ******************************************************************/
    
      for ( i = 0 ; i < HiddenNodes ; i++ )
      {
        for ( j = 0 ; j <= InputNodes ; j++ )
    
        {
          ChangeHiddenWeights[j][i] = 0.0 ;
          Rando = float(random(100)) / 100;
          HiddenWeights[j][i] = 2.0 * ( Rando - 0.5 ) * InitialWeightMax ;
        }
      }
      /******************************************************************
        Initialize OutputWeights and ChangeOutputWeights
      ******************************************************************/
    
      for ( i = 0 ; i < OutputNodes ; i ++ )
      {
        for ( j = 0 ; j <= HiddenNodes ; j++ )
        {
          ChangeOutputWeights[j][i] = 0.0 ;
          Rando = float(random(100)) / 100;
          OutputWeights[j][i] = 2.0 * ( Rando - 0.5 ) * InitialWeightMax ;
        }
      }
      Serial.println("Initial/Untrained Outputs: ");
      toTerminal();
      /******************************************************************
        Begin training
      ******************************************************************/
    
      for ( TrainingCycle = 1 ; TrainingCycle < 2147483647 ; TrainingCycle++)
      {
    
        /******************************************************************
          Randomize order of training patterns
        ******************************************************************/
    
        for ( p = 0 ; p < PatternCount ; p++)
        {
          q = random(PatternCount);
          r = RandomizedIndex[p] ;
          RandomizedIndex[p] = RandomizedIndex[q] ;
          RandomizedIndex[q] = r ;
        }
        Error = 0.0 ;
        /******************************************************************
          Cycle through each training pattern in the randomized order
        ******************************************************************/
        for ( q = 0 ; q < PatternCount ; q++ )
        {
          p = RandomizedIndex[q];
    
          /******************************************************************
            Compute hidden layer activations
          ******************************************************************/
    
          for ( i = 0 ; i < HiddenNodes ; i++ )
          {
            Accum = HiddenWeights[InputNodes][i] ;
            for ( j = 0 ; j < InputNodes ; j++ )
            {
              Accum += Input[p][j] * HiddenWeights[j][i] ;
            }
            Hidden[i] = 1.0 / (1.0 + exp(-Accum)) ;
          }
    
          /******************************************************************
            Compute output layer activations and calculate errors
          ******************************************************************/
    
          for ( i = 0 ; i < OutputNodes ; i++ )
          {
            Accum = OutputWeights[HiddenNodes][i] ;
            for ( j = 0 ; j < HiddenNodes ; j++ )
            {
              Accum += Hidden[j] * OutputWeights[j][i] ;
            }
            Output[i] = 1.0 / (1.0 + exp(-Accum)) ;
            OutputDelta[i] = (Target[p][i] - Output[i]) * Output[i] * (1.0 - Output[i]) ;
            Error += 0.5 * (Target[p][i] - Output[i]) * (Target[p][i] - Output[i]) ;
          }
    
          /******************************************************************
            Backpropagate errors to hidden layer
          ******************************************************************/
    
          for ( i = 0 ; i < HiddenNodes ; i++ )
          {
            Accum = 0.0 ;
            for ( j = 0 ; j < OutputNodes ; j++ ) {
              Accum += OutputWeights[i][j] * OutputDelta[j] ;
            }
            HiddenDelta[i] = Accum * Hidden[i] * (1.0 - Hidden[i]) ;
          }
    
    
          /******************************************************************
            Update Inner-->Hidden Weights
          ******************************************************************/
    
    
          for ( i = 0 ; i < HiddenNodes ; i++ )
          {
            ChangeHiddenWeights[InputNodes][i] = LearningRate * HiddenDelta[i] + Momentum * ChangeHiddenWeights[InputNodes][i] ;
            HiddenWeights[InputNodes][i] += ChangeHiddenWeights[InputNodes][i] ;
            for ( j = 0 ; j < InputNodes ; j++ )
            {
              ChangeHiddenWeights[j][i] = LearningRate * Input[p][j] * HiddenDelta[i] + Momentum * ChangeHiddenWeights[j][i];
              HiddenWeights[j][i] += ChangeHiddenWeights[j][i] ;
            }
          }
    
          /******************************************************************
            Update Hidden-->Output Weights
          ******************************************************************/
    
          for ( i = 0 ; i < OutputNodes ; i ++ )
          {
            ChangeOutputWeights[HiddenNodes][i] = LearningRate * OutputDelta[i] + Momentum * ChangeOutputWeights[HiddenNodes][i] ;
            OutputWeights[HiddenNodes][i] += ChangeOutputWeights[HiddenNodes][i] ;
            for ( j = 0 ; j < HiddenNodes ; j++ )
            {
              ChangeOutputWeights[j][i] = LearningRate * Hidden[j] * OutputDelta[i] + Momentum * ChangeOutputWeights[j][i] ;
              OutputWeights[j][i] += ChangeOutputWeights[j][i] ;
            }
          }
        }
    
        /******************************************************************
          Every 1000 cycles send data to terminal for display
        ******************************************************************/
        ReportEvery1000 = ReportEvery1000 - 1;
        if (ReportEvery1000 == 0)
        {
          Serial.println();
          Serial.println();
          Serial.print ("TrainingCycle: ");
          Serial.print (TrainingCycle);
          Serial.print ("  Error = ");
          Serial.println (Error, 5);
    
          toTerminal();
    
          if (TrainingCycle == 1)
          {
            ReportEvery1000 = 999;
          }
          else
          {
            ReportEvery1000 = 1000;
          }
        }
    
    
        /******************************************************************
          If error rate is less than pre-determined threshold then end
        ******************************************************************/
    
        if ( Error < Success ) break ;
      }
      Serial.println ();
      Serial.println();
      Serial.print ("TrainingCycle: ");
      Serial.print (TrainingCycle);
      Serial.print ("  Error = ");
      Serial.println (Error, 5);
    
      toTerminal();
    
      Serial.println ();
      Serial.println ();
      Serial.println ("Training Set Solved! ");
      Serial.println ("--------");
      Serial.println ();
      Serial.println ();
      ReportEvery1000 = 1;
    }
    
    void toTerminal()
    {
    
      for ( p = 0 ; p < PatternCount ; p++ )
      {
        Serial.println();
        Serial.print ("  Training Pattern: ");
        Serial.println (p);
        Serial.print ("  Input ");
        for ( i = 0 ; i < InputNodes ; i++ )
        {
          Serial.print (Input[p][i], DEC);
          Serial.print (" ");
        }
        Serial.print ("  Target ");
        for ( i = 0 ; i < OutputNodes ; i++ )
        {
          Serial.print (Target[p][i], DEC);
          Serial.print (" ");
        }
        /******************************************************************
          Compute hidden layer activations
        ******************************************************************/
    
        for ( i = 0 ; i < HiddenNodes ; i++ )
        {
          Accum = HiddenWeights[InputNodes][i] ;
          for ( j = 0 ; j < InputNodes ; j++ )
          {
            Accum += Input[p][j] * HiddenWeights[j][i] ;
          }
          Hidden[i] = 1.0 / (1.0 + exp(-Accum)) ;
        }
    
        /******************************************************************
          Compute output layer activations and calculate errors
        ******************************************************************/
    
        for ( i = 0 ; i < OutputNodes ; i++ )
        {
          Accum = OutputWeights[HiddenNodes][i] ;
          for ( j = 0 ; j < HiddenNodes ; j++ )
          {
            Accum += Hidden[j] * OutputWeights[j][i] ;
          }
          Output[i] = 1.0 / (1.0 + exp(-Accum)) ;
        }
        Serial.print ("  Output ");
        for ( i = 0 ; i < OutputNodes ; i++ )
        {
          Serial.print (Output[i], 5);
          Serial.print (" ");
        }
      }
    
    
    }
    unter "anleitung" in den einstellungen etwas verändern und lernen wie ich diese verändern muss um ein bestimmtes ergebnis zu erreichen. Und vielleicht noch der hinweis, in welchem codeteil das passiert, wäre aber schon unter nice to have zu sehen...
    Das würde mir zunächst einmal völlig reichen. Dazu muss ich keine 10 jahre lang (bewundernswert) die theorie studieren. Ich glaube nicht, dass Du - HaWe das kannst und willst - nichts für ungut...

    @Moppi:

    ein vorschlag. Ich habe vor jahren den versuch gestartet mit meinem enkel zusammen (der wohnt ca. 600km weit weg) einen roboter zu bauen. Dazu habe ich ca. ein dutzend video-tutorials aufgenommen, wie das hier z.b. Natürlich geht es da nicht um KI oder NN, sondern um simple mechanik. Könntest Du Dir vorstellen Deine versuche in der richtung KI in einem video, also anders als schriftlich zu erklären? Man könnte auch den serialmonitor und die IDE aufnehmen und erklären was bei welcher änderung des codes passiert...
    Auch wenn mein (technisches) englisch - allerdings hauptsächlich mechanik betreffend - nicht schlecht ist, der vorteil wäre, dass das video in deutsch wäre
    gruß inka

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    ach, dumeinst das mit dem nibo-bee? Ich dachte da wäre noch was anderes....

    https://www.youtube.com/watch?v=D0R-...qRWq0w&index=2

    habe noch einmal mein ebaylink getestet, bei mir geht er - hier noch einmal...
    gruß inka

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests