tf.einsum
| Просмотреть исходный код на GitHub |
Сжатие тензора по указанным индексам и внешнее произведение.
tf.einsum(
equation, *inputs, **kwargs
)
Эта функция возвращает тензор, элементы которого определяются выражением equation, которое записано в сокращенной форме, вдохновленной соглашением об обозначении Эйнштейна. Например, рассмотрим умножение двух матриц A и B для получения матрицы C. Элементы C задаются следующим образом:
C[i,k] = sum_j A[i,j] * B[j,k]
Соответствующее выражение equation:
ij,jk->ik
В общем случае, выражение equation получается из более привычного уравнения с элементами по:
- удалению имен переменных, скобок и запятых,
- замене "*" на ",",
- удалению знаков суммирования и
- перемещению результата вправо и замене "=" на "->".
Многие общие операции могут быть выражены таким образом. Например:
# 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]
Для включения и управления широковещательной передачей используйте многоточие. Например, для выполнения пакетного умножения матриц можно использовать:
einsum('...ij,...jk->...ik', u, v)
Эта функция ведет себя как numpy.einsum, но не поддерживает:
- Подстрочные индексы, где ось появляется более одного раза для одного входного значения (например,
ijj,k->ik), если это не след (например,ijji).
| Аргументы | |
|---|---|
equation | строка, описывающая сокращение в том же формате, что и numpy.einsum. |
*inputs | входные данные для сокращения (каждый - тензор), формы которых должны соответствовать equation. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
Сжатый тензор, форма которого определяется equation. |
| Исключения | |
|---|---|
ValueError | Если
|
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/einsum