Contracción tensorial según la convención de suma de Einstein.
Implementa la contracción y reducción generalizada del tensor. Cada tensor de entrada debe tener un subíndice de entrada correspondiente que aparezca en el lado izquierdo de la ecuación, separado por comas. El lado derecho de la ecuación consta del subíndice de salida. Los subíndices de entrada y el subíndice de salida deben consistir en cero o más etiquetas de eje con nombre y como máximo una elipsis (`...`).
Las etiquetas de los ejes nombrados pueden ser cualquier carácter distinto de aquellos que tienen un significado especial, a saber, `,.->`. El comportamiento de esta Op no está definido si recibe una ecuación mal formateada; Dado que la validación se realiza en el momento de la creación del gráfico, omitimos las comprobaciones de validación de formato en el tiempo de ejecución.
Nota: Esta operación no está destinada a ser invocada por el usuario; en su lugar, los usuarios deberían llamar directamente tf.einsum
. Es una operación oculta utilizada por tf.einsum
.
Las operaciones se aplican a las entradas de acuerdo con las siguientes reglas:
(a) Diagonales generalizadas: para las dimensiones de entrada correspondientes a etiquetas de eje que aparecen más de una vez en el mismo subíndice de entrada, tomamos la diagonal generalizada (`k`-dimensional). Por ejemplo, en la ecuación `iii->i` con forma de entrada `[3, 3, 3]`, la diagonal generalizada consistiría en `3` elementos en los índices `(0, 0, 0)`, `(1 , 1, 1)` y `(2, 2, 2)` para crear un tensor de forma `[3]`.
(b) Reducción: los ejes correspondientes a las etiquetas que aparecen solo en un subíndice de entrada pero no en el subíndice de salida se suman antes de la contracción del tensor. Por ejemplo, en la ecuación `ab,bc->b`, las etiquetas de los ejes `a` y `c` son las etiquetas de los ejes de reducción.
(c) Dimensiones del lote: los ejes correspondientes a las etiquetas que aparecen en cada uno de los subíndices de entrada y también en el subíndice de salida conforman las dimensiones del lote en la contracción tensorial. Las etiquetas de eje sin nombre correspondientes a puntos suspensivos (`...`) también corresponden a dimensiones de lote. Por ejemplo, para la ecuación que denota la multiplicación de matrices por lotes, `bij,bjk->bik`, la etiqueta del eje `b` corresponde a una dimensión de lote.
(d) Contracción: en el caso de einsum binario, los ejes correspondientes a etiquetas que aparecen en dos entradas diferentes (y no en la salida) se contraen entre sí. Considerando nuevamente la ecuación de multiplicación de matrices por lotes (`bij,bjk->bik`), la etiqueta del eje contraído es `j`.
(e) Expandir diagonal: si los subíndices de salida contienen etiquetas de eje repetidas (explícitas), se aplica la operación opuesta a (a). Por ejemplo, en la ecuación `i->iii` y la forma de entrada `[3]`, la salida de la forma `[3, 3, 3]` son todos ceros, excepto la diagonal (generalizada) que se rellena con valores de la entrada. Nota: Esta operación no es compatible con `np.einsum` o tf.einsum
; se proporciona para permitir calcular el gradiente simbólico de tf.einsum
.
Los subíndices de salida deben contener solo etiquetas que aparezcan en al menos uno de los subíndices de entrada. Además, todas las dimensiones asignadas a la misma etiqueta de eje deben ser iguales.
Cualquiera de los subíndices de entrada y salida puede contener como máximo una elipsis (`...`). Estos puntos suspensivos se asignan a dimensiones que no corresponden a ninguna etiqueta de eje con nombre. Si dos entradas contienen puntos suspensivos, se transmiten de acuerdo con las [reglas] de transmisión estándar de NumPy (http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html).
Las dimensiones transmitidas se colocan en la ubicación correspondiente de los puntos suspensivos en el subíndice de salida. Si las dimensiones difundidas no están vacías y los subíndices de salida no contienen puntos suspensivos, se genera un error de InvalidArgument.
Constantes
Cadena | OP_NOMBRE | El nombre de esta operación, como lo conoce el motor central de TensorFlow. |
Métodos públicos
Salida <T> | como salida () Devuelve el identificador simbólico del tensor. |
estático <T extiende TType > Einsum <T> | |
Salida <T> | producción () Tensor de salida con forma que depende de la "ecuación". |
Métodos heredados
Constantes
Cadena final estática pública OP_NAME
El nombre de esta operación, como lo conoce el motor central de TensorFlow.
Métodos públicos
Salida pública <T> como Salida ()
Devuelve el identificador simbólico del tensor.
Las entradas a las operaciones de TensorFlow son salidas de otra operación de TensorFlow. Este método se utiliza para obtener un identificador simbólico que representa el cálculo de la entrada.
public static Einsum <T> create (alcance de alcance , entradas iterables < operando <T>>, ecuación de cadena)
Método de fábrica para crear una clase que envuelve una nueva operación Einsum.
Parámetros
alcance | alcance actual |
---|---|
entradas | Lista de 1 o 2 Tensores. |
ecuación | Cadena que describe la operación Suma de Einstein; en el formato de np.einsum. |
Devoluciones
- una nueva instancia de Einsum