Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Rundungsfehler in Verbindung mit "EXP - Function" ? (https://www.delphipraxis.net/200404-rundungsfehler-verbindung-mit-exp-function.html)

wendelin 17. Apr 2019 10:02

Rundungsfehler in Verbindung mit "EXP - Function" ?
 
Hallo,

ich arbeite an einem neuronalen Netz (BackPropagation) für eine Zeitreihenanalyse.
Alle Inputs und Outputs müssen in die range 0..1 scaliert werden.
Der SourceCode enthält die u.a. die Zeile
Delphi-Quellcode:
 p_neuron^.r_output := 1/(1 + exp(-p_neuron^.r_nettoinput));
Alle Var's sind als extended deklariert.
(sigmoide Aktivierungsfunktion in BPG's).
Diese Zeile wird einige hundert oder auch mehrere tausend Mal durchlaufen.
Meine Frage ist: 1. wie genau arbeitet die exp-function ?
2. muss ich die Var's in der exp-function als typisierte konstante declarieren um das ergebnis als extended zu erhalten?
siehe: docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/System_Exp@Extended.html.

wendelin

Blup 17. Apr 2019 10:53

AW: Rundungsfehler in Verbindung mit "EXP - Function" ?
 
Die Angabe "const" beim Parameter ermöglicht dem Compiler eine Optimierung der Parameterübergabe.
Der Parameter wird dann nicht auf dem Stapel(Kopie), sondern als Referenz(Zeiger) übergeben.

Um heraus zu finden welche exp()-Funktion tatsächlich aufgerufen wird:
Mit dem Debugger im Einzelschritt(F7) den Aufruf der exp()-Funktion verfolgen.

Ist p_neuron^.r_nettoinput bereits Extended, wird auch die Extended-Variante der Funktion aufgerufen.

Man kann das aber auch erzwingen:
Delphi-Quellcode:
exp(Extended(-p_neuron^.r_nettoinput))


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz