[go: up one dir, main page]



Originalmente publicado por Sandeep Gupta, Gerente de producto de TensorFlow, en representación del equipo de TensorFlow para el Blog de TensorFlow.
El 30 de marzo, realizamos la segunda TensorFlow Developer Summit en el Museo de la Historia de la Computación en Mountain View, California. El evento reunió a más de 500 usuarios de TensorFlow en persona y a miles de personas que se sumaron a la transmisión en vivo en los eventos de TensorFlow en todo el mundo. El día estuvo repleto de anuncios de productos nuevos, además de charlas técnicas con el equipo de TensorFlow y conferenciantes invitados. A continuación, se muestran los aspectos destacados del evento:

El aprendizaje automático está resolviendo problemas desafiantes que afectan a todos en todo el mundo. Los problemas cuya resolución antes creíamos imposible o demasiado compleja hoy pueden resolverse con esta tecnología. Con TensorFlow, ya hemos visto grandes avances en muchos campos diferentes. Por ejemplo:

Nos entusiasma ver estas aplicaciones increíbles de TensorFlow y nos comprometemos con el objetivo de lograr que esté disponible para más desarrolladores. Por eso nos complace anunciar nuevas actualizaciones de TensorFlow que ayudarán a mejorar la experiencia de los desarrolladores.

Estamos simplificando el uso de TensorFlow.


Los investigadores y desarrolladores desean una forma más sencilla de usar TensorFlow. Integraremos un modelo de programación más intuitivo para desarrolladores de Python llamado eager execution, que elimina la distinción entre la construcción y la ejecución de gráficos de cálculo. Puedes realizar desarrollos con eager execution y luego usar el mismo código, a fin de generar el gráfico equivalente para la preparación a escala con la API de alto nivel Estimator. También anunciaremos un nuevo método para ejecutar modelos de Estimator en varios GPU en el mismo equipo. Esto permite que los desarrolladores puedan escalar rápidamente sus modelos con cambios de código mínimos.

A medida que los modelos de aprendizaje automático se vuelven más abundantes y complejos, queremos hacer más sencillos el uso compartido, la reutilización y la depuración de estos para los desarrolladores. A fin de ayudar a los desarrolladores a compartir y reutilizar modelos, anunciamos TensorFlow Hub, una biblioteca compilada para fomentar la publicación y el descubrimiento de módulos (piezas independientes del gráfico de TensorFlow) que se pueden volver a utilizar en tareas similares. Los módulos contienen ponderaciones que se han preparado previamente en grandes conjuntos de datos y pueden volver a prepararse en tus aplicaciones. Al reutilizar un módulo, un desarrollador puede preparar un modelo utilizando un conjunto de datos más pequeño, mejorar la generalización o simplemente acelerar la preparación. Para facilitar los modelos de depuración, también lanzaremos un nuevo complemento de depuración gráfico interactivo como parte de la herramienta de visualización de TensorBoard que te ayudará a inspeccionar y recorrer los nodos internos de un gráfico de cómputo en tiempo real.

El entrenamiento del modelo es solo una parte del proceso de aprendizaje automático, y los desarrolladores necesitan una solución que funcione de manera integral para compilar sistemas de aprendizaje automático reales. Con este propósito, anunciaremos el mapa de ruta para TensorFlow Extended (TFX) junto con el lanzamiento de TensorFlow Model Analysis, una biblioteca de código abierto que combina la solidez de TensorFlow y Apache Beam para computar y visualizar métricas de evaluación. Los componentes de TFX que se han lanzado hasta el momento (como TensorFlow Model Analysis, TensorFlow Transform, Estimators y TensorFlow Serving) se integran perfectamente y permiten a los desarrolladores preparar datos, preparar, validar e implementar modelos de TensorFlow en producción.

TensorFlow está disponible en más lenguajes y plataformas


Además de facilitar el uso de TensorFlow, estamos anunciando que los desarrolladores pueden usar TensorFlow en nuevos lenguajes. TensorFlow.js es un nuevo marco de trabajo de aprendizaje automático para desarrolladores de JavaScript. El aprendizaje automático en el navegador a través de TensorFlow.js abre nuevas y fantásticas posibilidades. Esto incluye aprendizaje automático interactivo y compatibilidad ante situaciones en las que todos los datos permanecen del lado del cliente. Se puede utilizar para compilar y preparar módulos por completo en el navegador, e importar modelos TensorFlow y Keras entrenados sin conexión para inferencia con aceleración WebGL. El juego Emoji Scavenger Hunt es un ejemplo divertido de una aplicación compilada con TensorFlow.js.

También tenemos novedades emocionantes para programadores de Swift: TensorFlow for Swift será de código abierto desde abril. TensorFlow for Swift no es tu vinculación de lenguaje típica para TensorFlow. Integra compatibilidad con lenguajes y compiladores de primera clase, lo que proporciona toda la potencia de los gráficos con la usabilidad de eager execution. El proyecto aún se encuentra en desarrollo y pronto anunciaremos más actualizaciones.

