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
Versuche mehrfach durchlaufen lassen
Re: Versuche mehrfach durchlaufen lassen
Hallo Bastian,
was mir spontan auffällt:
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
was mir spontan auffällt:
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.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
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
Re: Versuche mehrfach durchlaufen lassen
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
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
Re: Versuche mehrfach durchlaufen lassen
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
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
Re: Versuche mehrfach durchlaufen lassen
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
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