Path: blob/master/site/es-419/guide/migrate/upgrade.ipynb
25118 views
Copyright 2018 The TensorFlow Authors.
Reescribir automáticamente los símbolos de TF 1.x y API compat.v1
TensorFlow 2.x incluye muchos cambios en la API con respecto a TF 1.x y la API tf.compat.v1
, como la reordenación de argumentos, el cambio de nombre de los símbolos y la modificación de los valores predeterminados de los parámetros. Realizar manualmente todas estas modificaciones sería tedioso y propenso a errores. Para agilizar los cambios, y para que su transición a TF 2.x sea lo más fluida posible, el equipo de TensorFlow ha creado la utilidad tf_upgrade_v2
para ayudar a la transición del código heredado a la nueva API.
Nota: tf_upgrade_v2
se instala automáticamente para TensorFlow 1.13 y posteriores (incluidas todas las compilaciones de TF 2.x).
El uso típico es el siguiente:
tf_upgrade_v2 \ --intree my_project/ \ --outtree my_project_v2/ \ --reportfile report.txt
Acelerará su proceso de actualización convirtiendo los scripts Python existentes de TensorFlow 1.x a TensorFlow 2.x.
El script de conversión automatiza muchas transformaciones mecánicas de las API, aunque muchas API no pueden migrarse de este modo automáticamente. Tampoco es capaz de hacer que su código sea totalmente compatible con los comportamientos y las API de TF2. Por lo tanto, es sólo una parte de su proceso de migración.
Módulos de compatibilidad
Algunos símbolos de la API no pueden actualizarse simplemente reemplazando la cadena de caracteres. Los que no puedan actualizarse automáticamente se mapearán en sus ubicaciones en el módulo compat.v1
. Este módulo reemplaza símbolos TF 1.x como tf.foo
por la referencia equivalente tf.compat.v1.foo
. Si ya está usando las APIs compat.v1
mediante la importación de TF a través de import tensorflow.compat.v1 as tf
, el script tf_upgrade_v2
intentará convertir estos usos a las APIs que no son compat siempre que sea posible. Tenga en cuenta que aunque algunas APIs compat.v1
son compatibles con los comportamientos de TF2.x, muchas no lo son. Por lo tanto, se recomienda revisar manualmente los reemplazos y migrarlos a las nuevas APIs en el namespace tf.*
en lugar de tf.compat.v1
lo antes posible.
Debido a los módulos obsoletos de TensorFlow 2.x (por ejemplo, tf.flags
y tf.contrib
), algunos cambios no se pueden solucionar cambiando a compat.v1
. La actualización de este código puede requerir usar una librería adicional (por ejemplo, absl.flags
) o cambiar a un paquete en tensorflow/addons.
Proceso de actualización recomendado
El resto de esta guía muestra cómo usar el script de reescritura de símbolos. Aunque el script es fácil de usar, se recomienda encarecidamente que lo use como parte del siguiente proceso:
Pruebas de unidad: Asegúrese de que el código que está actualizando tiene un conjunto de pruebas de unidad con una cobertura razonable. Se trata de código Python, por lo que el lenguaje no le protegerá de muchas clases de errores. Asegúrese también de que cualquier dependencia que tenga ya ha sido actualizada para ser compatible con TensorFlow 2.x.
Instale TensorFlow 1.15: Actualice su TensorFlow a la última versión de TensorFlow 1.x, como mínimo a la 1.15. Ésta incluye la API final de TensorFlow 2.0 en
tf.compat.v2
.Pruebe con 1.15: Asegúrese de que sus pruebas de unidad superan este punto. Las ejecutará repetidamente mientras actualiza, por lo que empezar bien es importante.
Ejecute el script de actualización: Ejecute
tf_upgrade_v2
en todo su árbol de código fuente, incluidas las pruebas. Esto actualizará su código a un formato en el que sólo use símbolos disponibles en TensorFlow 2.0. Se accederá a los símbolos obsoletos contf.compat.v1
. Estos eventualmente requerirán atención manual, pero no inmediatamente.Ejecute las pruebas convertidas con TensorFlow 1.15: Su código debería seguir funcionando correctamente en TensorFlow 1.15. Vuelva a ejecutar sus pruebas de unidad. Cualquier error en sus pruebas aquí significa que hay un error en el script de actualización. Por favor, háganoslo saber.
Revise el informe de actualización en busca de advertencias y errores: El script escribe un archivo de informe que explica cualquier conversión que deba volver a verificar, o cualquier acción manual que deba realizar. Por ejemplo: Cualquier instancia restante de contrib requerirá ser eliminada manualmente. Consulte el RFC para conocer más detalles.
Instale TensorFlow 2.x: En este punto debería ser seguro cambiar a los binarios de TensorFlow 2.x, incluso si se está ejecutando con comportamientos heredados
Haga pruebas con
v1.disable_v2_behavior
: Si vuelve a ejecutar sus pruebas con unv1.disable_v2_behavior()
en la función principal de las pruebas, debería obtener los mismos resultados que si las ejecutara con la versión 1.15.Habilitar comportamiento V2: Ahora que sus pruebas funcionan usando los binarios TF2, ya puede empezar a migrar su código para evitar
tf.estimator
s y usar sólo los comportamientos TF2 soportados (sin desactivar el comportamiento TF2). Consulte las Guías de migración para más detalles.
Usar el script de reescritura de símbolos tf_upgrade_v2
Preparación
Antes de empezar, asegúrese de que TensorFlow 2.x está instalado.
Clone el repositorio git tensorflow/models para tener algo de código con el que hacer pruebas:
Lea la ayuda
El script debe instalarse con TensorFlow. Aquí está la ayuda incorporada:
Ejemplo de código TF1
Aquí tiene un sencillo script TensorFlow 1.0:
Con TensorFlow 2.x instalado no se ejecuta:
Archivo individual
El script puede ejecutarse en un único archivo Python:
El script mostrará errores si no puede encontrar una solución para el código.
Árbol de directorios
Los proyectos habituales, incluido este sencillo ejemplo, usarán mucho más que un archivo. Normalmente se desea actualizar un paquete entero, por lo que el script también puede ejecutarse en un árbol de directorios:
Tenga en cuenta la única advertencia sobre la función dataset.make_one_shot_iterator
.
Ahora el script funciona con TensorFlow 2.x:
Tenga en cuenta que, dado que el módulo tf.compat.v1
está incluido en TF 1.15, el script convertido también se ejecutará en TensorFlow 1.15.
Informe detallado
El script también informa de una lista de cambios detallados. En este ejemplo encontró una transformación posiblemente insegura e incluyó una advertencia en la parte superior del archivo:
Observe de nuevo la única advertencia sobre la función Dataset.make_one_shot_iterator
.
En otros casos, la salida explicará el razonamiento de los cambios no triviales:
Aquí está el contenido del archivo modificado, observe cómo el script añade nombres de argumentos para lidiar con los argumentos movidos y renombrados:
Un proyecto más grande puede contener algunos errores. Por ejemplo, convertir el modelo deeplab:
Produjo los archivos de salida:
Pero hubo errores. El informe le ayudará a determinar lo que debe corregir antes de que se ejecute. Aquí están los tres primeros errores:
Modo de "seguridad"
El script de conversión también tiene un modo menos invasivo SAFETY
que simplemente cambia las importaciones para usar el módulo tensorflow.compat.v1
:
Como puede ver, esto no actualiza su código, pero permite que el código TensorFlow 1 se ejecute contra binarios TensorFlow 2. ¡Tenga en cuenta que esto no significa que su código esté ejecutando comportamientos TF 2.x soportados!
Precauciones
No actualice partes de su código manualmente antes de ejecutar este script. En particular, las funciones que han sufrido una reordenación de argumentos como
tf.math.argmax
otf.batch_to_space
hacen que el script añada incorrectamente argumentos de palabras clave que desajustan su código existente.El script asume que
tensorflow
se importa usandoimport tensorflow as tf
, oimport tensorflow.compat.v1 as tf
.Este script no reordena los argumentos. En su lugar, el script añade argumentos de palabra clave a las funciones que tienen sus argumentos reordenados.
Consulte tf2up.ml para encontrar una herramienta práctica para actualizar blocs de notas Jupyter y archivos Python en un repositorio GitHub.
Para informar de errores en el script de actualización o para solicitar funciones, presente un incidente en GitHub.