【问题标题】:How determinate number of rounds in TFF context如何确定 TFF 上下文中的轮数
【发布时间】:2020-03-06 13:11:38
【问题描述】:

在 TFF 中,需要确定轮数。那么,为了获得我们模型的最佳性能,我们如何知道最佳轮数?

【问题讨论】:

    标签: tensorflow-federated


    【解决方案1】:

    TFF不一定需要您事先指定联邦训练的轮数。 TFF 更多地是关于指定计算的联合方面(您基本上可以将其视为指定通信),并认为实际上“运行”轮次是在系统级别。

    在写TFF的时候,一般是在三个层次上写(这个语句的解释here);您要问的问题(以及 TFF 认为“系统问题”的每个问题)都在 Python 级别。由于 Python 控制着用 TFF 编写的计算的实际调用,您可以停止使用 Python 中可表达的任何标准进行训练。例如。如果您想监控验证集的性能并将其用作停止标准,这是完全可行的。如果你有一个tff.utils.IterativeProcessip 和评估函数eval_fn(参见here 的例子),这可以实现为:

    while True:
      data = sample_client_data()
      state, metrics = ip.next(state, data)
      eval_metrics = eval_fn(state)
      if condition(eval_metrics):
        break
    

    抽象地说:由于 Python 驱动了实验过程,因此您可以根据训练过程的任何可观察特征随时停止。因此,您实际上不需要事先知道您将运行多少轮。

    对原始问题的更直接的回答是,我认为在 FL 历史上的这一点上,一般情况下不太可能实现;目前没有人(据我所知)知道 FL 的可靠系统级设置。这并不奇怪。这有点类似于事先知道在数据中心训练中应该指定多少个 epoch,我认为这往往取决于问题。 FL 在这方面是类似的。实际上,我的建议往往是:监控验证集的性能,尽可能长时间地运行,并在验证集上保留性能最高的模型的state。我认为比这更普遍的答案可能非常困难。

    【讨论】:

    • 非常感谢,这是一个重要的答案,用于监控验证集的性能(评估是在我们在训练期间到达的最新状态上调用的。为了从服务器状态,你只需访问.model成员,如下:train_metrics = evaluation(state.model, federated_train_data)。我从这里了解到,模型的最新状态是在预先确定的number_of_round之后提供的..您对此有何看法
    猜你喜欢
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 2015-01-15
    • 1970-01-01
    • 2017-06-20
    相关资源
    最近更新 更多