【发布时间】:2020-02-29 09:02:57
【问题描述】:
我想知道是否可以为 tensorflow_federated 中的每个客户端使用不同的权重和偏差。
请帮忙。
【问题讨论】:
标签: tensorflow tensorflow-federated
我想知道是否可以为 tensorflow_federated 中的每个客户端使用不同的权重和偏差。
请帮忙。
【问题讨论】:
标签: tensorflow tensorflow-federated
是的,TensorFlow Federated 支持客户端拥有自己的模型参数。
在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'
【讨论】: