2014-01-14 6 views
8

nehme ich die folgende Funktion in Theano umgesetzt haben:Funktionen Theano zusammengestellt Reusing

import theano.tensor as T 
from theano import function 
x = T.dscalar('x') 
y = T.dscalar('y') 
z = x + y 
f = function([x, y], z) 

Wenn ich versuche es ein Graph von Berechnungen auszuführen aufgebaut ist, wird die Funktion optimiert und zusammengestellt.

Wie kann ich diesen kompilierten Codeabschnitt in einem Python-Skript und/oder einer C++ - Anwendung wiederverwenden?

EDIT: Das Ziel ist es, ein Deep Learning-Netzwerk aufzubauen und es in einer endgültigen C++ App wieder zu verwenden.

+0

Ich habe das gleiche Problem. Hast du eine Lösung gefunden? – Shai

+0

Es scheint, dass Theano Optimierungsresultate zwischenspeichert, so dass jeder nachfolgende Anruf ziemlich schnell sein sollte. Nach z.B. Workstation Neustart Sie müssen die Optimierung erneut durchlaufen. Beizen löst das Problem. Nach dem Kompilieren eines Theano-Funktionsobjekts können Sie es beilegen und dann bei Bedarf laden. –

+0

Kann ich die gebeizte Funktion aus C/C++ - Code aufrufen? – Shai

Antwort

7

Derzeit ist dies nicht möglich. Es gibt einen Benutzer, der Theano modifiziert hat, um das Beizen der Theano-Funktion zu ermöglichen, aber beim Entspinnen optimieren wir die Grafik bereits.

Es gibt eine Pull-Anforderung, mit der Theano eine C++ - Bibliothek generieren kann. Der Benutzer kann es dann selbst kompilieren und als normale C++ - Bibliothek verwenden. Die lib verbindet sich mit der python-lib und erfordert die Installation von numpy. Aber das ist nicht für eine breite Verwendung bereit.

Was ist Ihr Ziel? Um die Kompilierzeit zu sparen? Wenn das der Fall ist, speichert Theano bereits das C++ - Modul, das kompiliert wird, so dass das Kompilieren beim nächsten Mal schneller ist. Bei einem großen Graphen wird die Optimierungsphase jedoch immer wie oben beschrieben wiederholt, und dies kann eine beträchtliche Zeit dauern.

Was ist Ihr Ziel?

Daran arbeiten wir gerade. Stellen Sie sicher, dass Sie die neueste Version von Theano (0.6) verwenden, da diese schneller kompiliert wird. Die Entwicklungsversion ist auch ein bisschen schneller.

+0

Ich habe das Ziel der ursprünglichen Frage hinzugefügt. Ich denke, ich muss vorerst mit Lua gehen. –

+0

Sie können Python-Code von C++ aufrufen. Dies würde Ihnen erlauben zu tun, was Sie wollen. Aber es verlangt, dass Python, NumPy und Theano installiert sind. Nicht ideal für die Neuverteilung, aber wenn Sie die Umgebung kontrollieren, kann es funktionieren. – nouiz

+0

Würden Sie einen Link zur PR veröffentlichen? –