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:
¿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.
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:
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):
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.
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:
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.
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 TensorFlowasigná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.
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.
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:
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:
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.
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:
Por su parte, la documentación de C++ tiene:
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:
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.
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.
En esta sección, se encuentran recursos digitales muy específicos. Solo por mencionar algunos:
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.
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).
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:
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.
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.
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