1

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

4

1 回答 1

0

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

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

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性能最高的模型。我认为比这更普遍的答案可能非常困难。

于 2020-03-09T04:26:51.857 回答