Versuche mehrfach durchlaufen lassen

Haben Sie Fragen zur Bedienung bestimmter Features von MemBrain? Sind Sie nicht sicher, welches Häkchen was bewirkt? Möchten Sie wissen, ob eine bestimmte Funktionalität in MemBrain vorhanden ist oder nicht?

Dann stellen Sie Ihre Fragen hier!
Bastian
Posts: 12
Joined: Wed 3. Dec 2008, 13:38

Re: Versuche mehrfach durchlaufen lassen

Post by Bastian »

Hallo,

ich bekomme die automatische Auswertung einfach nicht hin. Thomas hat mir schon deutlich geholfen, aber so richtig will es noch nicht.

Ich poste hier einfach mal meinen Quellcode der mir leider nicht das gewünschte Ergebnis liefert. Vielleicht habt ihr noch einen Tipp.

Der Quellcode kann in der Deklaration noch ein paar Variablen zu viel halten, weil dies nur der vereinfachte Ausschnitt ist, welcher mit fixen Dateien arbeitet.

Ziel dieses Skriptes ist es, die durch das Netz ermittelten Ergebnisse in die Datei versuch.csv einzutragen.
Allerdings bekomme ich bisher nur die Inputdaten eingetragen.

--------------------------------------------------------------------------------------------------------------------------------------------
' static variables
Dim sInCount As Long
Dim sOutCount As Long
Dim sChosenLesson As Integer
Dim sNetFileName As String
Dim sNetCount As Long
Dim sLessonName As String


Private Sub CheckDllError(result As Long)
If result <> 0 Then
HandleDllError
End If
End Sub


Private Sub HandleDllError()
MsgBox ("Dll reported error! The program will terminate!")
Unload Me
End Sub


Private Sub ButRun_Click()
Dim maxCount As Long
Dim inIdx As Long
Dim i As Long
Dim ret As Long
Dim OutAct As Double
Dim InAct As Double
Dim result As Long
Dim lessonCount As Long
Dim netIdx As Long
Dim Lesson As Long
Dim ValueSol As Double
Dim Name As String


'Netzdummy laden
result = MB_LoadNet("Y:\Dissertation\MemBrain\Versuch_1S_3N.mbn" + vbNullChar)
CheckDllError (result)
sNetFileName = "Y:\Dissertation\MemBrain\Versuch_1S_3N.mbn"
'result = MB_LoadNet(sNetFileName + vbNullChar)


'Lessondummy laden
result = MB_LoadLesson("Y:\Dissertation\MemBrain\validierung.mbl" + vbNullChar)
CheckDllError (result)

Range("N14") = MB_GetLessonSize
maxCount = MB_GetLessonSize

sChosenLesson = 0

result = MB_SelectLesson(sChosenLesson)
CheckDllError (result)

lessonCount = MB_GetLessonCount

sInCount = MB_GetInputCount
sOutCount = MB_GetOutputCount


If (sOutCount < 1) Then
MsgBox "The loaded net does not have any outputs!"
Exit Sub
End If

If (sNetFileName = "") Then
MsgBox "No net loaded!"
Exit Sub
End If

'result = MB_ThinkLesson()
'CheckDllError (result)

'inIdx = MB_GetLessonCount()

MB_SetLessonCount (2) 'es soll zwei Lesson geben, den eingeladenen und den neu errechneten
MB_SelectLesson (1) ' Lesson eins wird ausgewählt

MB_SetRecordingType (1)
result = MB_StartRecording(1, 1)
CheckDllError (result)

'MB_EnableLessonOutData (1)
MB_ThinkLesson
MB_StopRecording
inIdx = MB_GetSelectedLesson()

MB_SelectLesson (1)
Name = "C:\Dokumente und Einstellungen\Desktop\versuch.csv"
result = MB_ExportLessonRaw(Name, maxCount)
CheckDllError (result)


'Öffnet die Versuch.csv Datei um zu prüfen ob die richtigen Daten eingetragen wurden
'Workbooks.Open "C:\Dokumente und Einstellungen\Desktop\versuch.csv"

End Sub

--------------------------------------------------------------------------------------------------------------------------------------------

Gruß
Bastian
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Versuche mehrfach durchlaufen lassen

Post by Admin »

Hallo Bastian,

was mir spontan auffällt:
MB_SelectLesson (1) ' Lesson eins wird ausgewählt

MB_SetRecordingType (1)
result = MB_StartRecording(1, 1)
CheckDllError (result)

'MB_EnableLessonOutData (1)
MB_ThinkLesson
MB_StopRecording
Das müsste MB_SelectLesson(0) heißen, da Du Lesson 0 als Input während des 'ThinkLesson' verwenden willst, aber in Lesson 1 aufzeichnen willst.

