Решение
Декоратор @tf.function
удобно преобразует функцию python в статический c график тензорного потока. TensorFlow по умолчанию работает в активном режиме, начиная с версии 2.0.0
. Несмотря на то, что активный режим может помочь вам в построчном выполнении, это связано с относительно более медленным выполнением кода TensorFlow по сравнению со stati c -graph. Преобразование определенной функции в график c увеличивает скорость выполнения при обучении вашей модели.
Цитирование tf.function
документация:
Функции могут быть быстрее чем нетерпеливый код, особенно для графиков с большим количеством мелких операций. Но для графиков с несколькими дорогостоящими операциями (например, свертки) вы можете не увидеть большого ускорения.
График stati c создается один раз и не обновляется, если функция вызывается повторно с разные значения (не передаются в качестве входных аргументов). Вам следует избегать использования @tf.function
в таком сценарии ios или обновлять определение функции (если возможно), чтобы включить всю необходимую изменчивость через входные аргументы. Однако теперь, если ваша функция получает все свои входные данные через аргументы функции, тогда, если вы примените @tf.function
, вы не увидите никаких проблем.
Вот пример.
### When not to use @tf.function ###
# some variable that changes with time
var = timestamp()
@tf.function
def func(*args, **kwargs):
# your code
return var
В приведенном выше примере функция func()
хотя и зависит от var
, но не обращается к переменной var
через свои аргументы. Таким образом, когда @tf.function
применяется в первый раз, он создает статический c -граф для func()
. Однако, когда значение var
изменится в будущем, оно не будет обновляться в статическом c -графе. См. это для большей ясности. Кроме того, я настоятельно рекомендую вам просмотреть раздел ссылок.
Для отладки
Цитирование источник
Вы можете использовать tf.config.experimental_run_functions_eagerly
(который временно отключает запущенные функции как функции) в целях отладки.
Ссылки
- Лучшая производительность с tf.function
- Когда использовать tf.функцию
- TensorFlow 2.0: tf.function и AutoGraph