tf.einsum
| Просмотреть исходный код на GitHub |
Сжатие тензора по указанным индексам и внешнее произведение.
tf.einsum(
equation, *inputs, **kwargs
)
Einsum позволяет определять тензоры, определяя их вычисление по элементам. Это вычисление определяется equation, сокращённой формой, основанной на суммировании по Эйнштейну. Например, рассмотрим умножение двух матриц A и B для образования матрицы C. Элементы C задаются следующим образом:
C[i,k] = sum_j A[i,j] * B[j,k]
Соответствующее equation выглядит следующим образом:
ij,jk->ik
В общем случае, чтобы преобразовать уравнение по элементам в строку equation, используйте следующую процедуру (промежуточные строки для примера умножения матриц указаны в скобках):
- удалите имена переменных, скобки и запятые, (
ik = sum_j ij * jk) - замените "*" на ",", (
ik = sum_j ij , jk) - удалите знаки суммирования, и (
ik = ij, jk) - переместите результат вправо, заменив "=" на "->". (
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. |
*inputs | входные данные для сжатия (каждый из которых является тензором), формы которых должны соответствовать equation. |
**kwargs |
|
| Возвращаемые значения | |
|---|---|
Результат сжатия Tensor, форма которого определяется 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/r2.3/api_docs/python/tf/einsum