tensorflow einsum vs. matmul vs. tensordot

时间:2017-03-29 17:51:04

标签: python tensorflow numpy-einsum

在tensorflow中,函数tf.einsumtf.matmultf.tensordot都可以用于相同的任务。 (我意识到tf.einsumtf.tensordot有更一般的定义;我也意识到tf.matmul具有批处理功能。)在可以使用三者中的任何一种的情况下,一个函数是否倾向于要最快?还有其他推荐规则吗?

例如,假设A是rank-2张量,而b是rank-1张量,并且您想要计算产品c_j = A_ij b_j。在三个选项中:

c = tf.einsum('ij,j->i', A, b)

c = tf.matmul(A, tf.expand_dims(b,1))

c = tf.tensordot(A, b, 1)

是否通常优于其他人?

1 个答案:

答案 0 :(得分:11)

tf.tensordot()tf.einsum()都是包含tf.matmul()的一个或多个调用的语法糖(尽管在某些特殊情况下tf.einsum()可以简化为更简单的元素{{3 }})。

在极限中,我希望所有三个函数在相同的计算中具有相同的性能。但是,对于较小的矩阵,直接使用tf.matmul()可能更有效,因为它会产生更简单的TensorFlow图,操作更少,因此每个操作的调用成本会更低。