当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.Module用法及代码示例


基础神经网络模块类。

用法

tf.Module(
    name=None
)

属性

  • name 返回在 ctor 中传递或确定的此模块的名称。

    注意:这与包含父模块名称的self.name_scope.name 不同。

  • name_scope 返回此类的 tf.name_scope 实例。
  • non_trainable_variables 此模块及其子模块拥有的不可训练变量的序列。

    注意:此方法使用反射来查找当前实例和子模块上的变量。出于性能原因,如果您不希望返回值发生变化,您可能希望缓存调用此方法的结果。

  • submodules 所有sub-modules的序列。

    子模块是作为该模块的属性的模块,或者作为作为该模块的属性的模块的属性找到的(等等)。

    a = tf.Module()
    b = tf.Module()
    c = tf.Module()
    a.b = b
    b.c = c
    list(a.submodules) == [b, c]
    True
    list(b.submodules) == [c]
    True
    list(c.submodules) == []
    True
  • trainable_variables 此模块及其子模块拥有的可训练变量序列。

    注意:此方法使用反射来查找当前实例和子模块上的变量。出于性能原因,如果您不希望返回值发生变化,您可能希望缓存调用此方法的结果。

  • variables 此模块及其子模块拥有的变量序列。

    注意:此方法使用反射来查找当前实例和子模块上的变量。出于性能原因,如果您不希望返回值发生变化,您可能希望缓存调用此方法的结果。

模块是 tf.Variable s、其他 tf.Module s 和适用于用户输入的函数的命名容器。例如,神经网络中的密集层可以实现为 tf.Module

class Dense(tf.Module):
  def __init__(self, input_dim, output_size, name=None):
    super(Dense, self).__init__(name=name)
    self.w = tf.Variable(
      tf.random.normal([input_dim, output_size]), name='w')
    self.b = tf.Variable(tf.zeros([output_size]), name='b')
  def __call__(self, x):
    y = tf.matmul(x, self.w) + self.b
    return tf.nn.relu(y)

您可以按预期使用 Dense 层:

d = Dense(input_dim=3, output_size=2)
d(tf.ones([1, 3]))
<tf.Tensor:shape=(1, 2), dtype=float32, numpy=..., dtype=float32)>

通过继承 tf.Module 而不是 object,可以使用 variables , trainable_variablessubmodules 属性收集分配给对象属性的任何 tf.Variabletf.Module 实例:

d.variables
    (<tf.Variable 'b:0' shape=(2,) dtype=float32, numpy=...,
    dtype=float32)>,
    <tf.Variable 'w:0' shape=(3, 2) dtype=float32, numpy=..., dtype=float32)>)

tf.Module 的子类也可以利用 _flatten 方法,该方法可用于实现任何其他类型的跟踪。

所有tf.Module 类都有一个关联的tf.name_scope,可用于对 TensorBoard 中的操作进行分组,并为有助于调试的变量名称创建层次结构。我们建议在创建嵌套子模块/参数时使用名称范围,或者用于您可能希望在 TensorBoard 中检查其图形的前向方法。您可以使用 with self.name_scope: 显式输入名称范围,也可以使用 @tf.Module.with_name_scope 注释方法(除了 __init__ )。

class MLP(tf.Module):
  def __init__(self, input_size, sizes, name=None):
    super(MLP, self).__init__(name=name)
    self.layers = []
    with self.name_scope:
      for size in sizes:
        self.layers.append(Dense(input_dim=input_size, output_size=size))
        input_size = size
  @tf.Module.with_name_scope
  def __call__(self, x):
    for layer in self.layers:
      x = layer(x)
    return x
module = MLP(input_size=5, sizes=[5, 5])
module.variables
(<tf.Variable 'mlp/b:0' shape=(5,) dtype=float32, numpy=..., dtype=float32)>,
<tf.Variable 'mlp/w:0' shape=(5, 5) dtype=float32, numpy=...,
   dtype=float32)>,
<tf.Variable 'mlp/b:0' shape=(5,) dtype=float32, numpy=..., dtype=float32)>,
<tf.Variable 'mlp/w:0' shape=(5, 5) dtype=float32, numpy=...,
   dtype=float32)>)

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.Module。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。