Copyright 2020 The TensorFlow Authors.
Fundamentos de TensorFlow
Esta guía ofrece una rápida visión general de los conceptos básicos de TensorFlow. Cada apartado de este documento es una visión general de un tema más amplio. Puede encontrar enlaces a guías completas al final de cada apartado.
TensorFlow es una plataforma integral para el aprendizaje automático. Es compatible con lo siguiente:
Cálculo numérico basado en arreglos multidimensionales (similar a NumPy).
GPU y procesamiento distribuido
Diferenciación automática
Construcción, entrenamiento y exportación de modelos
Y más
Tensores
TensorFlow opera sobre arreglos multidimensionales o tensores representados como objetos tf.Tensor
. Aquí se muestra un tensor bidimensional:
Los atributos más importantes de un tensor
son su shape
y su dtype
:
Tensor.shape
: indica el tamaño del tensor a lo largo de cada uno de sus ejes.Tensor.dtype
: le indica el tipo de todos los elementos del tensor.
TensorFlow implementa operaciones matemáticas estándares sobre tensores, así como muchas operaciones especializadas para el aprendizaje automático.
Por ejemplo:
Nota: Típicamente, en cualquier lugar donde una función TensorFlow espere un Tensor
como entrada, la función también aceptará cualquier cosa que pueda ser convertida a un Tensor
usando tf.convert_to_tensor
. Vea a continuación un ejemplo.
Puede resultar lento ejecutar grandes cálculos en la CPU. Cuando se configura correctamente, TensorFlow puede usar hardware acelerador como las GPU para ejecutar operaciones muy rápidamente.
Consulte la Guía del tensor para más detalles.
Variables
Los objetos tf.Tensor
normales son inmutables. Para almacenar las ponderaciones del modelo (u otro estado mutable) en TensorFlow use un tf.Variable
.
Consulte la guía de Variables para más detalles.
Diferenciación automática
El descenso gradiente y los algoritmos relacionados son una piedra angular del aprendizaje automático moderno.
Para ello, TensorFlow implementa la diferenciación automática (autodiff), que usa el cálculo para computar gradientes. Normalmente lo usará para calcular el gradiente del error o pérdida de un modelo con respecto a sus ponderaciones.
En x = 1.0
, y = f(x) = (1**2 + 2*1 - 5) = -2
.
La derivada de y
es y' = f'(x) = (2*x + 2) = 4
. TensorFlow puede calcular esto automáticamente:
Este ejemplo simplificado sólo toma la derivada con respecto a un único escalar (x
), pero TensorFlow puede calcular el gradiente con respecto a cualquier número de tensores no escalares simultáneamente.
Consulte la guía Autodiff para más detalles.
Gráficos y tf.function
Aunque puede usar TensorFlow de forma interactiva como cualquier librería de Python, TensorFlow también proporciona herramientas para:
Optimización del rendimiento: para acelerar el entrenamiento y la inferencia.
Exportar: para que pueda guardar su modelo cuando haya terminado el entrenamiento.
Estos requieren que usted use tf.function
para separar su código de TensorFlow puro de Python.
La primera vez que se ejecuta la función tf.function
, aunque se ejecuta en Python, captura un grafo completo y optimizado que representa los cálculos TensorFlow realizados dentro de la función.
En llamadas posteriores, TensorFlow sólo ejecuta el grafo optimizado, saltándose cualquier paso que no sea de TensorFlow. A continuación, observe que my_func
no imprime tracing ya que print
es una función Python, no una función TensorFlow.
Un grafo puede no ser reutilizable para entradas con una firma diferente (shape
y dtype
), por lo que en su lugar se genera un nuevo grafo:
Estos gráficos capturados proporcionan dos beneficios:
En muchos casos suponen una importante aceleración en la ejecución (aunque no en este ejemplo trivial).
Puede exportar estos grafos, utilizando
tf.saved_model
, para ejecutarlos en otros sistemas como un servidor o un dispositivo móvil, sin necesidad de instalar Python.
Consulte Introducción a los grafos para más detalles.
Módulos, capas y modelos
tf.Module
es una clase para administrar sus objetos tf.Variable
, y los objetos tf.function
que operan sobre ellos. La clase tf.Module
es necesaria para soportar dos características significativas:
Puede guardar y restaurar los valores de sus variables usando
tf.train.Checkpoint
. Esto es útil durante el entrenamiento, ya que permite guardar y restaurar rápidamente el estado de un modelo.Puede importar y exportar los valores
tf.Variable
y los grafostf.function
usandotf.saved_model
. Esto permite ejecutar su modelo independientemente del programa Python que lo creó.
He aquí un ejemplo completo que exporta un simple objeto tf.Module
:
Guarde el Module
:
El SavedModel resultante es independiente del código que lo creó. Puede cargar un SavedModel desde Python, otras vinculaciones de lenguaje o TensorFlow Serving. También puede convertirlo para que funcione con TensorFlow Lite o TensorFlow JS.
Las clases tf.keras.layers.Layer
y tf.keras.Model
se basan en tf.Module
proporcionando funcionalidad adicional y métodos convenientes para construir, entrenar y guardar modelos. Algunos de ellos se demuestran en la siguiente sección.
Consulte Introducción a los módulos para más detalles.
Bucles de entrenamiento
Ahora reúna todo esto para construir un modelo básico y entrénelo desde cero.
En primer lugar, cree algunos datos de ejemplo. Esto genera una nube de puntos que sigue vagamente una curva cuadrática:
Cree un modelo cuadrático con ponderaciones inicializadas aleatoriamente y un sesgo:
En primer lugar, observe el rendimiento de su modelo antes del entrenamiento:
Ahora, defina una pérdida para su modelo:
Dado que este modelo pretende predecir valores continuos, el error cuadrático medio (MSE) es una buena elección para la función de pérdida. Dado un vector de predicciones, , y un vector de objetivos verdaderos, , el MSE se define como la media de las diferencias al cuadrado entre los valores predichos y la verdad sobre el terreno.
Escriba un bucle de entrenamiento básico para el modelo. El bucle usará la función de pérdida MSE y sus gradientes con respecto a la entrada para actualizar iterativamente los parámetros del modelo. Usar minilotes para el entrenamiento le ofrece tanto eficiencia de memoria como una convergencia más rápida. La API tf.data.Dataset
tiene funciones útiles para agrupar por lotes y barajar.
Ahora, observe el rendimiento de su modelo después del entrenamiento:
Eso funciona, pero recuerde que las implementaciones de las utilidades de entrenamiento comunes están disponibles en el módulo tf.keras
. Por lo tanto, considere usarlas antes de escribir las suyas propias. Para empezar, los métodos Model.compile
y Model.fit
implementan un bucle de entrenamiento para usted:
Comience por crear un modelo Sequential en Keras usando tf.keras.Sequential
. Una de las capas Keras más sencillas es la capa dense, que puede instanciarse con tf.keras.layers.Dense
. La capa Dense es capaz de aprender relaciones lineales multidimensionales de la forma . Para aprender una ecuación no lineal de la forma, , la entrada de la capa densa debe ser una matriz de datos con y como características. La capa lambda, tf.keras.layers.Lambda
, puede usarse para realizar esta transformación de apilamiento.
Observe el rendimiento de su modelo Keras después del entrenamiento:
Consulte Bucles básicos de entrenamiento y la guía Keras para más detalles.