Tensorflow 顺序矩阵乘法

Tensorflow sequential matrix multiplication

我有两个如下形状的张量:

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

我想做的是对 tensor2 中的每个 [100] dimensional 向量获得与 tensor1 中对应的 [max_time, 100] dimensional 矩阵的矩阵乘法得到 batch_size max_time 维向量的数量;这与 [batch_size, max_time] dimensional 矩阵相同。

对于那些知道的人:我基本上是在尝试对 seq2seq 模型的编码器给出的编码输入实施基于内容的关注。所有 [max_time] 维向量只是我后来 softmax.

的注意力值

我知道 tensorflow 提供 AttentionWrapper 以及 contrib 包中的各种助手。但是,我希望这样做,因为我正在尝试使用注意力机制来获得混合注意力掩码。

我已经尝试了 tf.while_loop,但是在展开循环时卡在了 ? 形状中。矢量化的实现对我来说也不是很直接。请帮忙。

你可以做的是使用 tf.matmul 并像处理 100 * 1 矩阵一样处理你的向量。

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