如何更改客户端发送到服务器的更新 Tensorflow Federated

How to change the update that the client send to the server Tensorflow Federated

我正在尝试了解 Tensorflow Federated 的工作原理,以 simple_fedavg 为例。

例如,我仍然不明白如何更改客户端发送到服务器的内容。

我不想发送更新的所有权重,我想发送这样形成的列表:

  test[index] = test_stc.stc_compression(test[index], sparsification_rate)

其中 test_stc.stc_compression(test[index], sparsification_rate) return 5 个值:negatives, positives, average, original_shape, new_shape,那么我想在 运行 round_model_delta = tff.federated_mean(client_outputs.weights_delta, weight=weight_denom) 之前访问服务器端的那些信息创建我将用于 tff.federated_mean.

的权重

所以,基本上,我想更改 client_update 以发送我创建的列表而不是所有权重,然后在服务器上使用客户端提供的信息创建自定义权重列表发送。只有在创建新的自定义权重列表后,我才希望服务器更新模型。

我实际上尝试更改 client_updatereturn ClientOutput(test, client_weight, loss_sum / client_weight),但我不知道如何访问服务器上的 test 变量以及 [=33] =] 我需要这样做。

因为我的主要语言不是英语,所以我希望我说得够清楚了。

请参阅 tff.federated_aggregate 运算符,它公开了您可能需要的控件(我不确定我遵循的是什么),包括在添加到聚合累加器之前应该对服务器上的每个客户端值进行哪些计算.

你可以把上面提到的tff.federated_mean看作是这个通用运算符的一个特例。