tf.raw_ops.Einsum
Сжатие тензоров в соответствии с соглашением об эйнштейновской сумме.
tf.raw_ops.Einsum(
inputs, equation, name=None
)
Реализует обобщенное сжатие и сокращение тензоров. Каждый входной тензор должен иметь соответствующий индекс, появляющийся в левой части уравнения через запятую. Правая часть уравнения содержит выходной индекс. Входные и выходные индексы должны состоять из нуля или более именованных меток осей и не более одной многоточия (...).
Именованные метки осей могут быть любым символом, кроме имеющих специальное значение, а именно ,.->. Поведение этого оператора не определено, если он получает неправильно отформатированное уравнение; так как проверка выполняется во время построения графа, мы опускаем проверки формата во время выполнения.
Примечание: Этот оператор не предназначен для вызова пользователем; вместо этого пользователи должны вызыватьtf.einsumнапрямую. Это скрытый оператор, используемыйtf.einsum.
Операции применяются к входным данным в соответствии со следующими правилами:
(a) Обобщенные диагонали: для размерностей входных данных, соответствующих меткам осей, которые появляются более одного раза в одном входном индексе, мы берем обобщенную (k-мерную) диагональ. Например, в уравнении iii->i с формой входных данных [3, 3, 3], обобщенная диагональ будет состоять из 3 элементов в индексах (0, 0, 0), (1, 1, 1) и (2, 2, 2) для создания тензора формы [3].
(b) Сокращение: оси, соответствующие меткам, появляющимся только в одном входном индексе, но не в выходном индексе, суммируются перед сжатием тензора. Например, в уравнении ab,bc->b, метки осей a и c являются метками осей сокращения.
(c) Размеры пакета: оси, соответствующие меткам, появляющимся в каждом из входных индексов и также в выходном индексе, составляют размеры пакета в сжатии тензора. Неименованные метки осей, соответствующие многоточиям (...), также соответствуют размерам пакета. Например, для уравнения, обозначающего матричное умножение с пакетами, bij,bjk->bik, метка оси b соответствует размеру пакета.
(d) Сжатие: в случае двоичного einsum оси, соответствующие меткам, появляющимся в двух разных входах (и не в выходе), сжимаются друг против друга. Рассмотрим снова уравнение матричного умножения с пакетами (bij,bjk->bik), сжатой меткой оси является j.
(e) Расширение диагонали: если выходные индексы содержат повторяющиеся (явные) метки осей, применяется обратная операция к (a). Например, в уравнении i->iii, и форме входных данных [3], выходные данные формы [3, 3, 3] все нули, за исключением (обобщенной) диагонали, которая заполняется значениями из входных данных. Примечание: эта операция не поддерживается np.einsum или tf.einsum; она предоставляется для возможности вычисления символьного градиента tf.einsum.
Выходные индексы должны содержать только метки, появляющиеся по крайней мере в одном из входных индексов. Кроме того, все размерности, сопоставленные с одной и той же меткой оси, должны быть равны.
Любой из входных и выходных индексов может содержать не более одной многоточия (...). Эти многоточия сопоставляются с измерениями, не соответствующими никаким именованным меткам осей. Если два входа содержат многоточия, они транслируются в соответствии со стандартными правилами трансляции NumPy правила.
Транслированные размерности размещаются в соответствующем месте многоточия в выходном индексе. Если транслированные размерности не пустые, а выходные индексы не содержат многоточий, то генерируется ошибка InvalidArgument.
| Аргументы | |
|---|---|
inputs | Список из как минимум 1 Tensor объекта одного типа. Список из 1 или 2 тензоров. |
equation | string. Строка, описывающая операцию Эйштейновской суммы; в формате np.einsum. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A Tensor. Имеет тот же тип, что и inputs. |
Совместимость с numpy
Аналогично numpy.einsum.
Сравнение с numpy.einsum:
- Этот оператор поддерживает только унарные и бинарные формы
numpy.einsum. - Этот оператор не поддерживает неявную форму. (т.е. уравнения без
->). -
Этот оператор также поддерживает повторяющиеся индексы в выходном индексе, что не поддерживается
numpy.einsum.
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/raw_ops/Einsum