Außerdem solltest Du MB_SetRecordingType (0) wählen, da Du wahrscheinlich Aktivierungswerte (umgerechnet auf Deine Normierungsbereiche) aufzeichnen willst und nicht normalisierte Output-Werte. MB_SetRecordingType (1) wird eigentlich nie gebraucht, ich hätte die Option besser erst gar nicht in die dll eingebaut, es wird immer falsch verstanden ;)

Wird's damit besser?

Viele Grüße
Thomas Jetter
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Versuche mehrfach durchlaufen lassen

Post by Admin »

Hallo Bastian,

kann es außerdem sein, dass Deine erste Lesson nur input-Daten enthält bzw. die Output-Daten im Lesson-Editor deaktiviert sind?

Dann solltest Du die zweite Lesson so vorbereiten:

MB_SelectLesson (1) // Zum Konfigurieren aktiv setzen
MB_EnableLessonOutData(1)
MB_NamesFromNet
MB_SelectLesson (0) // Für Training aktiv setzen

Grüße
Thomas Jetter
Bastian
Posts: 12
Joined: Wed 3. Dec 2008, 13:38

Re: Versuche mehrfach durchlaufen lassen

Post by Bastian »

Hi so ganz funktioniert es immer noch nicht, ich bekomme als Ausgabe immer noch die Inputwerte der beiden Eingangsneuronen und nicht die Ausgabe des Outputneurons.

Hier nochmal mein aktuelles VBA Skript bei dem ich die unwichtige Parts weggelassen habe:


result = MB_LoadNet("Y:\MemBrain\Versuch_1S_3N.mbn" + vbNullChar)
result = MB_LoadLesson("Y:\MemBrain\validierung.mbl" + vbNullChar)

maxCount = MB_GetLessonSize

'Es sollen später mehrere Lessons auswählbar sein
sChosenLesson = 0

result = MB_SelectLesson(sChosenLesson)
CheckDllError (result)
lessonCount = MB_GetLessonCount

' --------------------------

MB_SetLessonCount (2) 'es soll zwei Lesson geben, den eingeladenen und den neu errechneten

MB_SelectLesson (1) ' Zum Konfigurieren aktiv setzen
MB_EnableLessonOutData (1) ' Was tut dieser Befehl genau? Ermöglicht er, dass in den Lesson geschrieben werden darf?
MB_NamesFromNet ' überträgt die Namen der Neuronen des aktiven Netzes in den aktiven Lesson
MB_SelectLesson (0) ' Für Training aktiv setzen

MB_SetRecordingType (0)
result = MB_StartRecording(1, 1)
CheckDllError (result)

MB_EnableLessonOutData (1)
MB_ThinkLesson 'Verarbeitet die Validierungsdatei
MB_StopRecording 'Stoppt die Bearbeitung


MB_SelectLesson (0)
Name = "C:\Dokumente und Einstellungen\Desktop\versuch.csv"
result = MB_ExportLessonRaw(Name, maxCount)
CheckDllError (result)

Vor allem die Reihenfolge und Zuordnungen der Befehle nach dem Trennstrich bereitet mir einige Schwierigkeiten.
Das eigenartige ist, dass ich manchmal gute Ergebnisse bekomme und im Versuch danach sofort wieder die falschen...

Gruß
Bastian
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Versuche mehrfach durchlaufen lassen

Post by Admin »

Hallo Bastian,

habe eben genau Deinen Code geommen und darin nur die Namen des Netzes und der Lesson durch welche ersetzt, die Du mir schon mal per E-Mail geschickt hattest. Funktioniert tadellos auf meinem Excel 2000. Vielleicht liegt es ja wieder einmal am neueren Excel? Ich sende Dir gleich noch eine E-Mail mit den Dateien zum Nachvollziehen bei Dir.

Im Februar wird es übrigens ein MemBrain-Release geben, das eine vollwertige, C++-ähnliche Skriptsprache ('AngelScript') unterstützt. Mit dieser kann man dann komfortable MemBrain-Sktipte programmieren, ohne die DLL verwenden zu müssen. Die Implementierung Ist bereits fast fertig. Bei mir steht jetzt allerdings ein Umzug an, mit entsprechenden Nachwirkungen, so dass es wohl nicht vor Mitte/Ende Februar werden wird, bis das Release erscheint, intensive Anpassung der Hilfe und der Beispiele kommt ja auch noch zur Liste der zu erledigenden Arbeiten hinzu...

Viele Grüße
Thomas Jetter
Post Reply