Un tutorial oficial sobre @tf.functiondice:
Para obtener el máximo rendimiento y hacer que su modelo sea desplegable en cualquier lugar, use tf.function para hacer gráficos de sus programas. Gracias a AutoGraph, una sorprendente cantidad de código de Python simplemente funciona con tf.function, pero todavía hay dudas de las que debemos tener cuidado.
Las principales conclusiones y recomendaciones son:
- No confíe en los efectos secundarios de Python como la mutación de objetos o los anexos de listas.
- La función tf funciona mejor con operaciones TensorFlow, en lugar de operaciones NumPy o primitivas Python.
- En caso de duda, utilice el idioma for x in y.
Solo menciona cómo implementar @tf.functionfunciones anotadas, pero no cuándo usarlo.
¿Hay una heurística sobre cómo decidir si al menos debería intentar anotar una función tf.function? Parece que no hay razones para no hacerlo, a menos que sea demasiado flojo para eliminar los efectos secundarios o cambiar algunas cosas como range()-> tf.range(). Pero si estoy dispuesto a hacer esto ...
¿Hay alguna razón para no usar @tf.functionpara todas las funciones?
tf.functionguía dice "Decorar funciones a nivel de módulo y métodos de clases a nivel de módulo, y evitar decorar funciones o métodos locales". Me parece recordar una redacción más explícita, como "no decorar todas las funciones, usar tf.functionen funciones de nivel superior, como un ciclo de entrenamiento", pero puedo recordar mal (o tal vez se ha eliminado). OTOH, esta discusión tiene una entrada interesante de los desarrolladores, al final parece estar bien usarla en cualquier función para tensores / variables.
@tf.functionfunciones anotadas de @jdehesa AFAIK también compilan las funciones que ellos mismos llaman gráficos. Por lo tanto, solo necesitaría anotar el punto de entrada al módulo que sea coherente con lo que describe. Pero tampoco estaría de más anotar manualmente las funciones más bajas en la pila de llamadas.
tf.function se llama a varias veces, no puede evitar la "duplicación de código" en el gráfico, por lo que parece recomendable su uso generalizado.
tensorflow0.1,tensorflow0.2,tensorflow0.3,tensorflow0.4,tensorflow0.5y así sucesivamente, así como una etiqueta para cada uno de estostfmódulos y clases luego. Además, ¿por qué no agregar una etiqueta para cada uno de los módulos estándar de Python y sus funciones y clases?