0
点赞
收藏
分享

微信扫一扫

Py之tensorflow-federated:tensorflow-federated的简介、安装、使用方法之详细攻略


Py之tensorflow-federated:tensorflow-federated的简介、安装、使用方法之详细攻略

目录

​​tensorflow-federated的简介​​

​​tensorflow-federated的安装​​

​​tensorflow-federated的使用方法​​

​​1、基础案例​​

tensorflow-federated的简介

促进联邦学习 (FL) 的开放研究和实验,这是一种机器学习方法,其中一个共享的全局模型在许多参与的客户之间进行训练,这些客户将他们的训练数据保存在本地。例如,FL 已被用于训练移动键盘的预测模型,而无需将敏感的打字数据上传到服务器。
          TFF使开发人员能够在他们的模型和数据中使用包含的联邦学习算法,以及试验新的算法。TFF提供的构建块还可以用于实现非学习计算,例如对分散数据的聚合分析。
          TFF的接口分为两层:

  • ​​Federated Learning (FL) API​​ :learning 层提供了一组高级接口,允许开发人员将所包含的联邦训练和评估实现应用到他们现有的 TensorFlow 模型中。
  • ​​Federated Core (FC) API​​ :系统的核心是一组低级接口,用于通过在强类型函数式编程环境中将 TensorFlow 与分布式通信运算符相结合,简洁地表达新颖的联合算法。这一层也是我们构建 tff.learning 的基础。

可以将它们部署到不同的运行时环境中。TFF中包含了一个用于实验的单机模拟运行时。

官方网站:​​http://tensorflow.org/federated​​

GitHub官网:​​GitHub - tensorflow/federated: A framework for implementing federated learning​​

tensorflow-federated的安装

pip install tensorflow-federated

tensorflow-federated的使用方法

1、基础案例

参考文章:​​federated/program.py at main · tensorflow/federated · GitHub​​

import asyncio
import os.path
from typing import Sequence, Tuple, Union

from absl import app
from absl import flags
import tensorflow as tf
import tensorflow_federated as tff

from tensorflow_federated.examples.program import computations
from tensorflow_federated.examples.program import program_logic

_OUTPUT_DIR = flags.DEFINE_string('output_dir', None, 'The output path.')


def _filter_metrics(path: Tuple[Union[str, int], ...]) -> bool:
if path == (computations.METRICS_TOTAL_SUM,):
return True
else:
return False


def main(argv: Sequence[str]) -> None:
if len(argv) > 1:
raise app.UsageError('Too many command-line arguments.')

total_rounds = 10
number_of_clients = 3

# Configure the platform-specific components; in this example, the TFF native
# platform is used, but this example could use any platform that conforms to
# the approprate abstract interfaces.

# Create a context in which to execute the program logic.
context = tff.google.backends.native.create_local_async_cpp_execution_context(
)
context = tff.program.NativeFederatedContext(context)
tff.framework.set_default_context(context)

# Create data sources that are compatible with the context and computations.
to_int32 = lambda x: tf.cast(x, tf.int32)
datasets = [tf.data.Dataset.range(10).map(to_int32)] * 3
train_data_source = tff.program.DatasetDataSource(datasets)
eval(datasets)

# Create computations that are compatible with the context and data sources.
initialize = computations.initialize
train = computations.train
eval()]
eval()]
model_output_manager = tff.program.LoggingReleaseManager()

if _OUTPUT_DIR.value is not None:
summary_dir = os.path.join(_OUTPUT_DIR.value, 'summary')
tensorboard_manager = tff.program.TensorBoardReleaseManager(summary_dir)
train_metrics_managers.append(tensorboard_manager)

csv_path = os.path.join(_OUTPUT_DIR.value, 'eval(csv_path)
eval(csv_manager)

# Group the metrics release managers; program logic may accept a single
# release manager to make the implementation of the program logic simpler and
# easier to maintain, the program can use a
# `tff.program.GroupingReleaseManager` to release values to multiple
# destinations.
#
# Filter the metrics before they are released; the program can use a
# `tff.program.FilteringReleaseManager` to limit the values that are
# released by the program logic. If a formal privacy guarantee is not
# required, it may be ok to release all the metrics.
train_metrics_manager = tff.program.FilteringReleaseManager(
tff.program.GroupingReleaseManager(train_metrics_managers),
_filter_metrics)
eval(
tff.program.GroupingReleaseManager(eval(_OUTPUT_DIR.value, 'program_state')
program_state_manager = tff.program.FileProgramStateManager(
program_state_dir)

# Execute the program logic; the program logic is abstracted into a separate
# function to illustrate the boundary between the program and the program
# logic. This program logic is declared as an async def and needs to be
# executed in an asyncio event loop.
asyncio.run(
program_logic.train_federated_model(
initialize=initialize,
train=train,
train_data_source=train_data_source,
eval(main)

举报

相关推荐

0 条评论