1

我想知道是否可以为 tensorflow_federated 中的每个客户端使用不同的权重和偏差。

请帮忙。

4

1 回答 1

0

是的,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'
于 2020-02-29T16:28:24.310 回答