Qué es y cómo funciona TensorFlow

0
106

El aprendizaje automático es una disciplina compleja, pero implementar modelos de aprendizaje automático es mucho menos desalentador y difícil de lo que solía ser, gracias a los marcos de aprendizaje automático -como TensorFlow de Google- que facilita el proceso de adquisición de datos, modelos de capacitación, cumplimiento de predicciones y refinamiento de resultados futuros.

Creado por el equipo de Google Brain, TensorFlow es una biblioteca de código abierto para computación numérica y aprendizaje automático a gran escala. Este agrupa una gran cantidad de modelos y algoritmos de aprendizaje automático y aprendizaje profundo (también conocido como redes neuronales), y los hace útiles mediante una metáfora común. Asimismo, utiliza Python para proporcionar una API de front-end conveniente para crear aplicaciones con la infraestructura, mientras las ejecuta en C ++ de alto rendimiento.

TensorFlow puede entrenar y ejecutar redes neuronales profundas para la clasificación de dígitos escritos a mano, el reconocimiento de imágenes, las incrustaciones de palabras, las redes neuronales recurrentes, los modelos de secuencia a secuencia para la traducción automática, el procesamiento de lenguaje natural y las simulaciones basadas en PDE (ecuación diferencial parcial). Lo mejor de todo es que TensorFlow soporta la predicción de la producción a escala con los mismos modelos que se usan para el entrenamiento.

Cómo funciona TensorFlow
TensorFlow permite a los desarrolladores crear gráficos de flujo de datos, estructuras que describen cómo se mueven los datos a través de un gráfico o una serie de nodos de procesamiento. Cada nodo en el gráfico representa una operación matemática y, cada conexión o borde entre nodos es una matriz de datos multidimensional, o tensor.

TensorFlow proporciona todo esto para el programador a través del lenguaje Python. Este es fácil de aprender y usar, y proporciona formas convenientes de expresar la manera en la que se pueden juntar abstracciones de alto nivel. Los nodos y los tensores en TensorFlow son objetos de Python, y las aplicaciones de TensorFlow son en sí mismas aplicaciones de Python.

Sin embargo, las operaciones matemáticas reales no se realizan en Python. Las bibliotecas de transformaciones que están disponibles a través de TensorFlow están escritas como binarias de C++ de alto rendimiento. Python solo dirige el tráfico entre las piezas y proporciona abstracciones de programación de alto nivel para conectarlas.

Las aplicaciones TensorFlow se pueden ejecutar en la mayoría de los destinos que sean convenientes: una máquina local, un clúster en la nube, dispositivos iOS y Android, CPU o GPU. Si utiliza la propia nube de Google, puede ejecutar TensorFlow en el silicio de la unidad personalizada de TensorFlow Processing Unit (TPU) para una mayor aceleración. No obstante, los modelos resultantes creados por TensorFlow pueden implementarse en la mayoría de los dispositivos donde se usarán para cumplir con las predicciones.

TensorFlow 2.0, en su versión beta a partir de junio del 2019, renovó la infraestructura de muchas maneras en función de los comentarios de los usuarios, para que sea más fácil de usar (por ejemplo, utilizando la, relativamente simple, API de Keras para el entrenamiento de modelos) y más eficaz. La capacitación distribuida es más fácil de ejecutar gracias a una nueva API y el soporte para TensorFlow Lite hace posible implementar modelos en una mayor variedad de plataformas. Sin embargo, el código escrito para versiones anteriores de TensorFlow debe ser reescrito -a veces solo ligeramente y a veces significativamente- para aprovechar al máximo las nuevas funciones de TensorFlow 2.0.

Beneficios de TensorFlow
El mayor beneficio individual que proporciona TensorFlow para el desarrollo del aprendizaje automático es la abstracción. En lugar de tratar con los detalles esenciales de la implementación de algoritmos, o descubrir formas adecuadas de enganchar la salida de una función a la entrada de otra, el desarrollador puede concentrarse en la lógica general de la aplicación. TensorFlow cuida los detalles tras bambalinas.

TensorFlow ofrece comodidades adicionales para los desarrolladores que necesitan depurar y ganar introspección en las aplicaciones TensorFlow. El modo eager execution le permite evaluar y modificar cada operación de gráfico por separado y de forma transparente, en lugar de construir el gráfico completo como un solo objeto opaco y evaluarlo todo a la vez. El paquete de visualización TensorBoard le permite inspeccionar y perfilar la forma en que se ejecutan los gráficos a través de un panel interactivo, basado en la web.

TensorFlow también obtiene muchas ventajas con el respaldo de un equipo comercial de A-list en Google. Este no solo ha impulsado el rápido ritmo de desarrollo detrás del proyecto, sino que ha creado muchas ofertas importantes en torno a TensorFlow que facilitan la implementación y el uso: el silicio de TPU mencionado anteriormente para un rendimiento acelerado en la nube de Google; un centro en línea para compartir modelos creados con la infraestructura; encarnaciones/reencarnaciones de la infraestructura en el navegador y compatible con dispositivos móviles; y mucho más.

Una advertencia: algunos detalles de la implementación de TensorFlow hacen que sea difícil obtener resultados totalmente deterministas de entrenamiento de modelos para algunos trabajos de capacitación. A veces, un modelo entrenado en un sistema puede variar ligeramente de un modelo entrenado en otro, incluso cuando se alimentan exactamente de la misma información. Las razones son complicadas y engañosas -por ejemplo, cómo se siembran números aleatorios y dónde, o ciertos comportamientos no deterministas cuándo se usan GPUs). Dicho esto, es posible solucionar estos problemas, y el equipo de TensorFlow está considerando implementar más controles para afectar el determinismo en un flujo de trabajo.

TensorFlow contra la competencia
TensorFlow compite con una gran cantidad de otras infraestructuras de aprendizaje automático. PyTorch, CNTK y MXNet son los tres principales que abordan muchas de las mismas necesidades. A continuación, me he encargado de señalar dónde se destacan y se quedan cortos frente a TensorFlow.

  • PyTorch, además de estar construido con Python, y tener muchas otras similitudes con TensorFlow: componentes acelerados por hardware bajo el capó, un modelo de desarrollo altamente interactivo que permite el trabajo de diseño sobre la marcha y muchos componentes útiles que ya están incluidos. Por lo general, PyTorch es una mejor opción para el desarrollo rápido de proyectos que deben estar en funcionamiento en poco tiempo, pero TensorFlow gana para proyectos más grandes y flujos de trabajo más complejos.
  • CNTK, el Microsoft Cognitive Toolkit, como TensorFlow, utiliza una estructura gráfica para describir el flujo de datos, pero se enfoca principalmente en la creación de redes neuronales de aprendizaje profundo. CNTK maneja muchos trabajos de redes neuronales más rápido y tiene un conjunto más amplio de APIs (Python, C ++, C #, Java), pero no es tan fácil de aprender e implementar como TensorFlow.
  • Apache MXNet, adoptado por Amazon como la principal infraestructura de aprendizaje profundo en AWS, puede escalar de forma casi lineal a través de múltiples GPUs y máquinas. También es compatible con una amplia gama de APIs de lenguaje (Python, C ++, Scala, R, JavaScript, Julia, Perl, Go), aunque sus APIs nativas no son tan agradables como las de TensorFlow.

Serdar Yegulalp, InfoWorld.com