Spec-Zone.ru › TensorFlow 2.4

tf.Module

Просмотреть исходный код на GitHub

Базовый класс модуля нейронной сети.

Просмотр псевдонимов

Псевдонимы совместимости для миграции

См. Руководство по миграции для получения более подробной информации.

tf.compat.v1.Module

tf.Module(
    name=None
)

Модуль — это именованный контейнер для tf.Variable переменных, других tf.Module модулей и функций, которые применяются к входным данным пользователя. Например, слой плотного подключения в нейронной сети может быть реализован как 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 любые экземпляры tf.Variable переменных или tf.Module модулей, назначенные свойствам объекта, могут быть собраны с помощью свойства variables, trainable_variables или submodules.

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: или вы можете добавить аннотацию к методам (кроме __init__) с помощью @tf.Module.with_name_scope.

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)>)
Атрибуты
name Возвращает имя этого модуля, переданное или определенное в конструкторе.
Примечание: Это не то же самое, что и self.name_scope.name, которое включает имена родительских модулей.
name_scope Возвращает экземпляр tf.name_scope области имен для этого класса.
submodules Последовательность всех подмодулей.

Подмодули — это модули, которые являются свойствами этого модуля, или найдены как свойства модулей, которые являются свойствами этого модуля (и так далее).

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 Последовательность переменных, принадлежащих этому модулю и его подмодулям.
Примечание: Этот метод использует рефлексию для поиска переменных в текущем экземпляре и подмодулях. По соображениям производительности вы можете кэшировать результат вызова этого метода, если вы не ожидаете изменений в возвращаемом значении.

Методы

with_name_scope

Просмотреть исходный код

@classmethod
with_name_scope(
    method
)

Декоратор для автоматического входа в область имен модуля.

class MyModule(tf.Module):
  @tf.Module.with_name_scope
  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)

Использование вышеуказанного модуля приведет к созданию tf.Variable переменных и tf.Tensor тензоров, имена которых включают имя модуля:

mod = MyModule()
mod(tf.ones([1, 2]))
<tf.Tensor: shape=(1, 3), dtype=float32, numpy=..., dtype=float32)>
mod.w
<tf.Variable 'my_module/Variable:0' shape=(2, 3) dtype=float32,
numpy=..., dtype=float32)>
Аргументы
method Метод для обертывания.
Возвращает
Исходный метод, обернутый таким образом, что он входит в область имен модуля.

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/Module

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API