You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:45:04