Page 1 of 1

LOGISITC Aktivierungsfunktion

Posted: Tue 18. Jan 2011, 09:32
by haimat
Hallo!

Ich schreibe derzeit an einer ANN-Implementierung für ein embedded System. Hier möchte ich ein in MemBrain erstelltes Netz exportieren (als CSV-Datei) und diese Daten (sprich das trainierte Netz) im embedded System einlesen. Soweit, sogut. Jetzt stellt sich mir nur noch die Frage, wie ich die LOGISTIC-Funktion in meiner Applikation implementieren soll, um mit MemBrain kompatibel zu sein.

Aus der Literatur kenne ich diese Funktion: logistic(x) = 1 / 1 + e^(-c*x)

wobei c die Kurve bekanntlich steiler oder flacher macht. Wie schaut diese Formel in MemBrain aus, sprich dieses c? Der Rest der Formel wird ja vermutlich genauso aussehen, aber verwendet MemBrain hier einen anderen Wert für c als -1?

Ich bin für jeden Hinweis dankbar!

VG, Matthias

Re: LOGISITC Aktivierungsfunktion

Posted: Tue 18. Jan 2011, 17:59
by Admin
haimat wrote:Ich schreibe derzeit an einer ANN-Implementierung für ein embedded System. Hier möchte ich ein in MemBrain erstelltes Netz exportieren (als CSV-Datei)
MemBrain kann aus einem trainierten Netz direkt C-Code generieren, ohne Umweg über ein CSV file. Kommt das wegen abweichender Programmiersprache nicht in Frage?

Bzgl. der Gleichung:
In der MemBrain C-Library, die zusammen mit dem generierten Code kompiliert wird, ist natürlich auch die von MemBrain verwendete Logistic-Funktion als C Code enthalten.
Dort in der Datei 'Neuron.c' nach der Funktion

Code: Select all

static void PropagateLogistic(T_ACT_FLOAT* pAct, FLOAT32 inputSum, FLOAT32 exponent)
suchen.

Die MemBrain C-Library befindet sich im Unterverzeichnis 'C-CODE' des MemBrain Installationsverzeichnisses.

Viele Grüße

Re: LOGISITC Aktivierungsfunktion

Posted: Tue 18. Jan 2011, 19:37
by haimat
Hallo Thomas,

danke für den Hinweis. Leider kann ich den generierten C-Code nicht verwenden, da das embedded System, welches ich verwende, nur eine minimalistische Variante von C bietet.

Zur MemBrain C-Funktion PropagateLogistic(): Mir scheint, der Parameter "FLOAT32 exponent" ist das "c" aus meiner Gleichung oben. Wie finde ich heraus, welcher Wert hier für "exponent" an diese Funktion übergeben wird? Ist das vielleicht genau jener Wert, welcher beim Export im CSV File als Feld "EXP_LOG" zu finden ist?

Danke und VG, Matthias

Re: LOGISITC Aktivierungsfunktion

Posted: Tue 18. Jan 2011, 22:54
by Admin
haimat wrote:Ist das vielleicht genau jener Wert, welcher beim Export im CSV File als Feld "EXP_LOG" zu finden ist?
Das ist korrekt, ja.
Allerdings nur so lange, wie für alle Neuronen im Netz der selbe Wert verwendet wird: In MemBrain kann für jedes Neuron ein anderer Wert verwendet werden (Reiter 'Customize Activation Functions' in den Neuron-Eigenschaften). In diesem Fall wird der Wert aus der für die jeweiligen Neuronen erzeugten Daten-Sätzen im Code genommen.

In aller Regel wählt man aber für alle LOGISTIC-Neuronen den selben Wert für den Exponenten, so dass Deine Annahme zutrifft. Du kannst den Wert bei jedem LOGISTIC-Neuron in den Neuron-Eigenschaften auf dem Reiter Reiter 'Customize Activation Functions' einsehen: Es ist das Edit-Feld 'Exponent Logistic', welches als Default für alle Neuronen den Wert '3' hat.

Viele Grüße

Re: LOGISITC Aktivierungsfunktion

Posted: Wed 19. Jan 2011, 12:01
by haimat
vielen Dank!