Alle Dateinamen eines Typs aus einem Ordner auslesen - WIE??

Dieses Forum beschäftigt sich mit allen Fragen, Kommentaren und Anregungen zu MemBrain Skripten. Auch der Austausch von Skripten zwischen MemBrain Benutzern soll hiermit gefördert werden.
Wenn Sie ein interessantes Skript haben, das Sie anderen MemBrain Benutzern zur Verfügung stellen wollen, dann Erstellen Sie dafür jeweils bitte ein neues Thema in diesem Forum. Der Titel des Themas sollte es anderen Benutzern erlauben möglichst schnell zu erfassen, wozu Ihr Skript dient.
Post Reply
User avatar
NNTUM
Posts: 10
Joined: Wed 22. Jul 2009, 23:24

Alle Dateinamen eines Typs aus einem Ordner auslesen - WIE??

Post by NNTUM »

Hi,

ich will alle (Lern-)Dateien aus einem angegebenen Unter-Ordner (Endung *.csv) herausfinden und deren Dateinamen in einem String-Array abspeichern.
Dieses Stringarray würde ich dann gerne zufällig neu durchmischen und dann nach und nach die Dateien laden.

Warum ich das mache hab ich im Bereich "Kritik und Anregungen" ja schon erwähnt:
Ich MUSS (Vorgabe von meinem Betreuer) nun auch mit Zeitvarianten Netzen arbeiten und gebe dabei viele verschiedene Zeitverläufe eines Signals vor. Sagen wir meine Zeitverläufe bestehen aus 50 äquidistanten Punkten, dann macht das für einen Zeitverlauf in einer Lerndaten-Datei 50-Zeilen für einen Verlauf. Will ich jetzt 10 Zeitverläufe lernen lassen, sind das schon 500 Zeilen. Jedoch würde ich gerne das Netz bei jedem Trainingsschritt die Reihenfolge in der die Zeitverläufe gelernt werden neu zufällig sortieren lassen. Die Funktion RANDOM_ORDERED mischt aber einfach die 500 Zeilen wild durcheinander. Jedoch soll ja innerhalb EINES Zeitverlaufes (=Paket von 50 Zeilen) die Reihenfolge gleich bleiben. Ist ja einleuchtend.

Das ganze wollte ich nun in Angelscript umsetzen indem ich jeden Zeitverlauf in eine eigene Datei packe, diese in einen Subordner, den Ordner auslese und alle Dateinamen der Lerndateien (bei mir RAW CSV) in eine verkettete Liste einlese. Diese dann durchmischen vor jedem Lerndurchgang und dann für jede einzelne Datei dann in einer Schleife sowas wie: ResetNet(),Lade(NaechsteLerndatei),Training().
Das durchmischen des Arrays hab ich hinbekommen, Datei dazu im Anhang! Vielleicht kanns ja wer gebrauchen. Jetzt würde ich gerne die Dateinamen auslesen. Bietet da AngelScript die nötigen Funktionen? Hab in der Hilfe alles gefunden um eine einzelne Datei zu laden etc, aber um Dateien aus einem Ordner auflisten leider nicht.

Bin für jegliche Hilfe dankbar :)

Gruß,
Jonathan
Attachments
ShuffleArray.rar
(1.17 KiB) Downloaded 675 times
________________________________________________
"Sooooo, this is engineering, huh? [...] Engineering - where the noble semi-skilled laborers execute the vision of those who think and dream... Hello Oompa Loompas of science!" :D
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Alle Dateinamen eines Typs aus einem Ordner auslesen - WIE??

Post by Admin »

Nein, es gibt momentan leider keine Funktion zum Auslesen/Auflisten aller Dateinamen innerhalb eines Ordners.

Da sehe ich momentan nur die Möglichkeit, die Dateien nach einem bekannten Schema zu benennen, mit einem numerischen Namensanteil, der für eine Suche inkrementiert werden kann.
Zur Existenzprobe jeder Datei müsste man mittels eines 'file' Objekts über die Methode 'Open' prüfen, ob sich die Datei zum Lesen öffnen lässt.

Viele Grüße
Thomas Jetter
User avatar
NNTUM
Posts: 10
Joined: Wed 22. Jul 2009, 23:24

