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)
我有两个如下形状的张量:
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)