View source on GitHub

Wraps a python metric as a TF metric.

Inherits From: TFStepMetric

py_metric A batched python metric to wrap.
name Name of the metric.
dtype Data type of the metric.

name Returns the name of this module as passed or determined in the ctor.

name_scope Returns a tf.name_scope instance for this class.
submodules Sequence of all sub-modules.

Submodules are modules which are properties of this module, or found as properties of modules which are properties of this module (and so on).

a = tf.Module()
b = tf.Module()
c = tf.Module()
a.b = b
b.c = c
list(a.submodules) == [b, c]
list(b.submodules) == [c]
list(c.submodules) == []

trainable_variables Sequence of trainable variables owned by this module and its submodules.

variables Sequence of variables owned by this module and its submodules.



View source

Update the value of the metric using trajectory.

The trajectory can be either batched or un-batched depending on the expected inputs for the py_metric being wrapped.

trajectory A tf_agents.trajectory.Trajectory.

The arguments, for easy chaining.


View source

Initializes this Metric's variables.

Should be called after variables are created in the first execution of __call__(). If using graph execution, the return value should be run() in a session before running the op returned by __call__(). (See example above.)

If using graph execution, this returns an op to perform the initialization. Under eager execution, the variables are reset to their initial values as a side effect and this function returns None.


View source

Resets the values being tracked by the metric.


View source

Computes and returns a final value for the metric.


View source

Generates summaries against train_step and all step_metrics.

train_step (Optional) Step counter for training iterations. If None, no metric is generated against the global step.
step_metrics (Optional) Iterable of step metrics to generate summaries against.

A list of summaries.


Decorator to automatically enter the module name scope.

class MyModule(tf.Module):
  def __call__(self, x):
    if not hasattr(self, 'w'):
      self.w = tf.Variable(tf.random.normal([x.shape[1], 3]))
    return tf.matmul(x, self.w)

Using the above module would produce tf.Variables and tf.Tensors whose names included the module name:

mod = MyModule()
mod(tf.ones([1, 2]))
<tf.Tensor: shape=(1, 3), dtype=float32, numpy=..., dtype=float32)>
<tf.Variable 'my_module/Variable:0' shape=(2, 3) dtype=float32,
numpy=..., dtype=float32)>

method The method to wrap.

The original method wrapped such that it enters the module's name scope.


View source

Returns op to execute to update this metric for these inputs.

Returns None if eager execution is enabled. Returns a graph-mode function if graph execution is enabled.


**kwargs A mini-batch of inputs to the Metric, passed on to call().