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.
© 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.4/api_docs/python/tf/raw_ops/Einsum