Path: blob/master/site/es-419/guide/tensor_slicing.ipynb
25115 views
Copyright 2020 The TensorFlow Authors.
Introducción al seccionamiento de tensores
Cuando trabajamos en aplicaciones de aprendizaje automático como la detección de objetos y el NPL (procesamiento de lenguaje natural), a veces, es necesario trabajar con subsecciones (slices) de tensores. Por ejemplo, si la arquitectura de su modelo incluye el enrutamiento, en que una capa podría controlar qué ejemplo de entrenamiento se enruta a la siguiente capa. En tal caso, podría usar las ops (operaciones) de seccionamiento de tensores para dividir los tensores y volver a reunirlos en el orden correcto.
En aplicaciones de procesamiento de lenguaje natural, se puede usar el seccionamiento de tensores para el enmascaramiento de palabras durante el entrenamiento. Por ejemplo, es posible generar datos de entrenamiento a partir de una lista de sentencias mediante la selección de un índice de palabras para enmascarar en cada sentencia, tomando la palabra como etiqueta y, después, reemplazando la palabra elegida por un token de máscara.
En esta guía, aprenderá a usar las API de TensorFlow para lo siguiente:
Extraer secciones (slices) de un tensor
Insertar datos a índices específicos en un tensor
En esta guía se sobreentiende que el lector está familiarizado con la indexación de tensores. Antes de empezar a leer esta guía, consulte las secciones sobre indexación de las guías sobre Tensores y TensorFlow NumPy.
Preparación
Extracción de secciones de tensores
Realice un seccionamiento de los tensores tipo NumPy con tf.slice
.
Como alternativa, se puede usar más sintaxis Pythonic. Tenga en cuenta que los espacios de separación de las secciones del tensor son los mismos a lo largo de un rango desde el inicio hasta que se detiene.
Con los tensores bidimensionales, se puede usar algo como lo siguiente:
Con tensores dimensionales más altos se puede usar tf.slice
.
También es posible usar tf.strided_slice
para extraer secciones de tensores mediante el "striding" (desplazamiento) sobre las dimensiones del tensor.
Use tf.gather
para extraer índices específicos a partir de un solo eje de un tensor.
No se requieren índices para lograr el espaciamiento parejo de tf.gather
.
Para extraer secciones de múltiples ejes de un tensor, use tf.gather_nd
. Esto resulta útil cuando lo que desea es reunir los elementos de una matriz en oposición a sus filas o columnas.
Inserción de datos en tensores
Use tf.scatter_nd
para insertar datos en secciones o índices específicos de un tensor. Tenga en cuenta que el tensor en el que inserte valores se inicializará a cero.
Los métodos como tf.scatter_nd
para los que se requieren tensores inicializados en cero son similares a los de los inicializadores de tensores dispersos. Se pueden usar tf.gather_nd
y tf.scatter_nd
para imitar el comportamiento de las operaciones de tensores dispersos.
Considere un ejemplo de construcción de un tensor disperso con estos dos métodos juntos.
Es similar a:
Para insertar datos en un tensor con valores preexistentes, use tf.tensor_scatter_nd_add
.
De un modo similar, use tf.tensor_scatter_nd_sub
para restar valores de un tensor con valores preexistentes.
Use tf.tensor_scatter_nd_min
para copiar de un tensor a otro valores mínimos entre elementos correspondientes (element-wise).
Asimismo, use tf.tensor_scatter_nd_max
para copiar de un tensor a otro valores máximos entre elementos correspondientes (element-wise).
Lecturas y recursos complementarios
Con esta guía, ha aprendido a usar las operaciones de seccionamiento de tensores disponibles en TensorFlow para ejercer un control más detallado de los elementos de los tensores.
Revise las operaciones de seccionamiento disponibles con TensorFlow NumPy tales como
tf.experimental.numpy.take_along_axis
ytf.experimental.numpy.take
.También consulte la guía sobre tensores y la guía sobre variables.