Написание функции агрегирования тензорного потока (например, tff.federated_mean)

Я пытался написать пользовательскую функцию агрегирования для федеративного усреднения. замена 'federated_mean' кажется очень сложной, и код очень трудно расшифровать. Есть ли документация / примеры об этих "внутренностях"? (так называется в коде)

Спасибо!

1 ответ

Спасибо за ваш интерес к TFF!

В долгосрочной перспективе мы определенно планируем показать возможность написания пользовательских встроенных функций простым способом, но мы еще не совсем там.

Однако для реализации пользовательских агрегатов мы предоставляем tff.federated_aggregate встроенная, обобщенная функция иерархической агрегации, которая принимает пять параметров:

  • Значение типа {T}@C объединенный набор данных.
  • Ноль, типа U, представляющий ноль в алгебре редукции.
  • Накопить, функция типа <U,T> -> U, который будет использоваться для точечного сокращения федеративного набора данных. Накопить материализует множество значений типа U на промежуточном уровне иерархии.
  • Слияние, функция типа <U,U> -> U Используется способом, аналогичным способу накопления, за исключением того, что теперь материализуется единственное значение типа U на верхнем уровне иерархии.
  • Отчет, функция типа U -> R, используется для выполнения любого окончательного расчета агрегированных значений. Например, интегрированное среднее значение может быть реализовано путем накопления и слияния сумм значений, а также подсчета количества клиентов и последующего деления суммы на счет в шаге отчета.

Результатом вызова объединенного агрегата с этими пятью параметрами является значение типа R@S,

Связанная выше документация имеет дальнейшее обсуждение federated_aggregate сам. В качестве примера того, как это можно использовать для написания новых агрегаций, ознакомьтесь с реализацией этого коммита federated_min а также federated_max,

Надеюсь это поможет!

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