TensorFlow: Un nuevo desarrollo de Google.

(0 comentarios)

En la actualidad, tanto las empresas, investigadores, estudiantes y  personas con negocios pequeños o medianos (Pymes), se encuentran en la situación de buscar productos de software que cubran sus necesidades cuando las herramientas computacionales gratuitas no cubren o solucionan sus requerimientos. Algunas de estas necesidades de manera general pueden ser: administración, control de inventarios, puntos de ventas, entornos de desarrollo, etc. Sin embargo, existen situaciones en que se requiera de herramientas muy especializadas, y debido a su complejidad, no cualquier proveedor de software los tiene a su alcance para poder lanzarlas al mercado.

Dentro de estos requerimientos especializados se encuentra la necesidad de clasificación de imágenes por computadora. ¿Cuál es la importancia de esta necesidad? Veamos como ejemplo los siguientes dos casos para responder esta pregunta:

  1. Industria alimenticia. Sea el caso de selección de papa por su color, textura y tamaño en una línea de producción. Anteriormente se usaban bandas transportadoras y el personal realizaba la inspección visual de la verdura eliminando aquellas que no cubriesen las expectativas o detectaran en mal estado. Actualmente, muchas empresas importantes realizan esta selección de forma automatizada mediante herramientas tecnológicas.
  2. Control de inventarios. En muchas tiendas de auto-servicio, el personal tiene que inspeccionar constantemente los estantes para cerciorarse de que no carezcan de productos para evitar disminuir sus ventas al no encontrar los productos deseados por parte de sus clientes. Hoy en día, algunas empresas tienen robots que realizan esta tarea de forma automática.

¿Qué ventaja ofrece una máquina sobre el ser humano en estas situaciones de selección o clasificación? Una persona puede cometer errores debido a distracciones, cansancio o rutina. Una máquina no se distrae, no se cansa y puede realzar una tarea específica con la misma efectividad todas las veces que se le indique.

Sin embargo, la parte matemática y su fundamentación provienen en gran parte  de la INTELIGENCIA ARTIFICIAL la cual es una especialidad de las ciencias de la computación que no es común, tiene un alto nivel de abstracción y complejidad, y no cualquier persona conoce los fundamentos en los que se basa para poder crear estas rutinas de clasificación.

 

ENTONCES, ¿EXISTE ALGUNA SOLUCIÓN O ALTERNATIVA PARA ESTAS SITUACIONES?

Afortunadamente sí la hay y sin costo. Google es una de las principales compañías de software a nivel mundial. Algunos de sus productos más conocidos y usados por la gente de forma gratuita son:

  • Navegador “Browser” en Internet (Google Chrome).
  • Cuenta de correo (Gmail).
  • Mapas de alguna ciudad (Google Maps).

TensorFlow es la nueva herramienta de desarrollo gratuita creado por Google. A continuación, presentamos algunos de los comentarios y opiniones del equipo de trabajo de esta empresa con respecto a este nuevo producto (Google, 2015):

  • “Originalmente era un proyecto de investigación. Desde entonces se ha colaborado con 50 equipos diferentes de trabajo en Google, para poder crear productos reales en diversas áreas. Actualmente, es usado en reconocimiento de voz, productos de fotos de Google, Gmail, búsqueda en Internet”. Jeff Dean, grupo de investigación.
  • “Estamos haciendo que las personas puedan usar los dispositivos a su alrededor de manera más fácil. Nosotros creemos que tener esto como una herramienta de fuente abierta ayudará a este fin y hará más rápido este esfuerzo”. Rajat Monga, líder técnico.
  • Por el lado de investigación, el objetivo es poder encontrar nuevo entendimiento a problemas existentes y avanzar en el estado del arte en problemas existentes. Por el lado de ingeniería, el objetivo es utilizar los análisis provenientes de la comunidad de investigación, y usarlos para habilitar productos y sus características que no se pensaban posibles anteriormente”. Anjuli Kannan, ingeniera en software.
  • “Nosotros pensamos que tenemos la mejor infraestructura de aprendizaje máquina en el mundo y tenemos la oportunidad de compartirlo, y eso es lo que queremos hacer aquí”. Greg Corrado, experimentado científico de investigación.

 

