如何在 Tensorflow Federated 中检查客户端模型更新

问题描述

我最近一直在学习 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 ,其中还说明了如何完全避免聚合。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...