2016-06-20 7 views
1

Ich bin neu im maschinellen Lernen und suche Hilfe. Ich möchte ein Netzwerk trainieren, um die nächsten Werte erwarte ich wie folgt vorherzusagen:Torch - Große Eingabe- und Ausgabegrößen in neuronales Netzwerk

Hinweis: [val1 val2 ... val 15]

val = 0, wenn es nicht, 1, wenn es nicht vorhanden ist existiert.

Input: [1 1 1 0 0 0 0 0 1 1 1 0 0 0 0]

Output: [1 1 1 0 0 0 0 0 1 1 1 0 0 1 1] (die letzten zwei Werte erscheinen)

So würde mein neuronales Netz 15 Eingänge haben und 15 Ausgänge

Ich mag würde wissen, ob es wäre ein besserer Weg, diese Art von Vorhersage zu tun. Müssen meine Daten auch normalisiert werden?

Jetzt ist das Problem, ich habe nicht 15 Werte, aber tatsächlich 600'000 von ihnen. Kann ein neuronales Netzwerk so große Tensoren handhaben, und ich habe gehört, dass ich die doppelte Anzahl für versteckte Ebeneneinheiten benötige.

Vielen Dank für Ihre Hilfe, Sie Machine Learning-Experte!

Beste

Antwort

1

Dies ist kein Problem für das Konzept eines neuronalen Netzes ist: die Frage ist, ob Ihre Computerkonfiguration und Framework-Implementierung der erforderlichen Speicher liefern. Da Sie Ihre Topologie nicht beschrieben haben, können wir nicht viel tun, um Ihnen dabei zu helfen. Was haben Sie für Parameter- und Gewichtszählungen? Jeder von diesen ist mindestens ein kurzer Float (4 Bytes). Zum Beispiel würde eine direkte FC (vollständig verbundene) Schicht Ihnen (6e5)^2 Gewichtungen oder 3.6e11 * 4 Bytes => 1.44e12 Bytes geben. Ja, das drückt 1,5 Terabyte für die Gewichte dieser Schicht.

Sie können etwas davon mit dem Stil von NN, den Sie wählen, umgehen. Zum Beispiel kann die Aufspaltung in separate Kanäle (z. B. 60 Kanäle mit je 1000 Funktionen) zu erheblichen Speichereinsparungen führen, allerdings auf Kosten der Geschwindigkeit im Training (mehr Schichten) und vielleicht einiger Genauigkeit (obwohl Crossover eine Menge davon beheben kann). . Convolutions können Ihnen auch den gesamten Speicher sparen, wiederum auf Kosten der Trainingsgeschwindigkeit.


600K => 4 => 600K

Diese Klarstellung Pflege meiner Hauptsorgen nimmt: Sie haben 600.000 * 4 Gewichte in jeder der zwei Plätze: 1.200.004 Parameter und 4.8M Gewichte. Das sind insgesamt 6 Millionen Floats, die den RAM eines modernen Allzweckcomputers nicht belasten sollten.

Die Channeling-Idee ist, wenn Sie versuchen, eine dickere Verbindung zwischen Schichten zu haben, wie 600K => 600K FC. In diesem Fall teilen Sie die Daten in kleinere Gruppen auf (normalerweise nur 2-12) und erstellen eine Menge paralleler, vollständig verbundener Streams. Zum Beispiel könnten Sie Ihre Eingabe nehmen und 10 Streams machen, von denen jeder 60K => 60K FC ist. In der nächsten Schicht tauscht man die Organisation aus und verteilt jede Menge von 60K so, dass 1/10 in jeden der nächsten Kanäle geht.

Auf diese Weise haben Sie nur 10 * 60K * 60K Gewichte, nur 10% so viele wie zuvor ... aber jetzt gibt es 3 Schichten. Dennoch ist es eine 5-fache Speichereinsparung für Gewichte, wo Sie die kombinatorische Explosion haben.

+0

Hallo Prune, vielen Dank, dass du dir die Zeit genommen hast zu antworten!Ich bin noch nicht in diesem Stadium in Bezug auf maschinelles Lernen Sprache;) Bisher benutze ich Fackel und mein NN ist das folgende: Sequenzielle Container: Linear (600K, 4HU) -> ReLu-> Linear (4, 600K) -> SoftMax. Mit einer Lernrate von 0.01 und der Anzahl der Iterationen (Übergänge über den Datensatz) beträgt 100. Es ist auch ein FC-Netzwerk (Sequential). Ich dachte, dass CNN eher für die Bildverarbeitung und nicht für 1D-sequentielle Daten geeignet wäre ... Wie sollen meine Daten mit 600 Kanälen und 1000 Funktionen organisiert werden? Danke nochmal – Hetana

+0

Was ist "4HU"? Das sieht so aus als hättest du eine versteckte Schicht von nur 4 Neuronen? – Prune

+0

Ja 4 Neuronen, versteckte Einheiten meinte ich, sorry. Ich versuche jetzt SparseLinea zu verwenden – Hetana

Verwandte Themen