Спасибо за ваш интерес к TFF!
В долгосрочной перспективе мы определенно планируем показать возможность написания пользовательских встроенных функций простым способом, но мы еще не совсем там.
Однако для реализации пользовательских агрегаций мы предоставляем tff.federated_aggregate
встроенную, обобщенную функцию иерархического агрегирования, которая принимает пять параметров:
- Значение типа
{T}@C
объединяемый набор данных. - Ноль типа
U
, представляющий ноль в алгебре редукции. - Accumulate, функция типа
<U,T> -> U
, которая будет использоватьсяпоточечно уменьшить федеративный набор данных.Накапливать материализует набор значений типа U
на промежуточном уровне иерархии. - Слияние, функция типа
<U,U> -> U
, используемая способом, аналогичным накапливать, за исключением теперь материализации одного значениявведите U
на верхнем уровне иерархии. - Отчет, функция типа
U -> R
, используемая для выполнения любого окончательного вычисления агрегированных значений.Например, интегрированное среднее значение может быть реализовано путем накопления и слияния сумм значений, а также подсчета количества клиентов и последующего деления суммы на счет в шаге отчета.
Результатом вызова объединенного агрегата с этими пятью параметрами является значение типа R@S
.
В документации, приведенной выше, дополнительно обсуждается сама federated_aggregate
.В качестве примера того, как это можно использовать для написания новых агрегатов, посмотрите этот коммит , реализующий federated_min
и federated_max
.
Надеюсь, это поможет!