Recapitulando los comentarios, TensorFlow es una herramienta de fuente abierta y gratuita. Usada para investigación y desarrollo y con funcionalidades de aprendizaje de máquina de calidad  mundial para reconocimiento, con la posibilidad de  implementarse en diferentes áreas. ¿Qué más se puede pedir?

Pero ¿Realmente las compañías importantes usan esta librería? Veamos en el sitio de TensorFlow  (https://www.tensorflow.org) algunos ejemplos de las empresas que usan esta herramienta en sus productos. ARM, Snapchat, Airbus, Twitter, Dropbox, Ebay, entre otras.

Todo parece muy bien. Es de  interés para la gente. Es gratis y varias empresas importantes lo están usando. Pero ahora la pregunta es.

¿QUE ES TENSORFLOW?

TensorFlow no es un entorno de desarrollo o un lenguaje nuevo de programación, es específicamente una LIBRERÍA. Su arquitectura (estructura) flexible permite poder trabajar en una computadora de escritorio, un servidor, o en dispositivos móviles.

También es un sistema en donde el cómputo (cálculos u operaciones) se representa en gráficas. Los nodos son las operaciones llamadas “ops”, y los datos que maneja representan arreglos (arrays)  llamados tensores (tensors).

Una vez que un desarrollador está interesado en una herramienta de software, inmediatamente busca guías, tutoriales, o cualquier tipo información como material de apoyo o referencia. Buenas noticias, Google tiene en su sitio varios recursos valiosos como material de referencia para un mejor y más rápido aprendizaje.

También, en la página principal  de su sitio están publicaciones de eventos o información interesante acerca de la librería, usos o datos históricos que pueden ser de interés para mucha gente con  respecto a la herramienta.

A continuación, se comentan las características de TensorFlow de forma breve:

  • Mucha flexibilidad. No es una librería de redes neuronales rígida. Si se necesita definir nuevas composiciones es igual de fácil que escribir una función en Python.
  • Portabilidad real. Puede ejecutarse en diferentes plataformas (servidor, en la nube, dispositivo móvil, computadora de escritorio, etc).
  • Investigación y producción conectadas. Permite a los investigadores industriales dar más empuje a las ideas, y permite a los académicos compartir código más fácilmente.
  • Auto-diferenciación. Solo necesita por parte del usuario: su arquitectura definida, función objetivo y los datos. TensorFlow realiza todos los cálculos.
  • Opciones de lenguaje. Tiene compatibilidad con los siguientes lenguajes de programación: Python, C++. Y de forma experimental Go y Java.
  • Desempeño maximizado. Puede hacer uso de todas las capacidades de un procesador mediante hilos, consultas y cómputo asíncrono.

 

También, su sitio tiene seis secciones. Las primeras dos son las de principal apoyo para las personas que desean  aprender a usar esta herramienta desde los “inicios”. A continuación se comentarán todas ellas.

 

GET STARTED

Esta opción muestra los aspectos básicos a conocer y está dividida en 4 partes.

La primera sección es la introducción, en la cual muestran un código en Python a manera de ejemplo para dar una idea con lo que se va a trabajar. Las primeras dos oraciones de código mandan a llamar las librerías, dentro de las cuales una es la de TensorFlow asignándole una referencia llamada “tf” para su uso posterior.

Solo como nota acerca del código para la gente desarrolladora no experta en Python. Los comentarios se marcan con el signo numeral (#) y las oraciones simples no llevan los delimitadores (;), esto debido a que es propio del lenguaje usado en cuestión y no de esta librería.

Fuera de estos detalles, todo lo demás funciona igual y con la misma estructura ya conocida que en cualquier lenguaje de programación orientado a objetos que son: asignaciones, objetos, llamado de funciones y  parámetros.

También, comentan que han hecho muchos ejemplos para entender la librería de forma más amigable así como su funcionamiento. De hecho, hacen referencia a las siglas MNIST pudiendo causar un poco de confusión para la gente nueva.

¿Qué es MNIST? Proviene de las siglas Mixed National Institute of Standards and Technology. Su traducción al español seria Instituto Nacional Combinado de Estándares y Tecnología. ¿Para qué sirve? Es una gran base de datos (conjunto de información relacionada) de dígitos hechos a mano que se usan para el entrenamiento en varios sistemas de procesamiento de imágenes, y para entrenamiento y prueba en el aprendizaje máquina.

¿Cuál es la finalidad de que se tenga por una parte datos de entrenamiento, y por el otro, datos para hacer pruebas? Es para verificar que el dispositivo entrenado clasifique o reconozca correctamente.

El uso de esta base de datos para los ejemplos futuros a realizar, le da mayor confianza y validez al trabajo realizado por la gente. Esto es una muy buena idea por parte de Google al hacer uso de este recurso.

Finalmente, muestran a forma de broma una imagen con dos píldoras haciendo a la referencia de la película de ciencia ficción de The Matrix. Ver Figura 1, las personas que ya han visto la película entenderán la referencia perfectamente.

Figura 1 ¿Rojo o azul? (TensorFlow, s.f.)

Con la imagen anterior, Google muestra que su trabajo está dividido en dos partes: una para las personas que no saben o apenas están aprendiendo, y otra para las personas ya con experiencia en esta herramienta.

La segunda sección es la de descarga y configuración contiene toda la información relevante, necesaria y a tener en cuenta para su instalación y un apartado al final para problemas comunes durante este proceso.

Comienza explicando de forma rápida que es Pip, los sistemas operativos en que puede usarse y las instrucciones para su instalación en Linux, Windows, Virtualenv, Anaconda, Docker. Contiene paso a paso  y con bastantes detalles el proceso de instalación de cada opción, los recursos necesarios en caso de necesitar,  y finalmente, comprobar la instalación correcta.

Inclusive, viene un apartado para configurar núcleos CUDA para la gente experta y/o apasionada del hardware en Linux, agregando una lista de tarjetas gráficas compatibles con esta herramienta.

La tercera sección es el uso básico, se define cada  elemento gráfico y las especificaciones de la programación para su manejo ya sea en Python o C++, partiendo desde su creación y visualización.

Tal como se mencionó al principio,  en esta figura se puede ver como los nodos con los títulos de add y mul representan las operaciones de suma y multiplicación respectivamente. También, se identifican claramente las entradas de cada operación  en este caso a la izquierda, y finalmente, las líneas su flujo indican la dirección de las operaciones resultantes.

Otra funcionalidad agregada en la creación y uso de gráficas es la configuración del procesamiento gráfico (GPU) para su manejo de forma específica, en caso de que lo necesite o así desee el usuario. Es por esta razón de la existencia de las instrucciones de configuración de las tarjetas gráficas para esta herramienta.

Por otra parte, las gráficas producidas por la codificación se pueden distribuir a través de una red de computadoras específicas en caso de necesitarlo.

Otra utilería y una de las más importantes, es el uso interactivo con la gráfica, donde explican en Python su comunicación y posible manejo.

Finalmente, describen los elementos necesarios para trabajar con el  apartado gráfico, que son; Tensors para la representación de los datos; Variables  para mantener estados durante el procesamiento gráfico; Fetches  para obtener los resultados del procesamiento; y finalmente,  Feeds para reemplazar valores temporalmente.

Por último, la cuarta sección muestra un historial de las modificaciones hechas o información importante a tomar en cuenta para esta herramienta. Por ejemplo, en la versión r0.12 comentan que la API de Python es más fácil de usar que la de C++, y  agregaron compatibilidad de forma experimental a  dos nuevos lenguajes que son Go y Java.

 

GUIDES

En esta segunda opción se encuentran las guías y tutoriales, la cual está dividida en 2  partes que son. Tutorials y How to. También, en esta sección se hace más evidente la referencia a la idea de la Figura 1 y las píldoras.

La primera sección se encuentra los tutoriales que está dividido en seis lecciones o rubros que son:

  • Redes Neuronales Básicas
  • Fácil aprendizaje máquina (ML de sus siglas en inglés) con tf.contrib.learn.
  • TensorFlow en servidor.
  • Procesamiento de imágenes.
  • Procesamiento de lenguaje y secuencia.
  • Aplicaciones que no son aprendizaje máquina.

 

La primera lección está estructurada  en tres secciones de forma que las personas nuevas entiendan gradualmente las bases y mecánicas de la librería, las cuales son:

  1. MNIST en Aprendizaje Maquina para
  2. A profundidad con MNIST para expertos
  3. TensorFlow Mecánicas 101.

Por ejemplo,  en la sección de principiantes explican como la imagen capturada de un número hecho a mano de la base de datos, es representada por  la máquina en un arreglo. Ver Figuras 2 y 3 respectivamente.

 

Figura 2 Representación del número uno en un arreglo (TensorFlow, s.f.).

 

 

Figura 3 Colección de 55000 números hechos a mano en arreglos de 784 cada uno (TensorFlow, s.f.).

En la Figura 4 muestra la equivalencia del número 1 en un arreglo, donde los tonos más obscuros tienden al 1,  conforme se aclara la tonalidad tiende a 0 resultando en una matriz de números decimales. Por su parte la Figura 5,  muestra que para almacenar un número se necesita un arreglo en dos dimensiones con un total de 784 espacios, y también,  55000 se refiere a la cantidad de números a manejar, resultando en un arreglo de tres dimensiones administrado por un tensor.

A medida que continúa esta sección, explican el funcionamiento de la red neuronal, su entrenamiento con estas imágenes y  eficiencia para evaluar números en este formato.

Posteriormente, en la sección para expertos de MNIST trata a detalle otros aspectos de clasificación más potentes como por ejemplo redes neuronales multicapa. Cabe mencionar, que la misma sección comenta al  principio  que las personas deben conocer las bases explicadas en el apartado anterior  antes de comenzar a trabajar en esta.

Finalmente,  en la sección de mecánicas 101, comentan y demuestran aspectos  básicos e importantes a conocer, para su posterior uso o como referencia para dudas posteriores.

Todas las lecciones poseen la misma estructura y referencia, o sea, parten de las bases del tema y conforme las lecciones avanzan profundizan en cada tema apoyándose en lo visto anteriormente.

Por su parte, la segunda sección de How to, es un índice para consulta específica, donde la gente experta o con conocimientos, busca información que necesita directamente sin necesidad de revisar material ajeno a lo deseado.

 

API

Esta sección es de gran importancia y concurrencia para los desarrollares ya conocedores o experimentados, la cual contiene todos los aspectos técnicos de la librería.

En su parte inicial está dividida en 4 secciones. Las primeras dos contienen la información correspondiente para Python o C++, y tal como comenta el sitio, las otras dos tienen documentación de Go y Java aclarando que están en forma experimental actualmente.

Es importante comentar que, la documentación de Python es más fácil de usar, sin embargo, desarrollar en C++ presenta algunas ventajas de desempeño en la parte gráfica, y tiene compatibilidad en dispositivos móviles como en Android (TensorFlow, s.f.).

La documentación Python tienen las siguientes características:

  • Listado completo de todas las clases que usa y su finalidad.
  • Listado de cada método que puede usar cada clase y su finalidad.
  • Métodos documentados explicando: su finalidad, argumentos y tipos de variable, su resultado y tipo de regreso.
  • Ejemplos de muchos métodos autodocumentados para su fácil lectura y comprensión.
  • En caso de existir errores de valores, explican los posibles tipos y las causas probables que los originan.

 

Por su parte, la documentación de C++ tiene:

  • Listado completo de todas las clases que usa y su finalidad.
  • Cada clase tiene una breve descripción, su constructor y destructor.
  • En caso de ser heredada la clase, tiene una referencia la súper clase de donde proviene.
  • Listado de los métodos que maneja cada clase, tipo de variables, tipo de argumentos en caso de tenerlos.
  • Código pequeño autodocumentado como referencia de uso.

Comparando ambas documentaciones, para poder entender en su totalidad la de lenguaje C++ se necesita tener conocimientos sólidos en programación orientada a objetos, tipos de retornos e inclusive estructuras. Python por su parte, y debido a la naturaleza y propósito del lenguaje, no maneja estos aspectos en su documentación.

Debido a que los lenguajes Go y Java están de manera experimental, pueden cambiar de estructura rápidamente su documentación, por lo cual no se comentarán por el momento.

 

MOBILE

Esta sección tiene tres apartados principalmente, los cuales pueden ayudar a los desarrolladores de apps en dispositivos móviles los cuales son:

  • Raspberry Pi.

Cada apartado está enlazado con GitHub (repositorio de códigos de aplicaciones públicos o privados) mostrando el trabajo ya hecho en forma pública en cada dispositivo.

Inclusive, en esta sección está un video mostrando el trabajo hecho de traducción de imágenes ejecutándose en el dispositivo móvil, sin conexión a Internet o algún otro recurso, obteniendo una gran respuesta dinámica.

El video muestra la traducción de una fracción de la canción “La Bamba” en otros lenguajes, ver Figura  4.

Figura 4 Demostración de traducción de imágenes en dispositivos móviles (Google, Google Translate vs. “La Bamba”, 2015).

En esta figura, la configuración de la traducción está de español a inglés en el dispositivo. Durante la letra de la canción, se muestran varias traducciones en diferentes lenguas y combinaciones, y también, se puede apreciar no se lleva más de un segundo en dicho proceso al reconocer alguna imagen a traducir.

 

RESOURCES

En esta sección, se encuentran recursos digitales muy específicos. Solo por mencionar algunos:

  • Publicación de TensorFlow. Documento en formato PDF para las personas interesadas en investigación.
  • Usuarios de TensorFlow. Es un listado de las personas que publican el uso de TensorFlow en su trabajo o gusto por dicha herramienta.
  • Preguntas frecuentes. Apartado donde muestra un catálogo de las dudas más comunes por parte de los usuarios y su respectiva respuesta.
  • Es un listado de todos los términos y definiciones usados por parte de la herramienta.

 

VERSIONS

Es la última sección, donde muestra un listado de las versiones de la herramienta de forma cronológica para una conocer una referencia de la versión más reciente, y los cambios realizados a cada una.

FINALMENTE, ¿QUE OFRECE A LA GENTE?

TensorFlow es para estudiantes, desarrolladores o investigadores con el fin de crear rutinas de clasificación para poder trabajar con ellas  en algún proyecto de investigación, o inclusive,  implementarla en algún dispositivo con un fin específico. No se tiene la necesidad de entender toda la teoría y  base matemática de las redes neuronales, basta con comprender el concepto o mecánica de la herramienta o aplicar el concepto de Caja Negra en programación (existe una entrada, no se conoce el proceso, obtenemos una salida o resultado).

 

CONOCIMIENTOS PREVIOS IMPORTANTES PARA USAR LA HERRAMIENTA

Sin embargo,  a pesar de tener todas estas ventajas y apoyos para que la gente que la pueda usar fácilmente, se requiere tener los siguientes conocimientos para poder trabajar con la librería:

  • Tener conocimientos básicos de programación en importación o llamado de librerías. Su llamado es muy sencillo al entorno, pero se tiene que saber que se está haciendo o habilitando al importar esta librería. Muchos errores en el desarrollo  de una rutina (programación) se deben a la omisión de pasos obvios y sencillos  (que pasan muy frecuentemente, sino lo creen, pregúntenle a su programador o desarrollador  más cercano de confianza).
  • Tener conocimientos o experiencia en Programación Orientada a Objetos (POO) dado que sigue la estructura de “Clase”, “instancia u objeto” y “mensaje”. Toda la documentación y estructura de sentencias sigue este proceso. Aquellos entusiastas que pretendan meterse directamente a  programar se darán unas buenas “perdidas” hasta que comprendan la mecánica de este estilo de programación.
  • Poseer conocimientos sólidos de arreglos de varias dimensiones del área de programación.
  • Tener experiencia en consulta e interpretación de API´s de programación o semejantes, de lo contrario, una persona se tomará su tiempo en entender esta información.
  • Tener un buen conocimiento de matemáticas y unas bases sólidas en esta materia.

 

CONCLUSIONES

Siguiendo Google con las buenas prácticas de software (desarrollo documentado de forma ordenada y correcta), TensorFlow ofrece para los usuarios:

  • Una excelente API para consulta de dudas o referencia.
  • Explica con detalle el uso de sus sentencias con ejemplos para una mejor comprensión.
  • Guías y tutoriales estructurados resultando en una muy fácil navegación y búsqueda de la información requerida.
  • Uso interactivo de los grafos.

Google siempre se ha caracterizado por ofrecer productos de alta calidad e innovadores para las personas y esta no es la excepción. Un aspecto muy importante a resaltar  es que NO es una herramienta perfecta, PERO con el proceso continuo de retroalimentación que tienen, se irá perfeccionando con el tiempo gracias a su equipo de trabajo y contribuyentes externos. Inclusive está en su sitio la convocatoria de desarrollo para este 2017.

Por la contribución del apartado gráfico, se puede ver de dos formas.

  • Un desarrollador que tenga completamente identificado todo su proceso, no tendrá la necesidad de crear gráficas o visualizar su trabajo, por lo cual, no le será útil esta función.
  • Sin embargo, en ocasiones cuando el trabajo se vuelva complejo o se necesite colaboración de varias personas, es más fácil entender un problema y trabajarlo de forma gráfica en vez de líneas de código.

Algunas personas podrán ver esta herramienta como innecesaria o fuera de lugar para los lenguajes de programación. Sin embargo, hay que recordar que algunas de las principales barreras de la creatividad son: encontrar la respuesta “correcta”, o, seguir las reglas. En base al uso por parte de los  desarrolladores decidirán si TensorFlow es una herramienta creativa por parte de Google para resolver problemas de clasificación.

Finalmente, ¿Tu qué opinas? ¿Olvidamos algún punto importante de esta herramienta? ¿Te gustaría que profundizáramos en algún tema en específico como en este caso de Redes Neuronales? Manda tus comentarios por medio de nuestro contacto o a través de nuestras redes sociales, ya sea para contestar estas preguntas, profundizar en algún tema, aclarar dudas o comentar más acerca de este tema.

 

Referencias

Google. (15 de Julio de 2015). Google Translate vs. “La Bamba”. Obtenido de https://www.youtube.com/watch?v=06olHmcJjS0&feature=youtu.be

Google. (09 de Noviembre de 2015). TensorFlow: Open source machine learning. Obtenido de TensorFlow: https://www.youtube.com/watch?v=oZikw5k_2FM&feature=youtu.be

TensorFlow. (s.f.). TensorFlow. Obtenido de An open-spurce library for Machine intelligence: https://www.tensorflow.org/

TheTutorGuy. (23 de Noviembre de 2016). Tensorflow tutorials for beginners, 1: Creating Computation graphs. Obtenido de https://www.youtube.com/watch?v=uHaKOFPpphU

 

No ha sido calificado aún

Comentarios

No existen comentarios

Nuevo comentario

obligatorio

obligatorio (no publicado)

opcional