TF 2.0 is out! Get hands-on practice at TF World, Oct 28-31. Use code TF20 for 20% off select passes. Register now

tff.simulation.TransformingClientData

View source

Class TransformingClientData

Transforms client data, potentially expanding by adding pseudo-clients.

Inherits From: ClientData

Each client of the raw_client_data is "expanded" into some number of pseudo-clients. Each client ID is a string consisting of the original client ID plus a concatenated integer index. For example, the raw client id "client_a" might be expanded into pseudo-client ids "client_a_0", "client_a_1" and "client_a_2". A function fn(x) maps datapoint x to a new datapoint, where the constructor of fn is parameterized by the (raw) client_id and index i. For example if x is an image, then make_transform_fn("client_a", 0)(x) might be the identity, while make_transform_fn("client_a", 1)(x) could be a random rotation of the image with the angle determined by a hash of "client_a" and "1". Typically by convention the index 0 corresponds to the identity function if the identity is supported.

__init__

View source

__init__(
    raw_client_data,
    make_transform_fn,
    num_transformed_clients
)

Initializes the TransformingClientData.

Args:

  • raw_client_data: A ClientData to expand.
  • make_transform_fn: A function that returns a callable that maps datapoint x to a new datapoint x'. make_transform_fn will be called as make_transform_fn(raw_client_id, i) where i is an integer index, and should return a function fn(x)->x. For example if x is an image, then make_transform_fn("client_a", 0)(x) might be the identity, while make_transform_fn("client_a", 1)(x) could be a random rotation of the image with the angle determined by a hash of "client_a" and "1". If transform_fn_cons returns None, no transformation is performed. Typically by convention the index 0 corresponds to the identity function if the identity is supported.
  • num_transformed_clients: The total number of transformed clients to produce. If it is an integer multiple k of the number of real clients, there will be exactly k pseudo-clients per real client, with indices 0...k-1. Any remainder g will be generated from the first g real clients and will be given index k.

Properties

client_ids

The list of string identifiers for clients in this dataset.

output_shapes

Returns the shape of each component of an element of the client datasets.

Any tf.data.Dataset constructed by this class is expected to have matching output_shapes properties when accessed via tf.compat.v1.data.get_output_shapes(dataset).

Returns:

A nested structure of tf.TensorShape objects corresponding to each component of an element of the client datasets.

output_types

Returns the type of each component of an element of the client datasets.

Any tf.data.Dataset constructed by this class is expected have matching output_types properties when accessed via tf.compat.v1.data.get_output_types(dataset).

Returns:

A nested structure of tf.DType objects corresponding to each component of an element of the client datasets.

Methods

create_tf_dataset_for_client

View source

create_tf_dataset_for_client(client_id)

Creates a new tf.data.Dataset containing the client training examples.

Args:

  • client_id: The string client_id for the desired client.

Returns:

A tf.data.Dataset object.

create_tf_dataset_from_all_clients

View source

create_tf_dataset_from_all_clients(seed=None)

Creates a new tf.data.Dataset containing all client examples.

NOTE: the returned tf.data.Dataset is not serializable and runnable on other devices, as it uses tf.py_func internally.

Currently, the implementation produces a dataset that contains all examples from a single client in order, and so generally additional shuffling should be performed.

Args:

  • seed: Optional, a seed to determine the order in which clients are processed in the joined dataset.

Returns:

A tf.data.Dataset object.

from_clients_and_fn

View source

from_clients_and_fn(
    cls,
    client_ids,
    create_tf_dataset_for_client_fn
)

Constructs a ClientData based on the given function.

Args:

  • client_ids: A non-empty list of client_ids which are valid inputs to the create_tf_dataset_for_client_fn.
  • create_tf_dataset_for_client_fn: A function that takes a client_id from the above list, and returns a tf.data.Dataset.

Returns:

A ClientData.

preprocess

View source

preprocess(preprocess_fn)

Applies preprocess_fn to each client's data.