TensorFlowPost

 

Hoy, en esta cuarta entrega de la introducción práctica al Deep Learning con TensorFlow de Google (primera entrega,  segunda entrega, tercera entrega) presentaremos en detalle uno de los datasets que presentamos en la tercera entrega y que usaremos en este primera parte del tutorial para crear nuestra primera red neuronal.

 

7- Dataset MNIST

Una de las aplicaciones habituales de Deep Learning incluyen reconocimiento de patrones. Por ello, de la misma manera que cuando uno empieza a programar existe la tradición de empezar por un print “Hello World”, en Deep Learning se crea un modelo de reconocimiento de números escritos a mano. Se usa habitualmente el conjunto de imágenes de dígitos hechos a mano contenidos en el dataset MNIST  comentado en la anterior entrega. Recordemos que cada imagen es del siguiente estilo:

MNIST

Además para cada imagen se incluye una etiqueta, indicando que dígito representa. Como hemos visto los datos MNIST se puede encontrar en la página de Yann LeCun’s. LeCun (de NYU), Bengio (Montreal), Hinton (Toronto) y Ng (Stanford) son grandes nombres de académicos que en 2006 empezaron esta ola de deep learning en que nos encontramos ahora. Pero esta parte de historia la  dejo ya para otra serie de posts.

La base de datos MNIST de dígitos realizados a mano que usaremos está formado por un conjunto de entreno de 60.000 ejemplares  y un conjunto de test de 10.000 ejemplares . Para descargar los datos proponemos que usen este código que para su comodidad hemos puesto en nuestro github (obtenido de Google). Simplemente descarguen el código input_data.py  en el mismo directorio de trabajo en que se encuentran y lo importen en su programa con

import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

En este momento disponen de los datos de entreno en mnist.train y los datos de test en mint.test. Cómo ya hemos dicho anteriormente, cada elemento está compuesto por una imagen que la referenciaremos como “xs” y su correspondiente etiqueta con notación “ys“, para facilitar expresar el código de procesado. Recordar que tanto los datos de entreno como de test contienen “xs” y “ys“. Por ejemplo las imágenes de entreno están en  mnist.train.images y las etiquetas de entreno están en mnist.train.labels.

Entrando un poco más en detalle con las imágenes, estas son de 28×28 pixels que se pueden representar como una matriz de números.  Por ejemplo, una de las imágenes del número 1 se podría representar como:

Screen Shot 2015-11-27 at 11.48.19

donde cada posición indica la intensidad del pixel entre 0 y 1. Esta matrix se puede representar con un array de 28×28 = 784 números. En realidad la imagen se ha convertido en un montón de puntos en un espacio vectorial de 784 dimensiones. Solo mencionar que el reducir una estructura de 2D a este espacio estamos perdiendo parte de información, y algunos algoritmos de visión por computador avanzados podría afectar a su resultado, pero para el método más simple que usaremos en este tutorial esto no es un problema.

El resultado es que mnist.train.images es un tensor (de momento podemos quedarnos con la idea que un tensor es un array n-dimensional) con una forma de 60.000 x 784 como se muestra en la figura siguiente:

Screen Shot 2015-11-27 at 22.58.54

La primera dimensión indexa la imagen y la segunda indexa el pixel en cada imagen. Cada entrada en el tensor es la intensidad del pixel entre 0 y 1, para un pixel particular en una imagen concreta.

Por otro lado tenemos las etiquetas, que recordemos son números entre 0 y 9, que indican que dígito representa la imagen. En este tutorial vamos a representar esta etiqueta con un vector de 10 posiciones donde la posición correspondiente al dígito que representa la imagen contiene un 1 y el resto son 0. Por tanto, mnist.train.labels es una matriz de  de 0 y 1 con una forma de 60.000 x 10.

 

Screen Shot 2015-11-27 at 22.58.42

En estos momentos estamos ya preparados para hacer nuestro modelo.  Nos vemos en la próxima entrega.

Espero que les parezca interesante esta tercera entrega y también espero tener yo el tiempo y la disciplina para continuar con los próximos 😉

 

Link a la siguiente entrega: parte 5

  Cualquier consulta o sugerencia pueden contactar a través de DeepLearningBarcelona@gmail.com