0

我试图了解 tensorflow 联合。我指的是https://www.tensorflow.org/federated/tutorials/custom_federated_algorithms_2#gradient_descent_on_a_sequence_of_local_data站点。这里我不明白如何在这个函数中打印每个客户端传递的值?

SERVER_FLOAT_TYPE = tff.FederatedType(tf.float32, tff.SERVER, all_equal=True)

@tff.federated_computation(
    SERVER_MODEL_TYPE, SERVER_FLOAT_TYPE, CLIENT_DATA_TYPE)
def federated_train(model, learning_rate, data):
  return tff.federated_mean(
      tff.federated_map(
          local_train,
          [tff.federated_broadcast(model),
           tff.federated_broadcast(learning_rate),
           data]))

还有谁能告诉我 tff.sequence_reduce 的用途是什么。

请帮忙。

4

1 回答 1

0

如果你想在这里检查客户端的值,你可以想象有几种方法。

如果该函数是 a ,则可以在 中使用tf.printop ,我认为这里不是这种情况。local_traintff.tf_computation

另一种方法是将函数调用拉得更多,所以不要写tff.federated_mean(tff.federated_map(local_train...))

我们可能会写

train_results_on_clients = tff.federated_map(local_train...)
aggregated_result =tff.federated_mean(train_results_on_clients)

然后,如果外部函数返回这两个值,则在 Python 运行时表示中具体化的值train_results_on_clients将是在所有客户端运行单轮训练的结果,以每个客户端一个条目的列表形式呈现;TFF 允许您以同样的方式执行此操作,您可以通过返回它们来检查函数的中间值。

一件行不通的事情是在联合计算中插入 Python 打印语句。这只会在跟踪时执行,原因与tf.print在 TF 图中必须使用 Python print 而不是 Python print 的原因相同(至少,没有签名)。

至于tff.sequence_reduce,其目的实际上是为了展示 TFF 的本地计算无关设计;关键是,模型训练循环可以以与 TensorFlow 作为本地计算引擎完全不可知的方式编写。

希望这可以帮助!

于 2020-02-21T05:07:18.343 回答