问题描述
我最近一直在学习 TensorFlow Federated 框架,但遇到了一个问题。我想在聚合之前查看发送到中央服务器的经过训练的客户端权重。
例如,在 this 教程中,我可以访问状态变量:
package BasicsOfJava.BasicsOfJava;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertTrue;
import static org.testng.Assert.assertEquals;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
public class JunitAssertions {
@Test
public void assertionsInJava()
{
List<String> emptyList = new ArrayList<>();
**assertthat**(emptyList,empty());
Note : In my editor,assertthat is struck.
}
状态变量保存中心模型的权重(通过聚合客户端权重创建)。无论如何要检查在 TensorFlow Federated 中聚合之前客户端发送的权重吗?
谢谢,感谢任何帮助。
解决方法
Federated Learning for Image Classification
教程使用 tff.learning.build_federated_averaging_process
API 构建训练过程;查看该方法如何聚合的代码,并在此之前插入一些东西。然而!这个方法相当复杂,因为它是由来自 tff.aggregators
的聚合方法参数化的。
要创建替代算法,我建议查看更简单的 federated/tensorflow_federated/python/examples/simple_fedavg/ 实现。特别地,客户端更新的平均值是在 Line 131 上计算的。在此之前插入将是查看的地方。
另请参阅问题 Collecting the weights returned by clients without aggregating them ,其中还说明了如何完全避免聚合。