Функция einsum
Функция einsum выполняет операции умножения и суммирования элементов тензоров по заданным индексам, используя нотацию Эйнштейна. Первым параметром функция принимает строку с уравнением, в котором указаны индексы входных и выходного тензоров. Далее передаются сами тензоры. Буквы в уравнении обозначают оси тензоров, а запятая разделяет операнды. Если индекс повторяется в разных тензорах, по нему выполняется суммирование. Если индекс отсутствует в правой части уравнения, он также суммируется.
Синтаксис
tf.einsum(equation, *inputs, [optimize])
Пример
Давайте перемножим два одномерных тензора и получим скаляр:
import tensorflow as tf
t1 = tf.constant([1, 2, 3])
t2 = tf.constant([4, 5, 6])
res = tf.einsum('i,i->', t1, t2)
print(res)
Результат выполнения кода:
tf.Tensor(32, shape=(), dtype=int32)
Пример
Давайте перемножим матрицу и вектор:
Результат выполнения кода:
tf.Tensor([14 32], shape=(2,), dtype=int32)
Пример
Давайте найдем след матрицы, суммируя элементы по диагонали:
import tensorflow as tf
t = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
res = tf.einsum('ii->', t)
print(res)
Результат выполнения кода:
tf.Tensor(15, shape=(), dtype=int32)
Пример
Давайте транспонируем матрицу, поменяв индексы местами:
import tensorflow as tf
t = tf.constant([[1, 2, 3], [4, 5, 6]])
res = tf.einsum('ij->ji', t)
print(res)
Результат выполнения кода:
tf.Tensor(
[[1 4]
[2 5]
[3 6]], shape=(3, 2), dtype=int32)
Смотрите также
-
функцию
matmul,
которая выполняет матричное умножение тензоров -
функцию
tensordot,
которая вычисляет скалярное произведение тензоров по осям -
функцию
multiply,
которая выполняет поэлементное умножение тензоров -
функцию
reduce_sum,
которая суммирует элементы тензора по осям