TensorFlow Inteligencia Artificial

En el TensorFlow Dev Summit de este año 2019 se ha anunciado la versión alfa de TensorFlow 2.0 del framework open source más popular en el campo de la inteligencia artificial,  completamente funcional, y para antes del verano se espera la versión RC (Release Candidate).

Evolución de TensorFlow 

Desde su lanzamiento inicial en 2015 por el equipo de Google Brain, el paquete cuenta con más de 41 millones de descargas con más de 1.800 contribuidores (datos del TensorFlow Dev Summit en Marzo de 2019).

TensorFlow con François Chollet en CVPR 2017 Congreso de Computer VisionLa evolución de TensorFlow ha sido muy rápida desde sus inicios para apoyar el trabajo de los desarrolladores e investigadores de inteligencia artificial en ese momento. En el TensorFlow Dev Summit  se ha presentado una versió alfa de TensorFlow 2.0 que se centra en la simplicidad y facilidad de uso, y por ello ha adoptado la API de nivel superior Keras que fué desarrollada y mantenida previamente por François Chollet (a la derecha en la foto tomada en el congreso CVPR del año 2017). Esta es la API central de alto nivel en la que se basa TensorFlow a partir de ahora y sobre la que centraremos el contenido de este libro.

La mejor manera de comenzar a utilizar TensorFlow 2.0 Alpha es dirigirse a la web de TensorFlow.org y entrar en TensorFlow.org/alpha donde se pueden encontrar tutoriales y guías para iniciarse en la nueva versión alfa. De momento solo en inglés, por tanto si la lengua es un problema,  espero que este libro sea una ayuda para iniciarse  con TensorFlow 2.0.

TensorFlow es el framework open source más popular en el campo del Machine Learning y con la nueva versión 2.0 más “amigable” supongo que continuará manteniendo su posición de liderazo. Por ello es procedente elegir este framework para aprender los conceptos básicos de programación del Deep Learning.

Principales cambios respecto TensorFlow 1

Nuevo modelo de ejecución

Los que conocían TensorFlow en versiones anteriores, recordaran que TensorFlow construía primero un grafo con todos los cálculos que se requerían hacer y luego se ejecutaba todo a la vez para conseguir de esta manera que en tiempo de ejecución las librerías runtime pudieran aplicar optimizaciones. Ahora el modelo de ejecución eager de TensorFlow evalua las operaciones inmediatamente y permite una mejor integración con los runtime de Python además que hace que sea más fácil iniciarse con TensorFlow.

API de alto nivel

La principal API de alto nivel  para construir y entrenar modelos a partir de la versión 2.0 será Keras. Keras es un estándar de API fácil de usar y facilita comenzar con TensorFlow. Es importante destacar que Keras proporciona varias API de creación de modelos (secuencial, funcional y subclases), para que podamos elegir el nivel correcto de abstracción para nuestro proyecto.

Despliegue en cualquier plataforma.

El ecosistema de TensorFlow está pensando para facilitar la puesta en producción de los modelos una vez entrenados ya sea en servidores, dispositivos móviles o en la web. Para ello, TensorFlow ofrece las siguientes librería para facilitar el despliegue en diferentes plataformas:

  • TensorFlow Serving: permite que los modelos se sirvan a través de REST o gRPC en servidores.
  • TensorFlow Lite: para dispositivos móviles e integrados ofrece la capacidad de implementar modelos en Android, iOS y sistemas integrados como Raspberry Pi.
  • TensorFlow.js: permite la implementación de modelos en entornos JavaScript, como en un navegador web o en el lado del servidor a través de Node.js.

Como ven, todo un ecosistema muy útil para la etapa de uso de nuestro modelo para hacer inferencia.

Tu primer programa con TensorFlow 2.0

Entorno de desarrollo

Para escribir tu primer programa en TensorFlow 2.0 recomiendo tener el entorno de desarrollo instalado en su ordenador para ir probando lo que se va explicando en cada apartado.

Debido a que TensorFlow es básicamente una librería de Python, requerimos hacer un uso completo del intérprete de Python. Nuestra propuesta es usar los notebook. Un notebook es un fichero generado por Jupyter Notebook que se puede editar desde un navegador web, permitiendo mezclar la ejecución de código Python con anotaciones y que proporciona una gran versatilidad para compartir parte de códigos con anotaciones a través de la comodidad e independencia de plataforma que ofrece un navegador web.

Propongo al lector que use el Colaboratory environment especialmente si no dispone de GPUs en su ordenador.  Se trata de un proyecto de investigación de Google creado para ayudar a diseminar la educación e investigación del Machine Learning. Es un entorno de notebook Jupyter que no requiere configuración y se ejecuta completamente en Cloud permitiendo usar Keras, TensorFlow o PyTorch. Los notebooks se almacenan en Google Drive y se pueden compartir tal como lo haría con Google Docs. Este entorno es de uso gratuito que solo requiere tener una cuenta en Google y además permite el uso de una GPU de forma gratuita.

Una vez has accedido al Google Colaboratory, debes conectar el entorno seleccionando “CONNECT” en la parte superior derecha del menú (que después de unos segundo deberías ver que indica con una marca verde que todo está correctamente inicializado). A continuación abre un notebook a través de la pestaña “File” en la parte superior izquierda del menú, y  selecciona la opción de “New Python 3.0 notebook”.

.

Instalación de la libreria TensorFlow

Ya estás en disposición de escribir tu primer programa en TensorFlow.  El primer paso es instalar tensorflow. Para ello tecleamos:

!pip install tensorflow-gpu==2.0.0-alpha0

y a continuación clicamos en el símbolo de “play”. Una vez instalada la librería TensorFlow, pasamos a importar la librería en nuestro entorno Python. Para ello creamons una nueva celda para código con “+CODE” en el submenú superior izquierda con el siguiente código:

import tensorflow as tf

y nuevamente clicamos en el símbolo de “play”.

Caso de estudio: MNIST

Propongo usar el mismo programa para clasificar dígitos usado en el libro Deep Learning Introducción práctica con Keras.

El siguiente paso consiste en cargar el conjunto de datos MNIST dataset.

mnist = tf.keras.datasets.mnist

Como se presentaba en el capítulo 2 del libro, los valores deben convertirse a coma flotante y normalizados.

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

Siguiendo los pasos del libro, a continuación debemos definer el modelo y compilarlo:

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
       loss='sparse_categorical_crossentropy',
       metrics=['accuracy'])

Y finalmente entrenar y evaluar el modelo:

model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)

Si has seguido los pasos indicados anteriormente, ya tienes tu clasificador de imagenes entrenado con un 98% de accuracy para este conjunto de datos. ¡Felicidades!.

Siguientes pasos

A partir de aquí ya puede continuar con el contenido del libro que Keras,  siguiendo las explicaciones si quieres profundizar un poco más en como se pueden programar redes neuronales densamente conectadas o redes neuronales convolucionales.