首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何控制联邦框架的验证数据

如何控制联邦框架的验证数据
EN

Stack Overflow用户
提问于 2019-06-25 23:13:44
回答 1查看 275关注 0票数 1

我正在尝试指定通过联邦框架传递给每个客户端的验证数据,以便对其进行训练/验证。我知道tensorflow-federated会随机抽取每个客户端的数据集并对其进行验证。但是,如果我的数据(在一个子集内)非常相关,我如何(在TFF框架中)为每个客户端指定验证数据集?你认为在这里混洗数据有意义吗?(例如使用:DS.repeat(FL_rpt).shuffle(FL_shuf).batch(FL_batch))如果是这样,对shuffle_buffer大小有什么建议?

在keras训练中,我们在集合A上训练模型,并在集合B上验证训练:

代码语言:javascript
复制
model.fit(InA,OutA, validation_data=(In_valid_B,Out_valid_B),batch_size=100,epochs=100)

我们如何对联邦框架做同样的事情呢?

EN

回答 1

Stack Overflow用户

发布于 2019-06-29 02:21:58

这可能是在模拟期间在外部Python循环中编写的。目前的API没有在一轮中既进行评估又进行培训的概念。

如果使用TFF中包含的模拟数据集(例如,在tff.simulation.datasets下的那些),它们包括一个训练/测试拆分,这使得这一点变得很容易。每个都返回一个tff.simulation.ClientData对象的二元组、一个测试和一个训练ClientData。测试和训练都有相同的ClientData.client_id列表,但create_tf_dataset_for_client(client_id)返回的tf.data.Dataset将有一组不相交的示例。

换句话说,训练和测试分离是在用户示例上,而不是在用户上。

联邦训练和联邦评估循环可能如下所示:

代码语言:javascript
复制
train_data, test_data = tff.simulation.datasets.shakespeare.load_data()

federated_average = tff.learning.build_federated_averaging_process(model_fn, ...)
federated_eval = tff.learning.build_federated_evaluation(model_fn)

state = federated_average.initialize()

for _ in range(NUM_ROUNDS):
  participating_clients = numpy.random.choice(train_data.client_ids, size=5)

  # Run a training pass
  clients_train_datasets = [
    train_data.create_tf_dataset_for_client(c) for c in participating_clients
  ]
  state, train_metrics = federated_average.next(state, client_train_datasets)

  # Run an evaluation pass
  client_eval_datasets = [
    test_data.create_tf_dataset_for_client(c) for c in participating_clients
  ]
  eval_metrics = federated_eval(state.model, client_eval_datasets)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56757201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档