【问题标题】:Accuracy is Decreasing Too Slowly with each Epoch in Tensorflow Federated TrainingTensorflow 联合训练中每个 Epoch 的准确性下降太慢
【发布时间】:2020-07-10 10:49:15
【问题描述】:

我的 Tensorflow 联合模型收敛时间过长。当我使用没有 TFF 包装的相同模型时,使用 tensoflow 2.0 对其进行训练,准确率在几个时期内达到 0.97。然而,通过 TFF 训练,相同的模型在 30 个 epoch 内只能达到 0.03。 TFF 训练期间准确率如此低的原因可能是什么。有没有办法改善这一点。我的代码如下:

# Building the Federated Averaging Process
iterative_process = tff.learning.build_federated_averaging_process(
  model_fn,
  client_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=0.02),
  server_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=1.0))

str(iterative_process.initialize.type_signature)

state = iterative_process.initialize()

state, metrics = iterative_process.next(state, federated_train_data)
print('round  1, metrics={}'.format(metrics))

NUM_ROUNDS = 1000
for round_num in range(2, NUM_ROUNDS):
  state, metrics = iterative_process.next(state, federated_train_data)
  print('round {:2d}, metrics={}'.format(round_num, metrics))

【问题讨论】:

  • 通过添加信息可以加快问题的诊断速度:model_fnfederated_training_data 的定义,以及代码运行时打印语句的输出。

标签: tensorflow tensorflow-federated


【解决方案1】:

这里可能混合了术语:根据 epoch 的含义,在联邦学习中可能会出现这种情况。

如果 epoch 计算“轮数”(上面代码中的 for 循环):通常联邦学习中的 round 远小于 epoch 在集中学习中。全局模型在中只更新一次,并且这些更新在比整个数据集少得多的示例上进行训练。通常,如果一个数据集的 M 示例分布在 K 客户端上,那么联邦学习可能只会选择其中的几个客户端参与一轮,而该轮中只能看到多个 M / K 示例。

与集中式学习相比,在同一数据集上使用M 示例和使用批量大小为N 的训练过程的epoch 将推进模型M / N 步骤,并且查看所有M 示例。

通常,在联邦学习中训练模型比在集中式学习中训练模型需要更多的 轮次,这可以认为是由 轮次引起的> 要小很多

【讨论】:

    猜你喜欢
    • 2018-05-08
    • 2018-04-18
    • 2020-10-22
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 2017-10-09
    相关资源
    最近更新 更多