Function object which memoizes the result of create_value_fn().

This object is used to memoize the computation of some function. Upon first call, the user provided create_value_fn is called and with the args/kwargs provided to this object's __call__. On subsequent calls the previous result is returned and regardless of the args/kwargs provided to this object's __call__. To trigger a new evaluation, invoke this.reset() and to identify if a new evaluation will execute (on-demand) invoke this.is_unset(). For an example application of this object, see help(tfp.experimental.nn.util.RandomVariable) and/or help(tfp.util.DeferredTensor).

create_value_fn Python callable which takes any input args/kwargs and returns a value to memoize. (The value is not presumed to be of any particular type.)


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.
non_trainable_variables Sequence of non-trainable variables owned by this module and its submodules.
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

Returns True if there is no memoized value and False otherwise.


View source

Removes memoized value which triggers re-eval on subsequent reads.


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

Return the memoized value.