Path: blob/master/site/zh-cn/federated/tutorials/loading_remote_data.ipynb
25118 views
Copyright 2022 The TensorFlow Authors.
在 TFF 中加载远程数据
注:本 Colab 已通过验证,可与最新发布版本的 tensorflow_federated
pip 软件包一起使用,但 Tensorflow Federated 项目仍处于预发布开发阶段,可能无法在 main
上运行。
在联合学习的实际应用中,原始训练数据通常分布在许多设备或数据孤岛中 – 需要特殊的预处理和加载才能使用。
本教程介绍了如何使用 TFF 的 DataBackend
和 DataExecutor
接口加载存储在这些远程位置的样本,并借助它们来使用联合学习训练模型。我们将通过使用存储在本地的训练数据集来演示数据加载 API 的用法,并模拟样本的采样,就好像数据集在不同的远程客户端上进行了分区一样。当您根据您的用例调整本教程时,您只需将该数据集与您自己的分布式数据交换即可。
如果您不熟悉联合学习或 TFF,请考虑阅读图像分类的联合学习作为入门读物。
准备工作
在开始之前,请运行以下命令来确保您的环境已正确设置。有关详情,请参阅安装指南。
准备输入数据
让我们首先从内置仓库中加载 TFF 的 EMNIST 数据集的联合版本:
构造一个预处理函数来转换 EMNIST 数据集中的原始样本。
我们来验证一下这是否有效:
接下来,我们将构造一个 DataBackend
的实现,它将加载和预处理来自 EMNIST 数据集中客户端的本地样本,这对于在联合学习期间获取可训练样本至关重要。
定义如何获取客户端数据
我们需要一个 DataBackend
的实例来指示 TFF 工作进程如何加载和转换本地数据。
TFF 工作进程是在边缘机器上运行并为单个或多个逻辑客户端执行工作的进程。在此示例中,我们将用于训练的 EMNIST 数据集已经被逻辑客户端分区,并且所有工作进程都将在同一个本地环境中运行。因此,我们的 DataBackend
可以引用任何客户端对应的数据。但在非实验性设置中,TFF 工作进程将分布在各个远程计算机上,每台计算机都映射到一组不同的客户端,您需要确保 DataBackend
可以根据其本地上下文正确解析数据引用。
设置运行时环境
TFF 计算由 ExecutionContext
调用,为了在运行时理解 TFF 计算中定义的数据 URI,必须为 TFF 工作进程定义一个自定义上下文,其中包含指向我们刚刚创建的 DataBackend
的指针,以便可以正确解析 URI。
训练模型
现在,我们已经准备好使用联合学习来训练模型。我们来定义一个 Keras 模型:
我们可以通过调用辅助函数 tff.learning.algorithms.build_weighted_fed_avg
将模型的这个 TFF 包装的定义传递给联合平均算法,如下所示:
initialize
计算会返回联合平均过程的初始状态。
为了运行一轮训练,我们需要通过收集 URI 引用样本来构造数据样本,如下所示:
现在,我们可以进行一轮训练:
多轮训练
我们可以定义一个 FederatedDataSource
容器来选择客户端并组装输入以检索本地数据。这样一来,循环多轮训练变得十分方便,并且可以在多个训练作业中重复使用。
现在,我们可以按如下方式运行联合学习训练循环:
结论
本教程到此结束。我们鼓励您探索我们开发的其他教程,以了解 TFF 框架的许多其他功能。