我想知道是否可以为 tensorflow_federated 中的每个客户端使用不同的权重和偏差。
请帮忙。
是的,TensorFlow Federated 支持客户端拥有自己的模型参数。
Federated Averaging 的实施tff.learning.build_federated_averaing_process
始于tff.federated_broadcast
针对每个客户端的全局共享模型(此时每个客户端具有相同的模型权重和偏差)。然后每个客户端在自己的本地数据上进行训练,导致每个客户端具有不同的权重和偏差。最后,只有权重被重新组合成一个共享的全局模型tff.federated_mean
。
在这种情况下,计算将全局模型作为输入并输出一个新的全局模型,将单个客户端权重和偏差包含在模拟中。但是,可以为各个模型重写模拟。
就像是:
MODEL_WEIGHTS_TYPE = ... # a nested structure of tensors of the model weights
DATASET_TYPE = ... # a tff.SequenceType
@tff.tf_computation(MODEL_WEIGHTS_TYPE, DATASET_TYPE)
def local_train(model_weights, dataset):
# do local training
return new_model_weights
# Simulate 3 clients
client_model_weights = [w_a, w_b, w_c]
client_training_data = [d_a, d_b, d_c]
client_model_weights = tff.federated_map(
local_train, (client_model_weights, client_training_data))
# client_model_weights[0] == the new, different weights for client 'A'