También compartimos las últimas actualizaciones de TensorFlow Lite, la solución multiplataforma ligera de TensorFlow para la implementación de modelos de aprendizaje automático preparados en dispositivos móviles y otros dispositivos de punta. Además de la compatibilidad existente con Android e iOS, anunciaremos la compatibilidad con Raspberry Pi, más compatibilidad con operaciones y modelos (se incluyen operaciones personalizadas), y describiremos la forma en que los desarrolladores pueden usar TensorFlow Lite fácilmente en sus propias aplicaciones. El intérprete principal de TensorFlow Lite actualmente ocupa solo 75 KB (frente a 1,1 MB de TensorFlow) y estamos observando aumentos de velocidad que llegan hasta 3 veces cuando se ejecutan modelos de clasificación de imágenes cuantificados en TensorFlow Lite, en comparación con TensorFlow.

Para la compatibilidad con elementos de hardware, TensorFlow ahora ofrece integración con TensorRT de NVIDIA. TensorRT es una biblioteca que optimiza los modelos de aprendizaje profundo para inferencia; también crea un tiempo de ejecución para la implementación en GPU en entornos de producción. Aporta algunas optimizaciones a TensorFlow y selecciona automáticamente kernels específicos de plataformas para maximizar el rendimiento y minimizar la latencia durante la inferencia en GPU.

Para los usuarios que usan TensorFlow en CPU, nuestra asociación con Intel ha permitido la integración con una biblioteca Intel MKL-DNN de código abierto altamente optimizada para el aprendizaje profundo. Al utilizar Intel MKL-DNN, observamos una aceleración de la inferencia de hasta 3 veces en varias plataformas de CPU Intel.

La lista de plataformas en las que funciona TensorFlow se amplió e incluye Cloud TPU, que se lanzaron en versión beta el mes pasado. El equipo de Google Cloud TPU ya logró un fuerte incremento de 1,6 veces en el rendimiento de ResNet-50 desde su lanzamiento. Estas mejoras estarán disponibles próximamente para los usuarios de TensorFlow con la versión 1.8.

Disponibilidad de nuevas aplicaciones y dominios usando TensorFlow


Muchos problemas de análisis de datos se resuelven usando métodos estadísticos o probabilísticos. Además de los modelos de aprendizaje profundo y redes neuronales, TensorFlow ahora ofrece métodos de vanguardia para análisis bayesiano a través de la TensorFlow Probability API. Esta biblioteca contiene componentes fundamentales, como distribuciones de probabilidad, métodos de ejemplo y nuevas métricas y pérdidas. También aumentó la compatibilidad de muchos otros métodos clásicos de aprendizaje automático. A modo de ejemplo, los árboles de decisión optimizados se pueden preparar e implementar fácilmente usando clases prediseñadas de alto nivel.

El aprendizaje automático y TensorFlow ya han ayudado a resolver problemas desafiantes en muchos campos diferentes. Otra área en la que observamos que TensorFlow tiene un gran impacto es la genómica; por ello, lanzaremos Nucleus, una biblioteca destinada a la lectura, escritura y filtración de formatos de archivo comunes en genómica para la aplicación en TensorFlow. Junto con DeepVariant, una herramienta de código abierto basada en TensorFlow para el descubrimiento de variantes del genoma, esto ayudará a ampliar la investigación y los avances en genómica.

Expansión de la participación y los recursos comunitarios


Estas actualizaciones de TensorFlow apuntan a beneficiar y expandir la comunidad de usuarios y colaboradores, los miles de personas responsables de que TensorFlow sea uno de los marcos de trabajo de aprendizaje automático más populares del mundo. Para que continúes participando en la comunidad y estés al tanto de las novedades de TensorFlow, lanzamos el nuevo blog oficial de TensorFlow y el canal de YouTube TensorFlow. También haremos más sencilla la colaboración para nuestra comunidad lanzando nuevas listas de distribución y grupos de interés especiales diseñados para respaldar el trabajo de código abierto en proyectos específicos. Para saber cómo formar parte de la comunidad, visita la página de la comunidad de TensorFlow y, como siempre, puedes seguir a TensorFlow en Twitter para recibir novedades.

Agradecemos a todos los que ayudaron a convertir a TensorFlow en un marco de trabajo de aprendizaje automático exitoso en los últimos dos años. Gracias por seguirnos de manera presencial y remota. Recuerda usar #MadeWithTensorFlow para compartir tus soluciones a problemas impactantes y desafiantes con el aprendizaje automático y TensorFlow.


