ВНИМАНИЕ: тензорный поток: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
Итак, пожалуйста, как мне избежать этого предупреждения? Спасибо
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)
Автограф больше не должен жаловаться.