在Tensorflow中,函数
例如,假设
tf.einsum
、tf.matmul
和tf.tensordot
都可以用于相同的任务。(我知道tf.einsum
和tf.tensordot
有更通用的定义;我也知道tf.matmul
具有批处理功能。)在任何一种函数可以使用的情况下,哪个函数更快?还有其他的推荐规则吗?例如,假设
A
是一个二阶张量,b
是一个一阶张量,你想计算乘积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.matmul
之前,我必须对b
使用tf.expand_dims
。此外,使用tf.matmul
返回一个秩为2的张量,而不是秩为1的张量;使c
成为秩为1的张量需要在矩阵乘法后调用tf.squeeze
。这些squeeze
和expand_dims
操作是否具有有意义的时间成本? - John Klevetf.matmul()
本身所主导。 - mrry