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:
Alle Var's sind als extended deklariert.
p_neuron^.r_output := 1/(1 + exp(-p_neuron^.r_nettoinput));
(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 |
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