Spec-Zone.ru › TensorFlow

tf.Module

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

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

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

Дополнительные сведения см. в Руководстве по миграции.

tf.compat.v1.Module

tf.Module(
    name=None
)

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

Используется в руководстве Используется в учебниках
  • Введение в модули, слои и модели
  • Улучшенная производительность с tf.function
  • Распределенное обучение с Core API и DTensor
  • Логистическая регрессия для бинарной классификации с Core API
  • Многослойные перцептроны для распознавания цифр с Core API
  • Распределенное обучение с DTensors
  • 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)

Вы можете использовать слой 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().__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