Versión de prueba de TensorFlow 2.0 Alfa
jueves, 7 de marzo de 2019
Publicado por Wolff Dobson y Josh Gordon
TensorFlow 2.0 se enfoca en la facilidad de uso, con API que los principiantes y los expertos pueden usar para crear modelos de aprendizaje automático. En artículos recientes, como Lo que viene en TensorFlow 2.0 y Estandarización de Keras, se presentaron funciones nuevas y la dirección a la que apunta la plataforma.
Hoy, en la Cumbre de desarrolladores de TensorFlow, se anunció la posibilidad de probar una versión preliminar anticipada de TensorFlow 2.0.
Cómo comenzar
La mejor forma de comenzar a usar TensorFlow 2.0 Alfa es visitar el nuevo sitio web de TensorFlow. En tensorflow.org/alpha, es posible encontrar instructivos de etapas preliminares y guías para la versión Alfa. Cada instructivo incluido en los documentos de Alfa descargará e instalará automáticamente TensorFlow 2.0 Alfa. ¡Esto es solo el comienzo!Se recomienda comenzar con los ejemplos de “Hello World” para principiantes y expertos y, posteriormente, leer guías como La eficacia de TensorFlow 2.0.
- En el ejemplo para principiantes, se utiliza la API secuencial de Keras: la forma más simple de comenzar a usar TensorFlow 2.0.
- En el ejemplo para expertos, se muestra la forma de escribir un pase adelantado de modo imperativo, la forma de escribir un bucle de capacitación personalizado mediante GradientTape y la forma de usar tf.function para compilar código automáticamente (¡con solo una línea!).
- Importante: Una guía sobre AutoGraph (herramienta que permite obtener todo el rendimiento y la portabilidad de los gráficos, sin necesidad de escribir código de nivel de gráfico).
- Una guía sobre la actualización de códigos (con una secuencia de comandos de conversión para facilitar la conversión de código de TensorFlow 1.x en 2.0).
- Guías adicionales de etapas preliminares para Keras.
Instalación
Para instalar la versión Alfa, se recomienda crear un entorno virtual nuevo y usar lo siguiente:# CPU pip install tensorflow==2.0.0-alpha0 # GPU pip install tensorflow-gpu==2.0.0-alpha0Una referencia importante es esta guía de instalación, disponible en tensorflow.org, en la que se proporcionan más detalles. (Nota: Esta es una versión muy reciente que se actualizará en el futuro cercano). También es posible probar la versión Alfa en Colab mediante alguno de los nuevos blocs de notas en la sección de TensorFlow 2.0 Alfa del sitio web.
Funciones, no sesiones
Profundicemos en la forma en que dos funciones de 2.0 trabajan en conjunto: Eager Execution y @tf.function.Uno de los cambios más importantes es que TensorFlow es diligente, lo que significa que las opciones se ejecutan inmediatamente al llamarlas. Como se sabe, en TensorFlow 1.x, primero es necesario construir un gráfico y, a continuación, ejecutar porciones del gráfico mediante tf.Session.run(). TensorFlow 2.0 simplifica radicalmente el uso de TensorFlow; las mismas opciones grandiosas ahora son mucho más fáciles de comprender y usar.
a = tf.constant([1, 2]) b = tf.constant([3, 4])
print(a + b) # returns: tf.Tensor([4 6], shape=(2,), dtype=int32)
TensorFlow 2.0 utiliza Keras como una experiencia de desarrollador central. Con 2.0, puedes usar Keras de la forma que sabes, crear modelos con la API secuencial y usar la función de compilar y ajustar. Todos estos ejemplos conocidos de tf.keras de tensorflow.org funcionan de inmediato en la versión 2.0.
La opción fit() de Keras funciona bien en la mayoría de los casos; sin embargo, los usuarios que necesitan más flexibilidad tienen muchas más opciones. Examinemos un bucle de capacitación personalizado escrito en estilo TensorFlow 2.0 en este ejemplo:
# See https://github.com/tensorflow/docs/blob/master/site/en/r2/guide/autograph.ipynb def train_one_step(model, optimizer, x, y): with tf.GradientTape() as tape: logits = model(x) loss = compute_loss(y, logits) grads = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(grads, model.trainable_variables)) compute_accuracy(y, logits) return loss def train(model, optimizer): train_ds = mnist_dataset() step = 0 loss = 0.0 for x, y in train_ds: step += 1 loss = train_one_step(model, optimizer, x, y) if tf.equal(step % 10, 0): tf.print('Step', step, ': loss', loss, '; accuracy', compute_accuracy.result()) return step, loss, accuracy
Aquí se utiliza una opción GradientTape estilo Autograd y se aplican las gradientes manualmente mediante un optimizador. Esto puede resultar útil para escribir bucles de capacitación personalizados con un funcionamiento interno complicado, como el aprendizaje de refuerzo o la investigación (con lo que es más fácil trabajar sobre una nueva idea y obtener un optimizador más eficiente).
Eager Execution también es útil para depurar y supervisar código a medida que se ejecuta, ya que se puede usar el depurador Python para inspeccionar objetos, como variables, capas y gradientes. Actualmente, se usan construcciones de Python, como if, for y print(), dentro de nuestro bucle de capacitación.
Una vez que el código funciona de la manera deseada, se recomienda aumentar la optimización y la eficiencia de los gráficos. Para esto, se debe encapsular la opción train con @tf.function de decorador. Autograph se encuentra integrado en tf.function; por eso, no es necesario hacer nada especial para que las cláusulas if o for se ejecuten con eficiencia de gráficos.
# See https://github.com/tensorflow/docs/blob/master/site/en/r2/guide/autograph.ipynb @tf.function def train(model, optimizer): train_ds = mnist_dataset() step = 0 loss = 0 accuracy = 0 for x, y in train_ds: # as above, including the "if" and "print()" return step
Este código funcionará exactamente de la misma manera sin la anotación, pero se compilará en un gráfico que se podrá ejecutar fácilmente en GPU y TPU, o se podrá guardar en un SavedModel para utilizarlo más tarde.
La parte particularmente divertida de esto es que, al encapsular train() en @tf.function, train_one_step(), compute_loss() y compute_accuracy() también se convertirán automáticamente. Asimismo, es posible optar por encapsular solo una parte de los cómputos en @tf.function para obtener el comportamiento deseado.
Además, TensorFlow 2.0 es totalmente compatible con los estimadores. Consulta los nuevos instructivos para Árboles optimizados y Comprensión de modelos.
¡Las pruebas y los comentarios son bienvenidos!
Agradecemos enormemente los comentarios de los usuarios que prueban la versión más reciente y actualizan sus modelos. Únete al grupo de usuarios testing@TensorFlow. Te invitamos a participar en nuestras presentaciones de soporte de TF 2.0 semanales (martes, 2:00 p. m., hora del Pacífico).Es probable que detectes errores, problemas de rendimiento y otros asuntos. Te recomendamos que los denuncies en nuestro rastreador de problemas con la etiqueta 2.0. Sería de gran ayuda que incluyas un ejemplo mínimo completo donde se reproduzca con exactitud el error.
Pronto habrá más novedades
Para permanecer actualizado sobre los problemas conocidos y el trabajo de desarrollo de TensorFlow 2.0, consulta nuestro Rastreador de proyectos de TF 2.0 en Github. Seguimos trabajando y mejorando TensorFlow 2.0, así que verás actualizaciones frecuentes en el paquete de compilación nocturno. Para aclarar, esta es una versión preliminar para desarrolladores. ¡Valoramos tus comentarios!Además, si creaste algo asombroso con TF 2.0, desde aplicaciones para dispositivos móviles y proyectos de investigación hasta instalaciones de arte, nos encantaría oír sobre eso y destacar tu trabajo. Cuéntanos aquí.
Si desarrollaste ejemplos recientes que deseas compartir, considera enviar una solicitud PR para agregarla a la organización TensorFlow como parte de tensorflow/examples/community.