このページは Cloud Translation API によって翻訳されました。
Switch to English

tf.einsum

TensorFlow 1バージョン GitHubでソースを表示する

指定されたインデックスと外積に対するテンソルの収縮。

ノートブックで使用

ガイドで使用チュートリアルで使用

Einsumでは、要素ごとの計算を定義することでTensorを定義できます。この計算は、Einstein総和に基づく省略形であるequationによって定義されます。例として、2つの行列AとBを乗算して行列Cを形成することを検討してください。Cの要素は次のように与えられます。

   C[i,k] = sum_j A[i,j] * B[j,k]
 

対応するequationは次のとおりです。

   ij,jk->ik
 

一般に、要素ごとの方程式をequation文字列に変換するには、次の手順を使用します(括弧内にある行列乗算の例の中間文字列)。

  1. 変数名、角括弧、コンマを削除します( ik = sum_j ij * jk
  2. 「*」を「、」で置き換えます( ik = sum_j ij , jk
  3. 総和記号を削除し、( ik = ij, jk
  4. 「=」を「->」に置き換えながら、出力を右に移動します。 ( ij,jk->ik

このように、多くの一般的な操作を表現できます。例えば:

 # Matrix multiplication
einsum('ij,jk->ik', m0, m1)  # output[i,k] = sum_j m0[i,j] * m1[j, k]

# Dot product
einsum('i,i->', u, v)  # output = sum_i u[i]*v[i]

# Outer product
einsum('i,j->ij', u, v)  # output[i,j] = u[i]*v[j]

# Transpose
einsum('ij->ji', m)  # output[j,i] = m[i,j]

# Trace
einsum('ii', m)  # output[j,i] = trace(m) = sum_i m[i, i]

# Batch matrix multiplication
einsum('aij,ajk->aik', s, t)  # out[a,i,k] = sum_j s[a,i,j] * t[a, j, k]
 

ブロードキャストを有効にして制御するには、省略記号を使用します。たとえば、バッチディメンション全体でNumPyスタイルのブロードキャストを使用してバッチマトリックス乗算を実行するには、次を使用します。

 einsum('...ij,...jk->...ik', u, v)
 

equation numpy.einsumと同じ形式で収縮を説明するstr
*inputs 契約への入力(それぞれがTensor )。その形状はequationと一致している必要がありequation
**kwargs

  • optimize:opt_einsumを使用して収縮パスを見つけるために使用する最適化戦略。 「貪欲」、「最適」、「branch-2」、「branch-all」または「auto」である必要があります。 (オプション、デフォルト:「貪欲」)。
  • name:操作の名前(オプション)。

収縮したTensorequationによって決定さequation形状。

ValueError もし

  • equationの形式が正しくありません、
  • 入力数またはその形状がequation一致していません。