2017-01-25 2 views
1

Ich versuche, eine durchschnittliche Pooling-Funktion über die Ausgänge eines LSTM für eine Sequenz anzuwenden:CNTK: Anwenden des durchschnittlichen Pooling über LSTM Ausgang

Sequential([ 
      Embedding(emb_dim), 
      pooling(Recurrence(LSTM(hidden_dim), go_backwards=False), PoolingType_Average, (hidden_dim,)), 
      Dense(num_labels) 
     ]) 

Wenn ich nur das letzte Element der Sequenz verwendet wurde, war es funktioniert ohne Probleme:

Sequential([ 
      Embedding(emb_dim), 
      sequence.last(Recurrence(LSTM(hidden_dim), go_backwards=False)), 
      Dense(num_labels) 
     ]) 

a. Ist das Hinzufügen von Pooling in der Netzwerkdefinition korrekt und beschreibt die Form, die ich eingestellt habe, die Operation, die ich ausführen möchte? (d. h. um die Vektoren, die von dem LSTM für jede Probe in der Sequenz kommen, zu mitteln) b. Das Format meiner Eingabedaten, die bei der Verwendung von sequenz.last funktionierten, ist das Folgende (für 1 Sequenz). Muss es geändert werden, um ein mittleres Pooling anzuwenden?

1  |x 5:1 |y 1 0 0 0 0 
1  |x 414:1 
1  |x 8:1 

Der Fehler, den ich bekommen ist:

Datei .../model_training.py“, Zeile 55, in Zug criterion.placeholders [1]: Eingang (num_labels, dynamic_axes = [Axis.default_batch_axis()])}) Datei ".../anaconda3/envs/cntk-py35/lib/python3.5/site-packages/cntk/utils/swig_helper.py", Zeile 58, im Wrapper result = f (* args, ** kwds) Datei ".../anaconda3/envs/cntk-py35/lib/python3.5/site-packages/cntk/ops/functions.py", Zeile 449, in replace_placeholders return super (Funktion, self) .replace_placeholders (Substitutionen) Datei ".../anaconda3/envs/cntk-py35/lib/python3.5/site-packages/cntk/cntk_py.py", Zeile 1246, in replace_placeholders Rückgabe _cntk_py.Function_replace_placeholders (self, placeholderReplacements) Laufzeitfehler: Wenn ein Operand einer elementweisen Operation momentan über dynamische Achsen verfügt, müssen diese mit den dynamischen Achsen der anderen Operanden übereinstimmen.

Antwort

0

Pooling funktioniert nur mit statischen Achsen. Es gibt eine Verzweigung mit einer sequence.pooling Operation, die Ende Januar (2017) im Master verfügbar sein sollte. Sie können auch ein durchschnittliches Pooling mit einer Wiederholung durchführen. Diese example Pools mit einem "gelernten" durchschnittlichen Pooling über eine Wiederholung.

Verwandte Themen