Как напечатать локальные выходные данные в объединения с tenorflow?

Я хочу напечатать локальные выходные данные клиентов в учебном пособии по тензорному потоку https://www.tensorflow.org/federated/tutorials/federated_learning_for_image_classification. Что я должен делать?

2 ответа

Если вам нужен только список значений, которые входят в агрегаты (например, в 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 намеренно избегает понятия идентичности клиента; есть желание не делать клиентов адресными.

Если вы хотите напечатать что-то в функции «client_update», вы можете использовать tf.print().

Другие вопросы по тегам