If it is a tff.learning.optimizers.Optimizer, we avoid creating
tf.Variables associated with the optimizer state within the scope of the
client work, as they are not necessary. This also means that the client's
model weights are updated by computing optimizer.next and then assigning
the result to the model weights (while a tf.keras.optimizers.Optimizer will
modify the model weight in place using optimizer.apply_gradients).
A no-arg function that returns a tff.learning.Model. This method
must not capture TensorFlow tensors or variables and use them. The model
must be constructed entirely from scratch on each invocation, returning
the same pre-constructed model each call will result in an error.
A nonnegative float representing the parameter of the
L2-regularization term applied to the delta from initial model weights
during training. Values larger than 0.0 prevent clients from moving too
far from the server model during local training.