En tensorflow, les fonctions tf.einsum
, tf.matmul
et tf.tensordot
peuvent toutes être utilisées pour les mêmes tâches. (Je me rends compte que tf.einsum
et tf.tensordot
ont des définitions plus générales, je réalise également que tf.matmul
a la fonctionnalité par lots.) Dans une situation où l'un des trois pourrait être utilisé, est-ce qu'une fonction a tendance à être la plus rapide? Y a-t-il d'autres règles de recommandation? Par exemple, supposons que A
est un tenseur de rang 2 et b
est un tenseur de rang 1 et que vous souhaitez calculer le produit c_j = A_ij b_j
. Sur les trois options:tensorflow einsum vs matmul vs tensordot
c = tf.einsum('ij,j->i', A, b)
c = tf.matmul(A, tf.expand_dims(b,1))
c = tf.tensordot(A, b, 1)
est tout préférable généralement aux autres?
Dans mon exemple, je dois utiliser 'tf.expand_dims' sur' b' avant d'appliquer 'tf.matmul'. En outre, l'utilisation de 'tf.matmul' renvoie un tenseur de rang 2 plutôt qu'un tenseur de rang 1; rendre 'c' un tenseur de rang 1 nécessite d'appeler' tf.squeeze' après la multiplication de la matrice. Les opérations 'squeeze' et' expand_dims' ont-elles un coût en temps significatif? –
Ce sont des opérations purement méta-données, donc elles ont un coût constant très faible, qui devrait être dominé par le 'tf.matmul()' lui-même. – mrry