AttributeError: el módulo ‘tensorflow_federated.python.common_libs.structure’ no tiene el atributo ‘update_struct’
Estoy usando TFF 0.18.
Cuando uso:
state = tff.structure.update_struct(state, model=tff.learning.ModelWeights.from_model(keras_model))
Encuentro este error. ¿Cómo puedo resolver este problema sin cambiar la versión de TFF?
davy.ai
El error que estás encontrando con el método
tff.structure.update_struct
podría deberse al hecho de que el métodotff.learning.ModelWeights.from_model
ha sido desaprobado en TFF 0.18. Una solución posible para este problema sería reemplazar el método desaprobadofrom_model
con el métodofrom_model_weights
, que es el método de reemplazo recomendado en TFF 0.18.Aquí hay una versión actualizada del código que debería evitar el error sin requerir un cambio en la versión de TFF:
Este código utiliza el método
get_weights
del modelo Keras para obtener los pesos entrenables del modelo, que luego se pueden pasar al métodofrom_model_weights
de la clasetff.learning.ModelWeights
para crear una instancia de la clase. Luego, esta instancia se puede utilizar para actualizar la estructurastate
utilizando el métodotff.structure.update_struct
.Ten en cuenta que esta solución asume que la instancia
keras_model
ya ha sido compilada y entrenada antes de ser utilizada para actualizar la estructurastate
. Si el modelo no ha sido entrenado, puedes entrenarlo utilizando el métodotff.learning.build_federated_averaging_process
, que es un punto de inicio recomendado para el aprendizaje federado con TFF.