Deep Learning con Python: Introducción a TensorFlow (Parte I)

Wednesday, May 9, 2018

Deep Learning con Python: Introducción a TensorFlow (Parte I)

Escrito por Enrique Blanco (Investigador en CDO) Fran Ramírez (Investigador de seguridad informática en Eleven Paths)

En este artículo vamos a realizar una breve introducción al framework TensorFlow, librería sobre la que ya hicimos mención en anteriores posts relacionados con técnicas de Aprendizaje Reforzado (RL). En el artículo Deep Learning vs Atari: entrena tu IA para dominar videojuegos clásicos (Parte I), podéis encontrar más detalles sobre las posibles aplicaciones de esta librería en proyectos de Deep Learning.

Existen múltiples librerías de código abierto enfocadas a su uso para Deep Learning en lenguaje Python. Las más importantes son: TensorFlow, Theano, Keras, Caffe, Lasagne, DSSTNE, PrettyTensor, Torch, mxnet, DL4J, y Microsoft Cognitive Toolkit.

Entre las más extendidas se encuentra TensorFlow, la que nos ocupa en este artículo, que soporta Python y C++, además de Java y Go entre otros. Además permite distribuir los cálculos en CPU, GPU de forma simultánea y escalado horizontal.

Figura 1: logo de TensorFlow. Fuente.

Para poder seguir satisfactoriamente este artículo y los que están por venir, necesitaréis un nivel básico de programación en Python. Os recomendamos encarecidamente leer la serie de artículos Python para todos:
donde podréis refrescar o aprender los conceptos y las técnicas necesarias para abordar un proyecto de Machine Learning con Python.

Si queremos hacer uso de TensorFlow, es necesario tener el entorno correctamente configurado con todos los complementos y librerías necesarias. En este post quedan indicados todos los pasos requeridos para dejar listo un entorno que te permita realizar proyectos de Deep Learning con TensorFlow.

Comenzaremos explorando los fundamentos que sustentan esta librería. El primer paso que daremos es habituarnos a la sintaxis básica de TensorFlow. Para ello, incluiremos algunos Jupyter Notebooks con la intención de describir al máximo el uso de las bases de este framework.



Ahora que ya sabemos definir constantes, tensores y ejecutar sesiones, daremos el siguiente paso al manejo y generación de grafos en TensorFlow.

En TensorFlow, los grafos se definen como el conjunto de nodos conectados entre sí a través de  aristas o arcos, que representan relaciones entre elementos de un conjunto. Cada uno de esos nodos se identifica como una operación con un tipo posible de entrada y que puede generar un determinado resultado. Generalmente, en TensorFlow, primero se define un grafo y posteriormente se ejecuta. A continuación, mostraremos unos ejemplos sencillos en Python y se analizará cómo hace uso TensorFlow de un grafo. Empezaremos creando un grafo con dos nodos constantes que llegan a un tercer nodo, que a su vez hará la suma de esos dos valores y devolverá el resultado de la misma.



En TensorFlow podemos encontrarnos con dos tipos de tensores en un grafo: variables y placeholders, por lo que ahora toca definir y familiarizarnos con estos objetos.

Podremos almacenar en forma de variable los valores de los pesos y los biases a lo largo de toda la sesión. Durante el proceso de optimización, TensorFlow hará un tuning de los parámetros del modelo. Las variables siempre deben ser inicializadas en nuestro código.

Los placeholders se definen originalmente como elementos vacíos, de los que iremos haciendo uso durante el entrenamiento del modelo. Al crear estos objetos se debe definir su dimensión y el data type que van a soportar.




Hemos aprendido a manejar todos los elementos o piezas que nos permitirán trabajar con TensorFlow como sesiones, grafos, variables y placeholders. Con estos recursos seremos capaces de construir nuestras primeras neuronas, que sentarán las bases para crear las primeras redes neuronales, a las que podremos incorporar algoritmos de regresión, clasificación o aprendizaje reforzado. En los siguientes posts avanzaremos en esa dirección. Como ya se indicó anteriormente, para hacer funcionar los modelos, primero construiremos el grafo, después iniciaremos la sesión y finalmente alimentaremos la arquitectura creada con datos de entrada correctamente procesados.

¡Te esperamos en la siguiente entrega de esta serie!

No comments:

Post a Comment