View source on GitHub |
A stateful process that aggregates values.
Inherits From: MeasuredProcess
, IterativeProcess
tff.templates.AggregationProcess(
initialize_fn: tff.Computation
,
next_fn: tff.Computation
)
Used in the notebooks
Used in the tutorials |
---|
This class inherits the constraints documented by
tff.templates.MeasuredProcess
.
A tff.templates.AggregationProcess
is a tff.templates.MeasuredProcess
that formalizes the type signature of initialize_fn
and next_fn
for
aggregation.
Compared to the tff.templates.MeasuredProcess
, this class requires a second
input argument, which is a value placed at CLIENTS
and to be aggregated.
The result
field of returned tff.templates.MeasuredProcessOutput
,
representing the aggregate, must be placed at SERVER
and does not
necessarily need to have type signature equal to the type signature of the
second input argument.
The intended composition pattern for tff.templates.AggregationProcess
is
that of nesting. An aggregation will broadly consist of three logical parts:
- A pre-aggregation computation placed at
CLIENTS
. - Actual aggregation.
- A post-aggregation computation placed at
SERVER
. The second step can be realized by direct application of appropriate intrinsic such astff.federated_sum
, or by delegation to (one or more) "inner" aggregation processes.
Both initialize
and next
must be tff.Computation
s with the following
type signatures:
- initialize:
( -> S@SERVER)
- next:
(<S@SERVER, V@CLIENTS, *> -> <state=S@SERVER, result=V'@SERVER, measurements=M@SERVER>)
where*
represents optional other arguments placed atCLIENTS
. This can be used for weighted aggregation, where the third parameter is the weight.
Note that while the value type to be aggregated will often be preserved
(i.e., V == V'
), it is not required. An example is sampling-based
aggregation.
Args | |
---|---|
initialize_fn
|
A no-arg tff.Computation that returns the initial state
of the aggregation process. The returned state must be a server-placed
federated value. Let the type of this state be called S@SERVER .
|
next_fn
|
A tff.Computation that represents the iterated function.
next_fn must accept at least two arguments, the first of which is of a
type assignable from the state type S@SERVER and the second of which
is client-placed data of type V@CLIENTS . next_fn must return a
MeasuredProcessOutput where the state attribute is assignable to the
first argument and the result is value placed at SERVER .
|
Raises | |
---|---|
TypeError
|
If initialize_fn and next_fn are not instances of
tff.Computation .
|
TemplateInitFnParamNotEmptyError
|
If initialize_fn has any input
arguments.
|
TemplateStateNotAssignableError
|
If the state returned by either
initialize_fn or next_fn is not assignable to the first input
argument of next_fn .
|
TemplateNotMeasuredProcessOutputError
|
If next_fn does not return a
MeasuredProcessOutput .
|
TemplateNextFnNumArgsError
|
If next_fn does not have at least two
input arguments.
|
AggregationNotFederatedError
|
If initialize_fn and next_fn are not
computations operating on federated types.
|
AggregationPlacementError
|
If the placements of initialize_fn and
next_fn are not matching the expected type signature.
|
Attributes | |
---|---|
initialize
|
A no-arg tff.Computation that returns the initial state.
|
is_weighted
|
True if next takes a third argument for weights.
|
next
|
A tff.Computation that runs one iteration of the process.
Its first argument should always be the current state (originally produced
by the |
state_type
|
The tff.Type of the state of the process.
|