Hoy  vamos a abordar el primero de los pasos en la integración y manipulación de una Google API. Para esta actividad nos vamos a poner un desafío.  Nuestro desafío consiste en integrar una Google API utilizando OAuth2, elegiremos G+ y finalmente intentamos obtener el cover de un perfil social. Vayamos directamente al código.
Lo primero que vamos a realizar es configurar el entorno de la solución. Vamos utilizar Eclipse con Pydev. Para realizar la interacción con la API de Google utilizaremos algunos componentes que son fundamentales para esta actividad como muestra la Fig.1. (apiclient, httplib2, oauth2client, uritemplate)

cap_1.jpg
Fig. 1 . Estructura básica del ejemplo planteado como desafio



Para obtener la cover foto de un perfil en G+ la Fig2.  muestra como ejemplo la utilización de Jinja2 en donde insertaremos el contenido obtenido de la API y mediante la llamada a service.people()get(userID=’me’)execute(http=http).

cap_2.jpg
Fig. 2. Ejemplo para obtener los datos de la API e insertarlos en el html utilizando jinja2
La Fig.3 muestra la plantilla jinja2 donde vinculamos los datos obtenidos desde la API y los visualizamos en nuestra resolución del desafío.

cap_7.jpg
Fig. 3. Plantilla jinja para mostrar la información obtenida desde la API.


Finalmente como muestra la Fig. 4 tenemos la opción para  autorizarnos a la G+ API, y la Fig 5 muestra la solicitud de permisos correspondientes al contexto requerido.  

cap_3.jpg
Fig. 4. Presentación de la opción para conceder permisos en la aplciación.



cap_4.jpg
Fig. 5. Solicitud de permisos a la API



La Fig. 6 muestra el resultado final de la autorización y ya podemos utilizar el vínculo a nuestra solución final expuesta en este articulo, donde conectaremos con el perfil de G+ para obtener la cover foto.

cap_5.jpg
Fig. 6. Autorización concedida para operar.


La Fig.7 muestra finalmente el resultado de nuestro desafío en donde se obtienen algunos datos del perfil y la cover foto correspondiente.


cap_6.jpg
Fig. 7. Resolución del desafío mostrando la cover foto del perfil de G+



Pueden ver el código principal de este desafío en este link


Referencias:



Actualmente existen gran cantidad de variantes involucradas en el desarrollo de soluciones en Google Cloud Platform, como también opciones de lenguajes y frameworks. Hoy vamos a utilizar el lenguaje de desarrollo Python (versión 2.7) y, para simplificar,  el desarrollo el framework webapp2, integrado en el SDK de App Engine.
Nuestra desafío será construir en minutos una solución simple que maneje formularios web que podamos validar de forma local y sea desplegable en la nube con un solo click.

Podemos utilizar diversos entornos de desarrollo según las preferencias del desarrollador, además es requerido el SDK para Python de App Engine. (utilice el indicado según la plataforma escogida)

Para cumplir con nuestro objetivo necesitamos básicamente dos archivos:
· app.yaml
· iniciando.py

Vamos a crear la configuración básica de la aplicación mediante el archivo app.yaml


cap_1.jpg
Fig. 1 - Estructura de la aplicación






Como muestra la Fig. 2 la estructura de la aplicación propone la configuración básica por medio de los atributos: application, version, runtime, api_version y threadsafe. Además, propone un handler con el script iniciando.application.



cap_2.jpg


Fig. 2 Archivo de configuración app.yaml

Antes de construir las clases que representen el formulario web y su mecanismo de interacción, vamos a ver en la Fig. 3 la clase Principal. Esta clase propone un handler que muestra cómo podemos obtener el usuario actual autenticado y mostrar algún mensaje mediante webapp2. 




cap_3.jpg
Fig. 3  Clase Principal que muestra ejemplos de interacción básicos con webapp2
Es momento de crear las clases con el objetivo de resolver el desafío planteado. Como pueden observar en la Fig. 4 utilizamos imports para detectar desde el appengine.api el usuario autenticado, además incluimos el framework webapp2 y el cgi.

cap_4.jpg
Fig. 4 - Imports y variables para resolución del desafío planteado

Además tenemos una variable pagina que propone código html genérico que vamos a cargar en nuestra solución. En la siguiente Fig. 5 se puede observar el desarrollo de las clases:
· Home: esta clase realiza la carga del HTML ubicado en la variable pagina.
· Registro: esta clase, obtiene el usuario autenticado, si esto es correcto realiza la operación correspondiente al formulario web trabajado. En otro caso lleva a la acción de autenticación.

cap_5.jpg
Fig. 5 Clases principales para el desafío planteado.



Finalmente se realiza la operación de carga por medio de webapp2, como muestra la Fig. 6.

cap_6.jpg
Fig. 6 - Representación y carga de las clases Home y Registro.


Hemos generado una simple solución que utiliza formularios web pero aún nos quedas mas desafíos cómo persistir información e implementar plantillas...Estén atentos a las siguientes entregas.  
 

Referencias:
· Código de la aplicación open source Apache 2.0