2017-11-29 20 views
1

は、私は次の形の2つのテンソル持っている:私はしたい何Tensorflowシーケンシャル行列の乗算

tensor1 => shape(?, ?, 100) # corresponds to [batch_size, max_time, embedding_size] 
tensor2 => shape(?, 100) # corresponds to [batch_size, embedding_size] 

batch_size数を取得するにはtensor1[max_time, 100] dimensional行列を対応する行列の乗算を得るtensor2内のすべての[100] dimensionalベクトルのためでありますmax_time次元ベクトル;これは[batch_size, max_time] dimensionalマトリックスと同じです。

知っている人のために:私は基本的にseq2seqモデルのエンコーダによって与えられたコード化された入力に対してコンテンツベースの注意を実装しようとしています。すべての[max_time]次元ベクトルは、私が後でsoftmaxする注目値です。

テンソルフローはcontribパッケージのAttentionWrapperとさまざまなヘルパーを提供しています。しかし、私はハイブリッドアテンションマスクを得るために注意の仕組みを実験しているので、これをやりたい。

私はtf.while_loopを試しましたが、ループをアンロールするために?の形になってしまいました。ベクトル化された実装は、私にとってはまっすぐ前進していないようです。助けてください。

答えて

1

あなたができることは、tf.matmulを使用し、100 * 1行列のようなベクトルを扱うことです。

tensor2 = tf.expand_dims(tensor2, 2) 
result = tf.matmul(tensor1, tensor2) 
+0

ありがとうございます(多くの役に立っています)。私は 'tf.matmul'が' rank 2 'を持つ引数に対して異なる動作をしていることを知らなかった。 –