2016-08-18 4 views
0

Ich bin neu in Theano und Deep Learning, ich führe meine Experimente in Theano, aber ich möchte die Zeit, die ich pro Epoche verbringe, reduzieren, indem ich die Datenerweiterung direkt mit der GPU durchführe.Datenvergrößerung mit GPU in Theano

Leider kann ich PyCuda nicht verwenden, also würde ich gerne wissen, ob es möglich ist, grundlegende Datenerhöhung mit Theano durchzuführen. Zum Beispiel Übersetzung oder Drehung in Bildern, während ich in CPU mit Numpy scipy Funktionen benutze, aber es ist ziemlich langsam.

+0

Ich würde [dieses Repo] (https://github.com/benanne/kaggle-ndsb) betrachten. Es ist Code von einem Kaggle-Wettbewerb, der vom Schöpfer des [Lasagne] (https://github.com/Lasagne/Lasagne) -Projekts geschrieben wurde. In seiner Lösung führt er die gesamte Datenerweiterung mit seiner CPU durch und legt jede erweiterte Charge in eine Warteschlange, während die GPU Chargen aus der Warteschlange und den Zügen ergreift. – gobrewers14

Antwort

0

Wenn die Datenerweiterung Teil Ihres Berechnungsgraphen ist und auf der GPU ausgeführt werden kann, wird sie natürlich auf der GPU ausgeführt. Daher beschränkt sich die Frage auf "ist es möglich, allgemeine Datenerhöhungsaufgaben mit Theano-Tensor-Operationen auf der GPU durchzuführen".

Wenn die Transformationen, die Sie anwenden möchten, nur Übersetzungen sind, können Sie einfach theano.tensor.roll verwenden, gefolgt von einer Maskierung. Wenn Sie auch die Rotationen wünschen, werfen Sie einen Blick auf this implementation of spatial transformer network. Sehen Sie sich insbesondere die Funktion _transform an, die als Eingabe ein Matrix-Theta mit einer 2x3-Transformation (links 2x2 ist Rotation und rechts 1x2 ist Translation) eins pro Sample und den eigentlichen Samples benötigt und die Rotation und Translation auf anwendet diese Proben. Ich habe nicht bestätigt, dass das, was es tut, für die GPU optimiert ist (d. H. Es könnte sein, dass der Flaschenhals dieser Funktion auf der CPU ausgeführt wird, was es für Ihren Anwendungsfall nicht geeignet macht), aber es ist ein guter Ausgangspunkt.