Как настроить различные функции TensorFlow-Federated?
Я прочитал и изучил руководство TFF и страницы API точно. Но я не совсем понимаю, как использовать функции и как их контролировать.
Например, в руководствах есть функция, которая отвечает за агрегирование метрик.
@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)
}
Он вызывается в классе MODEL. Но мне нужно иметь доступ к элементам метрики после ее вызова в классе. Я хочу изменить метрики после ее вызова в модели и вызвать их в других функциях.
Однако, например, я не могу назвать их (например, с tff.Type
такие как .type_signature
, так как он нуждается в namedTuple для __getattr__
). И я не поняла, насколько интуитивно понятна концепция того, как их можно использовать в других частях кода функции?
Я предполагаю, что в TFF каждая функция размещается на стороне сервера или клиента, но обе они могут быть доступны в любой функции, что делает ее запутанной. Кто несет ответственность за расчет? @ CLIENT или @SERVER?
кто-нибудь может мне помочь?
1 ответ
Возможно, одно заблуждение заключается в том, что tff.learning.Model
интерфейс, используемый tff.learning
модуль и не требуется, если нет каких-либо методов модуля, таких как tff.learning.build_federated_averaging_process()
, В настоящее время реализация федеративного усреднения не имеет ловушки для изменения метрик после агрегации, но до возврата из вычислений.
Я настоятельно рекомендую взглянуть на пользовательские федеративные алгоритмы, часть 2: Реализация федеративного усреднения, в которой рассказывается, как реализовать федеративное усреднение без использования tff.learning
, что позволило бы расширить вычисления в любом желаемом направлении.
Дополнительные разъяснения:
aggregate_mnist_metrics_across_clients
возвращается в tff.learning.Model.federated_output_computation
метод class MnistModel
, несколько ячеек вниз в учебнике. metrics
Параметр является возвращаемым значением tff.learning.Model.report_local_outputs()
, Оба эти метода являются интерфейсами, которые необходимо реализовать для tff.learning
методы модуля (например, tff.learning.build_federated_averaging_process()
) для правильного подключения вычислений.
Я предполагаю, что в TFF каждая функция размещается на стороне сервера или клиента, но обе они могут быть доступны в любой функции, что делает ее запутанной.
В TFF данные располагаются, а не вычисления. Вычисления, которые принимают неразмещенные значения, могут использоваться для помещенных значений с использованием встроенных значений TFF (например, tff.federated_mean()
, или же tff.federated_map()
). Кроме того, вычисление TFF может принимать значение, помещенное в CLIENTS
или же SERVER
а также вернуть значения, размещенные в любом.
Если вы еще этого не сделали, я бы настоятельно рекомендовал взглянуть на учебник из двух частей, посвященный пользовательским федеративным алгоритмам. Он тратит время на представление модели программирования и исполнения TFF: