tensorflow einsum vs.matmul vs.tensordot

tensorflow中,函数tf.einsumtf.matmultf.tensordot都可以用于同一任务。(我意识到这一点,tf.einsum并且tf.tensordot具有更通用的定义;我也意识到它tf.matmul具有批处理功能。)在可以使用这三种功能中的任何一种的情况下,一种功能往往最快吗?还有其他推荐规则吗?

例如,假设这A是一个等级2张量,并且b是等级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)

一般比其他任何人都好吗?

回答:

这两个tf.tensordot()tf.einsum()是语法糖那套一个或更多的调用tf.matmul()(虽然在一些特殊情况下tf.einsum()可以降低到简单的按元素tf.multiply())。

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

以上是 tensorflow einsum vs.matmul vs.tensordot 的全部内容, 来源链接: utcz.com/qa/399471.html

回到顶部