當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。