ПРЕДУПРЕЖДЕНИЕ: tensorflow: AutoGraph не удалось преобразовать ‹функцию ‹lambda› в 0x7fca141a6d08› и запустит ее как есть

Реализую код TFF классификации изображений. TFF версии 0.18.0, пишу так:

iterative_process = tff.learning.build_federated_averaging_process(model_fn, server_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=1.0), client_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=0.001))

state = iterative_process.initialize()

Но я нахожу это предупреждение:

WARNING:tensorflow:AutoGraph could not transform <function <lambda> at 0x7fca141a6d08> and will run it as-is.
Cause: could not parse the source code of <function <lambda> at 0x7fca141a6d08>: found multiple definitions with identical signatures at the location. This error may be avoided by defining each lambda on a single line and with unique argument names.
Match 0:
(lambda : tf.keras.optimizers.SGD(learning_rate=1.0))

Match 1:
(lambda : tf.keras.optimizers.SGD(learning_rate=0.001))

To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert

Итак, пожалуйста, как мне избежать этого предупреждения? Спасибо


person seni    schedule 11.03.2021    source источник


Ответы (1)


Во-первых, это предупреждение мне не кажется проблемой. TFF нужны функции, которые создают оптимизаторы в случае, если эти оптимизаторы полагаются на внутренние переменные (например, Adagrad и Adam, которые сохраняют состояние и используют переменные для отслеживания условий предварительного кондиционирования и импульса) - TFF должен иметь возможность фиксировать конструкцию этих переменных для обеспечения правильного код может работать на устройстве и, следовательно, не нуждается в автографе для преобразования этих функций - для этого достаточно функций Python.

Во-вторых, один простой вариант, который, как мне кажется, заставит замолчать предупреждение, - это использовать именованную функцию для вашего оптимизатора fns. То есть, если вы использовали что-то вроде


def server_optimizer_fn():
  return tf.keras.optimizers.SGD(learning_rate=1.)

def client_optimizer_fn():
  return tf.keras.optimizers.SGD(learning_rate=0.001)

iterative_process = tff.learning.build_federated_averaging_process(
    model_fn,
    server_optimizer_fn=server_optimizer_fn,
    client_optimizer_fn=client_optimizer_fn)

Автограф больше не должен жаловаться.

person Keith Rush    schedule 05.04.2021