Re: Alle Dateinamen eines Typs aus einem Ordner auslesen - WIE??

Post by NNTUM »

Hi,

hab das Problem umgangen indem ich in den selben Ordner in dem auch alle Lerndaten sind eine Text-Datei mit den Namen aller Lerndateien sind packe. Diese TXT-Datei lese ich dann zeilenweise ins Array ein welches ich durchmischen kann. In meinem Fall mit >23000 Lernbeispielen und >7000 Validierungsdaten zwar Rechenintensiv aber was soll, wenn ich Glück hab darf ichs auf dem Uni-Rechner laufen lassen ;)

Habe eine abgespeckte Version mit 2 Lern-Zeitverläufen und 2 Validierungs-Zeitverläufen als Beispiel im Anhang angehängt. Das Skript lässt sich sicher hier und da noch eleganter gestalten. Was noch ne gute Idee wär (fiel mir beim Testen grad auf!) ein Array für die Net Error Grenze zu verwenden bei der der Lernvorgang abgebrochen werden soll. Damit lässt sich für jedes Netz eine eigene (realistische) Grenze festlegen. Ähnliches ließe sich bei der Zeit- und Wiederholungsabbruchbedingung einführen.

Das ganze basiert auf Seppys Skript hier aus dem Forum (so auch in den Credits vermerkt!). Vielen Dank für diese geniale Grundlage, hat mir seeeeehr weitergeholfen!

Hoffe es hilft jemandem :)

@ Thomas:

Frage zum Backprop Teacher mit Momentum und Loopback-Support (allgemein Backprop eigentlich!): Werden dort beim Lernen eines Patterns alle Gewichte angepasst? Auch bei mehreren Hidden-Layern? Mir fiel eben bei einem Testnetz mit 2 Hidden Layern auf, dass die Gewichte dazwischen ihre Farbe nicht geändert und ALLE die selbe Farbe hatten. Obwohl vorher randomized wurde. Bei dem Beispiel das ich angehängt habe ist dies glücklicherweise nicht der Fall. Trotzdem frag ich lieber mal nach!

Gruß,
Jonathan
Attachments
Forumbeispiel.rar
(20.72 KiB) Downloaded 695 times
________________________________________________
"Sooooo, this is engineering, huh? [...] Engineering - where the noble semi-skilled laborers execute the vision of those who think and dream... Hello Oompa Loompas of science!" :D
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Alle Dateinamen eines Typs aus einem Ordner auslesen - WIE??

Post by Admin »

NNTUM wrote:@ Thomas:

Frage zum Backprop Teacher mit Momentum und Loopback-Support (allgemein Backprop eigentlich!): Werden dort beim Lernen eines Patterns alle Gewichte angepasst? Auch bei mehreren Hidden-Layern? Mir fiel eben bei einem Testnetz mit 2 Hidden Layern auf, dass die Gewichte dazwischen ihre Farbe nicht geändert und ALLE die selbe Farbe hatten. Obwohl vorher randomized wurde. Bei dem Beispiel das ich angehängt habe ist dies glücklicherweise nicht der Fall. Trotzdem frag ich lieber mal nach!
Ja, es werden alle Gewichte angepasst (sofern sie nicht die Eigenschaft 'Lock' gesetzt haben).
Was bei Deinem Netz evtl. passiert ist: Die Gewichte könnten 'eskaliert' sein, das passiert bei rückgekoppelten Netzen schon mal, diese Netze sind per Prinzip erst einmal gefährdet, instabil zu werden.
Wenn es das nächste mal passiert, dann bitte einen dieser Links genauer anschauen und seinen Wert 'Weight' posten (oder am besten gleich das ganze Netz hier posten). Dabei bitte den Inhalt des ganzen Edit-Felds 'Weight' kopieren, oft sieht eine Floating-Point Zahl ja ganz gut aus, sofern man nicht auf das 'e+1000' am Ende geschaut hat ;)

Oft ist es auch von Vorteil, Rückkopplungslinks mit dem festen Gewicht '1' auszustatten (und dementsprechend die Eigenschaft 'Lock Weight' zu setzen, damit der Teacher das Gewicht nicht mehr verändert). Gerade Rückkopplungslinks eskalieren besonders gerne.


Viele Grüße,
Thomas Jetter
Post Reply