【问题标题】:how to print local outputs in tensorflow federated?如何在 tensorflow 联合中打印本地输出?
【发布时间】:2019-05-28 02:13:44
【问题描述】:

我想在 tensorflow 联合教程https://www.tensorflow.org/federated/tutorials/federated_learning_for_image_classification 中打印客户端的本地输出。我该怎么办?

【问题讨论】:

    标签: tensorflow-federated


    【解决方案1】:

    如果您只想要进入聚合的值列表(例如,进入tff.federated_mean),一种选择是向aggregate_mnist_metrics_across_clients() 添加额外的输出以包含使用tff.federated_collect() 计算的指标。

    这可能看起来像:

    @tff.federated_computation
    def aggregate_mnist_metrics_across_clients(metrics):
      return {
          'num_examples': tff.federated_sum(metrics.num_examples),
          'loss': tff.federated_mean(metrics.loss, metrics.num_examples),
          'accuracy': tff.federated_mean(metrics.accuracy, metrics.num_examples),
          'per_client/num_examples': tff.federated_collect(metrics.num_examples),
          'per_client/loss': tff.federated_collect(metrics.loss),
          'per_client/accuracy': tff.federated_collect(metrics.accuracy),
      }
    

    稍后在计算运行时会打印几个单元格:

    state, metrics = iterative_process.next(state, federated_train_data)
    print('round  1, metrics={}'.format(metrics))
    
    round  1, metrics=<...,per_client/accuracy=[0.14516129, 0.10642202, 0.13972603],per_client/loss=[3.2409852, 3.417463, 2.9516447],per_client/num_examples=[930.0, 1090.0, 730.0]>
    

    但请注意:如果您想了解特定客户的价值,则无法故意这样做。通过设计,TFF 的语言有意避免客户身份的概念;希望避免使客户成为可寻址的对象。

    【讨论】:

    • 如果客户端地址不可访问,如何发现和避免一些无意义或错误的模型更新等攻击?而且由于客户端地址无法访问,我想分析不同客户端的值,这样合理吗?
    • 确定如何防御“坏”(甚至定义什么是“坏”)更新是 FL 研究的一个活跃领域。虽然 TensorFlow Federated 避免了哪个客户端提供了哪个更新的映射,但它仍然可以检查(并区别对待)服务器上的更新(这可能会改变使用安全多方通信技术的实现)。包含在 TFF 中的 FederatedAveraging 算法的实现使用 tff.federated_mean(),但构建一个自定义的 tff.federated_reduce() 来确定是否包含更新是一种可能的途径。
    【解决方案2】:

    如果你想在'client_update'函数中打印一些东西,你可以使用tf.print()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      相关资源
      最近更新 更多