Spec-Zone.ru › TensorFlow

tf.Module

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

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

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

Подробнее см. в руководстве по переносу.

tf.compat.v1.Module

tf.Module(
    name=None
)

Используется в блокнотах

Используется в руководстве Используется в учебных материалах
  • Введение в модули, слои и модели
  • Повышение производительности с помощью tf.function
  • Распределённое обучение с помощью Core API и DTensor
  • Логистическая регрессия для бинарной классификации с помощью Core API
  • Многослойные перцептроны для распознавания цифр с помощью Core API
  • Распределённое обучение с помощью DTensor
  • DeepDream
  • Простое распознавание аудио: распознавание ключевых слов
  • Нейронный машинный перевод с механизмом внимания
  • Нейронный машинный перевод с помощью Transformer и Keras

Модуль — это именованный контейнер для tf.Variable, других tf.Module и функций, применяемых к пользовательскому вводу. Например, полносвязный слой нейронной сети может быть реализован как tf.Module:

class Dense(tf.Module):
  def __init__(self, input_dim, output_size, name=None):
    super().__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)

Полносвязный слой можно использовать так, как и ожидалось:

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

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

Spec-Zone.ru

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