web-dev-qa-db-ja.com

tensorflow einsum対matmul対tensordot

Tensorflowでは、関数_tf.einsum_、_tf.matmul_、および_tf.tensordot_をすべて同じタスクに使用できます。 (_tf.einsum_と_tf.tensordot_にはより一般的な定義があることを理解しています。また、_tf.matmul_にはバッチ機能があることを理解しています。)最速に?他の推奨ルールはありますか?

たとえば、Aがランク2のテンソルであり、bがランク1のテンソルであり、積_c_j = A_ij b_j_を計算するとします。 3つのオプションのうち:

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

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

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

他のものより一般的に好ましいものはありますか?

16
John Kleve

tf.tensordot()tf.einsum() はどちらも tf.matmul() の1回以上の呼び出しをラップする構文糖です=(ただし、一部の特殊なケースでは、tf.einsum()はより単純な要素ごとに縮小できます tf.multiply() )。

限界では、3つの関数すべてが同じ計算に対して同等のパフォーマンスを持つことを期待します。ただし、行列が小さい場合は、tf.matmul()を直接使用する方が効率的です。これは、操作が少ないシンプルなTensorFlowグラフが生成され、操作ごとの呼び出しコストが低くなるためです。

13
mrry