Einzelnen Beitrag anzeigen

Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#15

AW: Neurale Netze und genectic algorithmen.

  Alt 20. Mär 2018, 15:41
Du hattest ja geschrieben, dass du das ins FDK bringen willst. Die Frage ist natürlich immer wie allgemein man das umsetzen kann und dann noch performant ist.
Es gibt bei MitovSoftware und RiverSoft schon fertige Compos. Hast du damit schon mal experimentiert?
Ich habe mir keine anderen Komponenten angesehen, nur mal eine für Zeichenerkennung mit Delphi 6.

Es gibt sicherlich auch hunderte Komponten/API's oder was auch immer die viel besser sind...

Aber ich hab es gerne einfach, daher habe ich auch einen Wrapper für JSON und REST Service geschrieben und so ein Request/Datenverarbeitung in einer Zeile zu erledigen...

Daher auch hier ganz einfach und wenn man es selber mal getippt hat - versteht man es auch besser.

Delphi-Quellcode:
  ICanNeuralNet = Interface
    ['{5BDC1430-6823-4667-8DBC-C80E6363A208}']
    Procedure FeedForward(Const AInputValues : TNetValueList);
    Procedure BackProp(Const ATargetValues : TNetValueList);
    Function GetResults : TNetValueList;
    Procedure SaveToStream(S : TStream);
    Procedure LoadFromStream(S : TStream);
    Function AverageError : double;
    Function CrossOver(AOtherParent : ICanNeuralNet) : ICanNeuralNet;
    Function Mutate(APercentRate,AWeightChange : Double) : ICanNeuralNet;
    Function LayerData : TNetLayer;
  end;
Dann Einfach...

Delphi-Quellcode:
Var
  myNet : ICanNeuralNet;
begin
  myNet := TNeuralNet.Construct([9,10,10,2]); // Input,hidden,hidden,output
end;
CrossOver und Mutate hab ich auch implementiert... (Wie ist halt momentan noch fixed)

Aber für das "normale" Lernen geht es halt auch und zwar so (wie im Video) XOR Gatter!

Delphi-Quellcode:
  
FNet := TNeuralNet.Construct([2,4,1]);

  for i:=0 to 10000 do
    begin
      FNet.FeedForward([0.0,0.0]);
      FNet.BackProp([0]);
      FNet.FeedForward([1.0,1.0]);
      FNet.BackProp([0]);
      FNet.FeedForward([0.0,1.0]);
      FNet.BackProp([1]);
      FNet.FeedForward([1.0,0.0]);
      FNet.BackProp([1]);
      FNet.FeedForward([0.0,0.0]);
      if korrect then
        begin
          Memo1.Lines.Add(I.ToString+' need');
          Memo1.Lines.Add('Error : '+FNet.AverageError.tostring);
          break;
        end;
    end;
Fertig läuft...

Das war eigentlich auch nur mal so für "zwischen durch" um mal den Kopf frei zu bekommen...

Mavarik
  Mit Zitat antworten Zitat