2016-07-26 35 views
2

Angenommen, ich erhalte eine Eingangsmatrix nach Lookup-Einbettung, die wie folgt aussieht:verketten Funktionen Wort an der Eingangsschicht während der Laufzeit des Einbettens

[[[0.5, 0.25, 0.47, 0.86], [0.8. 0.12, 0.63, 0.97], [0.7, 0.47, 0.32, 0.01]], ... , [[...]]] i., e jede Einbettung ist von dim = 4 und die Satzlänge ist 3, wie in dem erwähnten Fall angegeben.

Wie können wir einen Merkmalsvektor von Dim Say 2, der jedem Wort im Satz dynamisch (d. H. Während der Laufzeit) mit dem Platzhalter in Tensorflow/TFLearn oder Theano? So final input will be of dim = embedding_dim + feature_dim.

P.S: Eingabe Matrix ist ein 3D-Tensor der Form [x y z], x = Anzahl der Sätze im Batch, y = Anzahl der Wörter in den Sätzen (einschließlich Auffüllen). z = Einbettungsdimension Die endgültige Form wäre [x y z + 2].

Antwort

4

In Tensorflow können Sie einen Platzhalter der gewünschten Form [x, y, 2] erstellen und ihn dann mit tf.concat mit dem Eingabe-Tensor verketten. Unter der Annahme, ‚Eingänge‘ Ihre [x, y, z] Einbettung Tensor, Sie so etwas tun kann:

features = tf.placeholder(tf.float32, [x, y, 2]) 
new_inputs = tf.concat(2, [inputs, features]) # Concatenate along the 3rd dimension 
+0

Wenn die Merkmale gemeinsam über alle Wörter im Satz ist, wie kann ich das gleiche erreichen, ohne die Wiederholung Feature. Also, was ich meine ist, dass ich eine Funktion von Dim 2 für einen Satz habe (was für alle Wörter im Satz üblich ist). Ich möchte den Raum optimieren, damit ich die Funktion nicht für alle "y" -Wörter im Satz wiederhole. – user3480922

+1

Ich glaube nicht, dass du das tun kannst, ohne den Code der rnn oder der Zelle zu ändern ... wenn jemand es besser weiß, korrigiere mich bitte. Wenn ein kleinerer Platzhalter der Platz-/Speicherbeschränkung helfen würde, können Sie den Platzhalter in [x, 2] ändern und ihn dann in die Verkettung einfügen ... tf.concat (2, [inputs, tf.tile (tf. expand_dims (Merkmale, 1), [1, y, 1]]) –