Написание функции агрегирования тензорного потока (например, 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
,
Надеюсь это поможет!