Create variables in module given input_spec; return output_spec.

Here module can be a tf_agents.networks.Network or Keras layer.

module The instance we would like to create layers on.
input_spec The input spec (excluding batch dimensions).
**kwargs Extra arguments to module.__call__, e.g. training=True.

Output specs, a nested tf.TypeSpec describing the output signature. If module returns a tfp.Distribution, then the associated nested object is a tf_agents.specs.DistributionSpecV2 (which is not a true tf.TypeSpec but contains enough information to create a nested tf.TypeSpec using tf_agents.distributions.utils.parameters_to_dict).

ValueError If module is a generic Keras layer but input_spec is None.
TypeError If module is a tf.keras.layers.{RNN,LSTM,GRU,...}. These must be wrapped in tf_agents.keras_layers.RNNWrapper.