2017-01-24 3 views
0

Ich versuche, eine LSTM NDL config Python zu konvertieren, aber nicht in der Lage, die Unterstützung für folgende NDL PrimitivenPrimitives verwendet LSTM NDL Python in CNTK zu konvertieren

  • Verzögerung zu finden - Wie Argument übergeben Verzögerung einer später im Netzwerk definierten Variablen? ZB für Peep-Hole-LSTM, Zelle Statusvariable zB c_t ist später definiert, aber eine Verzögerung wird benötigt, um c_t_minus_1 Zellenstatus zu erhalten, zB c_t_minus_1 = Verzögerung (c_t). Python erlaubt jedoch nicht, dass Variablen (zB c_t) zuerst verwendet und später definiert werden.

  • RowStack, RowSlice - Gibt es Ersatz für diese Primitiven? Wenn nicht, wie man sie in Python implementiert? Können wir mit Variablen so arbeiten, als wären sie numpige Arrays?

  • DiagTime vs ElementTimes - Gibt es einen Unterschied zwischen ihnen für Vektorelement weise Multiplikation? Wird DiagTimes auch in Python unterstützt?

  • Parameter Initialisierung - Wie Parameter aus der Datei in Python initialisieren und computeGradient als false setzen. Ich kann keine Unterstützung oder Beispiele dafür finden.

Antwort

1

die Antworten von CNTK Team Gefunden - https://github.com/Microsoft/CNTK/wiki/Port-LSTM-NDL-primitives-to-Python

  1. Sie placeholder_variable und später einen Anruf zu replace_placeholders verwenden müssen. Hier ist ein einfaches Beispiel für die Verwendung: https://github.com/Microsoft/CNTK/wiki/Implement-an-attention-mechanism

  2. Verwendung Spleiß

  3. Verwendung elementweise Multiplikation (a.k.a *)

  4. Verwendung Konstanten. Sie können den Anfangswert über ein Numy-Array festlegen. Es gibt viele Möglichkeiten, eine Textdatei (oder eine andere Datei) in ein numpy Array zu laden. np.loadtxt sollte funktionieren, aber ich habe es nicht versucht.