python - 如何更改客户端发送到服务器 Tensorflow Federated 的更新
问题描述
我试图以 simple_fedavg 为例来了解 Tensorflow Federated 的工作原理。
例如,我仍然不明白如何更改客户端发送到服务器的内容。
我不想发送更新的所有权重,我想发送这样形成的列表:
test[index] = test_stc.stc_compression(test[index], sparsification_rate)
test_stc.stc_compression(test[index], sparsification_rate)
返回 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
为发送我创建的列表而不是所有权重,然后在服务器上使用客户端发送的信息创建自定义权重列表。只有在创建新的自定义重量列表后,我才希望服务器更新模型。
我实际上试图更改return ClientOutput(test, client_weight, loss_sum / client_weight)
,client_update
但后来我不知道如何访问test
服务器上的变量以及我需要在哪个过程/函数中进行访问。
我希望我说得足够清楚,因为我的主要语言不是英语。
解决方案
请参阅tff.federated_aggregate
操作员,它公开了您可能需要的控件(我不确定我是否遵循它),包括在添加到聚合累加器之前应该对服务器上的每个客户端值进行哪些计算。
您可以将上面提到的tff.federated_mean
视为此通用运算符的特例。
推荐阅读
- r - scale_fill_fermenter() 的自定义调色板
- android - 为什么导航返回后会创建一个新的 ViewModel 实例?
- python - 在 Python 中查找和删除不按顺序排列的条目
- mysql - SQL Query 适用于 `like` 但不适用于某些 id 的 equals
- r - 使用 position_dodge preserve=single 和 facet_wrap free_x
- gtk - GTKmm:从另一个打开窗口
- javascript - 如何制作从零到原始数组索引的一系列数组
- jasper-reports - 如何让背景图片覆盖 Jasper 报告目录中的整个页面?
- java - 在第一次提交之前开始两次交易?
- aws-lambda - 从 aws cli 部署到 lambda 边缘函数