使用TFF进行联邦学习报错:learning模块无from_keras_model属性
解决TFF中
from_keras_model属性不存在的问题 你的错误提示说明你的model_fn函数中调用了tff.learning.from_keras_model,但TensorFlow Federated从0.50.x版本开始,该函数已从tff.learning模块迁移至tff.learning.models模块,0.61.0版本中tff.learning不再包含该属性,因此触发AttributeError。
解决方案
1. 直接替换函数路径
将model_fn中的tff.learning.from_keras_model替换为tff.learning.models.from_keras_model,示例代码:
def model_fn(): # 定义你的Keras模型 keras_model = tf.keras.Sequential([ tf.keras.layers.Dense(10, activation='softmax', input_shape=(784,)) ]) # 使用迁移后的函数封装模型 return tff.learning.models.from_keras_model( keras_model, input_spec=train_data.element_spec, loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics=[tf.keras.metrics.SparseCategoricalAccuracy()] )
2. 推荐使用KerasModel类封装(符合新版本规范)
TFF新版本更推荐用tff.learning.models.KerasModel类直接封装Keras模型,示例:
def model_fn(): keras_model = tf.keras.Sequential([ tf.keras.layers.Dense(10, activation='softmax', input_shape=(784,)) ]) return tff.learning.models.KerasModel( keras_model=keras_model, input_spec=train_data.element_spec, loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics=[tf.keras.metrics.SparseCategoricalAccuracy()] )
3. 验证训练代码
你提供的训练循环代码(基于build_weighted_fed_avg)本身没有问题,调整model_fn后即可正常运行,无需降级TFF版本。
注意事项
- 确保
input_spec参数与你的train_data元素结构完全匹配,这是TFF联邦学习的必填参数。
内容的提问来源于stack exchange,提问作者interbyte
相关产品推荐
相关产品推荐

