如何使用 TFF 进行预测?

问题描述

我的问题是:如何使用 Tensorflow Federated 预测此类图像的标签

完成模型评估后,我想预测给定图像的标签。就像在 Keras 中一样,我们这样做:

# new instance where we do not kNow the answer
Xnew = array([[0.89337759,0.65864154]])
# make a prediction
ynew = model.predict_classes(Xnew)
# show the inputs and predicted outputs
print("X=%s,Predicted=%s" % (Xnew[0],ynew[0]))

输出

X=[0.89337759 0.65864154],Predicted=[0]

以下是 state 和 model_fn 的创建方式:


def model_fn():
    keras_model = create_compiled_keras_model()
    return tff.learning.from_compiled_keras_model(keras_model,sample_batch) 

iterative_process = tff.learning.build_federated_averaging_process(model_fn,server_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=1.0),client_weight_fn=None)
state = iterative_process.initialize()

我发现这个错误

list(self._name_to_index.keys())[:10]))
AttributeError: The tuple of length 2 does not have named field "assign_weights_to". Fields (up to first 10): ['trainable','non_trainable']

谢谢

解决方法

(需要 TFF 0.16.0 或更新版本)

由于代码是从 tff.learning.Model 构建 tf.keras.Model,因此您可以在 assign_weights_to 对象上使用 tff.learning.ModelWeights 方法({{1} })。 Federated Learning for Text Generation 教程中使用了此方法。

这可能看起来像(靠近底部,早期部分是示例 FL 训练循环):

state.model

一旦 def create_keras_model() -> tf.keras.Model: ... def model_fn(): ... return tff.learning.from_keras_model(create_keras_model()) training_process = tff.learning. build_federated_averaging_process(model_fn,...) state = training_process.initialize() for _ in range(NUM_ROUNDS): state,metrics = training_process.next(state,...) model_for_inference = create_keras_model() state.model.assign_weights_to(model_for_inference) 的权重被分配回 Keras 模型,代码就可以使用标准的 Keras API,例如 tf.keras.Model.predict_on_batch

state

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...