- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 45

Thema: einfaches neuronales Netz, inkl. deep learning

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #21
    HaWe
    Gast
    ich habe jetzt versucht, Mxt's verlinktes NN auf dem ESP8266 zum Laufen zu kriegen, aber die Routinen führen dazu, dass der esp dauernd rebootet (wschl wegen watchdog timeout) - fast wie ich es befürchtet habe.
    Nach ein paar delay(1) zwischendrin rebootet er nicht mehr, aber es dauert nun sehr lange - mal gucken.....


    http://robotics.hobbizine.com/arduinoann.html
    Code:
    // A Neural Network for Arduino
    // http://robotics.hobbizine.com/arduinoann.html 
    // 2-layer Backpropagation net
    
    // modified by HaWe
    // version 0.0.2
    
    
    
    #include <math.h>
    
    #define REPORT_N 100
    
    /******************************************************************
     * 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.00040;
    
    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 ReportEvery_n;
    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(115200);
      delay(1000);
      randomSeed(analogRead(3));
      ReportEvery_n = 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 ;
            delay(1); 
            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++ ) {     
            delay(1); 
            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
    ******************************************************************/
        ReportEvery_n = ReportEvery_n - 1;
        if (ReportEvery_n == 0)
        {
          Serial.println(); 
          Serial.println(); 
          Serial.print ("TrainingCycle: ");
          Serial.print (TrainingCycle);
          Serial.print ("  Error = ");
          Serial.println (Error, 5);
    
          toTerminal();
    
          if (TrainingCycle==1)
          {
            ReportEvery_n = REPORT_N-1;
          }
          else
          {
            ReportEvery_n = REPORT_N;
          }
        }    
    
    
    /******************************************************************
    * 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 ();  
      ReportEvery_n = 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 (" ");
        }
      }
    
     
    }
    - - - Aktualisiert - - -

    Update:
    konnte inzwischen ein paar delays wieder rausnehmen, klappt immer noch und ist wieder ein bisschen schneller.

    - - - Aktualisiert - - -

    jawohl, er hat das Training geschafft:

    Code:
    TrainingCycle: 5375  Error = 0.00040
    
      Training Pattern: 0
      Input 1 1 1 1 1 1 0   Target 0 0 0 0   Output 0.00775 0.00009 0.00431 0.00639 
      Training Pattern: 1
      Input 0 1 1 0 0 0 0   Target 0 0 0 1   Output 0.00092 0.00465 0.00439 0.99653 
      Training Pattern: 2
      Input 1 1 0 1 1 0 1   Target 0 0 1 0   Output 0.00244 0.00013 0.99975 0.00190 
      Training Pattern: 3
      Input 1 1 1 1 0 0 1   Target 0 0 1 1   Output 0.00038 0.00698 0.99533 0.99567 
      Training Pattern: 4
      Input 0 1 1 0 0 1 1   Target 0 1 0 0   Output 0.00609 0.99732 0.00555 0.00466 
      Training Pattern: 5
      Input 1 0 1 1 0 1 1   Target 0 1 0 1   Output 0.00173 0.99669 0.00484 0.99655 
      Training Pattern: 6
      Input 0 0 1 1 1 1 1   Target 0 1 1 0   Output 0.00034 0.99465 0.99296 0.00011 
      Training Pattern: 7
      Input 1 1 1 0 0 0 0   Target 0 1 1 1   Output 0.00005 0.99232 0.99417 1.00000 
      Training Pattern: 8
      Input 1 1 1 1 1 1 1   Target 1 0 0 0   Output 0.99110 0.00002 0.00254 0.00019 
      Training Pattern: 9
      Input 1 1 1 0 0 1 1   Target 1 0 0 1   Output 0.99327 0.00678 0.00002 0.99424 
    
    Training Set Solved! 
    --------
    Geändert von HaWe (01.11.2019 um 15:57 Uhr)

Ähnliche Themen

  1. Microsoft: Nächste Hololens nutzt Deep-Learning-Kerne
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 24.07.2017, 15:40
  2. Deep-Learning-Konferenz von Golem.de: Studierende bekommen Tickets günstiger
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 04.04.2016, 09:40
  3. Konferenz Quo Vadis 2016: Wie Deep Learning Games verändern kann
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 03.03.2016, 10:10
  4. Antworten: 7
    Letzter Beitrag: 31.01.2009, 22:41
  5. Neuronales Netz
    Von matren im Forum Software, Algorithmen und KI
    Antworten: 39
    Letzter Beitrag: 26.07.2004, 00:52

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress