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 | Имя операции (необязательно). |
| Возвращает | |
|---|---|
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/api_docs/python/tf/raw_ops/Einsum