El desarrollo de las redes neuronales y el acceso a grandes bancos de información, han hecho posible que podamos tener robustos y completos programas para el desarrollo de la inteligencia artificial, en concreto del aprendizaje de máquina. Es por ello, que hay muchas herramientas para ayudarnos a desarrollar aplicaciones de Machine Learning de manera simple y sencilla.
En este artículo exploraremos TensorFlow y Keras, veremos sus características, sus ventajas y desventajas, para decidir cuál escoger en cada ocasión. Estas herramientas proveen acceso a los GPUs o unidades gráficas que vienen en las tarjetas gráficas de los equipos de cómputo.
¿Qué es Keras?
Creado por François Chollet en la primavera de 2015, ahora forma parte del proyecto Keras de Google, de hecho, su creador trabaja actualmente ahí.
Diseñada para ser una API de alto nivel, es decir, diseñada para ser una herramienta que facilita el desarrollo sin conocer las características de las capas internas de una red neuronal profunda. Esta API provee todo lo necesario, desde interfaces para tratamiento de datos categóricos y numéricos, hasta módulos de alto nivel para la implementación de redes neuronales, todo lo que se necesita agregar es el módulo de capas densas (layers.Dense) y con algunos parámetros dentro de ellos tales como las unidades, la dimensión de las entradas, la función de activación, entre otras, le añadimos un optimizador de las funciones y listo, podemos compilar y entrenar nuestro modelo. Una vez entrenado, podemos hacer análisis de predicción y clasificación.
¿Qué es TensorFlow?
Creada en 2015 por el equipo de Google de IA, se ha convertido en una de las aplicaciones más populares, porque es open source y con facilidad de uso.
A partir de la versión 2.0, liberada en 2019, integra a Keras nativamente.
Tensorflow provee tanto herramientas de alto nivel, como de bajo nivel. Entre las herramientas de alto nivel se encuentran Keras y Layers, siendo Layers muy similar a Keras, pero ya permitiendo trabajar con los grafos de desarrollo de la herramienta.
La herramienta de bajo nivel nos permite implementar la derivación automática. El flujo de trabajo se basa en implementar grafos computacionales, es decir, relaciones entre tensores y operaciones en los datos.
El flujo básico de un grafo es crear una red de nodos, cada una teniendo una operación en específico que aplica una función al tensor que le pertenece y dependiendo de su función, devolver o no tensores de salida.
El algoritmo básico del grafo sería. [1]:
- Instanciamiento del grafo para el trabajo a desarrollar.
- Añadir los nodos (tensores y/u operaciones) al grafo.
- Ejecutar el grafo que consta de:
- Iniciar una nueva sesión
- Iniciar todas las variables del grafo
- Ejecutar el grafo en dicha sesión
¿Cuál herramienta debes de escoger para el desarrollo de redes neuronales?
Ahora que hemos visto las características de cada herramienta, podemos hablar de las diferencias:
- Keras nos permite programar de forma rápida y sencilla cualquier trabajo de redes neuronales. TensorFlow al integrar a Keras, puede darte la misma funcionalidad, aparte de que provee otra librería de alto nivel con similar nivel de facilidad que Keras.
- TensorFlow te permite crear grafos basados en los tensores y en las operaciones que cada capa efectuará, dándote más control de todo el flujo de trabajo, proveyendo así interfaces para poder controlar inclusive la posición del grafo, es decir, en qué punto y qué operación se encuentra actualmente. En tanto Keras, al ser una interface entre el bajo nivel y el programador, no te permite tener tanto control por lo que se puede perder un poco dicho control y la propiedad de explicabilidad de tu modelo, aparte de que el control de errores es mejor en la librería de bajo nivel.
- La curva de aprendizaje es mucho mayor en la librería de bajo nivel de TensorFlow.
- El rendimiento de la librería de bajo nivel de TensorFlow es muy superior a la de Keras, puesto que también está desarrollada pensando en el cómputo paralelo y el uso optimizado de GPUs. Los GPUs modernos traen Gpu Cores para computaciones de funciones rápidas y tensorcores para la ejecución de operaciones tensoriales (matriciales).
Recomendamos tener un dominio de contexto del problema a resolver, estudiar las matemáticas detrás de los modelos y de las computaciones tensoriales y finalmente, se puede utilizar Keras para un prototipado o si las operaciones no requieren de alto rendimiento.
En tanto que se recomienda utilizar la librería de bajo nivel de TensorFlow cuando requieras alto desempeño, mayor control, explicabilidad y transparencia de los modelos y la interacción con más lenguajes como C++.
[1] Raschka, S., Mirjalili, V. (2019). Python Machine Learning. TensorFlow. Editorial Marcombo, México, páginas 450-507.