【问题标题】:How to control validation data for Federated framework如何控制联合框架的验证数据
【发布时间】:2019-06-25 15:13:43
【问题描述】:

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

在 keras 训练中,我们有以下内容在 Set A 上训练模型并在 Set B 上验证训练:

model.fit(InA,OutA, validation_data=(In_valid_B,Out_valid_B),batch_size=100,epochs=100)

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

【问题讨论】:

    标签: tensorflow-federated


    【解决方案1】:

    这可能在模拟期间写在外部 Python 循环中。当前的 API 没有在一轮内同时进行评估和训练的概念。

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

    换句话说,训练和测试的划分是针对用户示例,而不是针对用户。

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

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多