张量流元素矩阵乘法

时间:2016-02-22 21:29:15

标签: matrix matrix-multiplication tensorflow

假设我在tensorflow中有两个张量,第一个维度表示批处理中训练示例的索引,其他维度表示一些数据矩阵向量。例如

vector_batch = tf.ones([64, 50])
matrix_batch = tf.ones([64, 50, 50])

我很好奇执行矢量*矩阵的最惯用方法是什么,对于每对矢量,共享沿第一维的索引的矩阵。

Aka是最惯用的写作方式:

result = tf.empty([64,50])
for i in range(64):
    result[i,:] = tf.matmul(vector_batch[i,:], matrix_batch[i,:,:])

组织输入向量形状以使此过程尽可能简单/干净的最佳方法是什么?

2 个答案:

答案 0 :(得分:6)

执行此操作的最常用方法可能是使用tf.batch_matmul()运算符(与tf.expand_dims()tf.squeeze()结合使用:

vector_batch = tf.placeholder(tf.float32, shape=[64, 50])
matrix_batch = tf.placeholder(tf.float32, shape=[64, 50, 50])

vector_batch_as_matrices = tf.expand_dims(vector_batch, 1)
# vector_batch_as_matrices.get_shape() ==> [64, 1, 50]

result = tf.batch_matmul(vector_batch_as_matrices, matrix_batch)
# result.get_shape() ==> [64, 1, 50]

result = tf.squeeze(result, [1])
# result.get_shape() ==> [64, 50]

答案 1 :(得分:0)

看来tf.matmul已经支持这种类型的“ nd”操作:https://stackoverflow.com/a/43819275/2930156