View source on GitHub
|
UnweightedAggregationFactory for encoded sum.
Inherits From: UnweightedAggregationFactory
tff.aggregators.EncodedSumFactory(
encoder_fn: _EncoderConstructor
)
Used in the notebooks
| Used in the tutorials |
|---|
The created tff.templates.AggregationProcess aggregates values placed at
CLIENTS according to the provided GatherEncoder objects, and outputs the
result placed at SERVER.
A GatherEncoder defines encode and decode methods, which are applied by
CLIENTS before aggregation and by SERVER after aggregation. Usually these
are such that the encoded representation communicated from CLIENTS to
SERVER is smaller than communicating the original value, possibly at a cost
of communicating slightly inaccurate values. A common example is to apply
quantization. In addition, GatherEncoder enables the decoding logic to be
split based on which part of its decode part commutes with sum, which is
automatically utilized by the implementation.
Args | |
|---|---|
encoder_fn
|
A one-arg callable, mapping a tf.TensorSpec, to a
GatherEncoder.
|
Methods
create
create(
value_type: factory.ValueType
) -> tff.templates.AggregationProcess
Creates a tff.aggregators.AggregationProcess without weights.
The provided value_type is a non-federated tff.Type, that is, not a
tff.FederatedType.
The returned tff.aggregators.AggregationProcess will be created for
aggregation of values matching value_type placed at tff.CLIENTS.
That is, its next method will expect type
<S@SERVER, {value_type}@CLIENTS>, where S is the unplaced return type of
its initialize method.
| Args | |
|---|---|
value_type
|
A non-federated tff.Type.
|
| Returns | |
|---|---|
A tff.templates.AggregationProcess.
|
quantize_above_threshold
@classmethodquantize_above_threshold( quantization_bits=8, threshold=20000, **kwargs )
Quantization of values with at least threshold elements.
Given a value_type in the create method, this classmethod configures the
EncodedSumFactory to apply uniform quantization to all instances of
tff.TensorType in the value_type which have more than threshold
elements.
Precisely, for each tensor t, this operation corresponds to
t = round((t - min(t)) / (max(t) - min(t)) * (2**quantizaton_bits - 1)).
If a type does not have more than threshold elements, it is summed
directly without being modified.
| Args | |
|---|---|
quantization_bits
|
A integer specifying the quantization bitwidth. |
threshold
|
A non-negative integer. Only tensors with more than this number of elements are quantized. |
**kwargs
|
Keyword arguments. |
| Returns | |
|---|---|
An EncodedSumFactory.
|
View source on GitHub