Spec-Zone.ru › TensorFlow 1.15

tf.Module

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

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

Наследуется от: Checkpointable

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

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

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

tf.compat.v1.Module, `tf.compat.v2.Module`

tf.Module(
    name=None
)

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

class Dense(tf.Module):
  def __init__(self, in_features, output_features, name=None):
    super(Dense, self).__init__(name=name)
    self.w = tf.Variable(
        tf.random.normal([input_features, output_features]), name='w')
    self.b = tf.Variable(tf.zeros([output_features]), name='b')

  def __call__(self, x):
    y = tf.matmul(x, self.w) + self.b
    return tf.nn.relu(y)

Вы можете использовать слой Dense, как ожидается:

d = Dense(input_features=64, output_features=10)
d(tf.ones([100, 64]))
#==> <tf.Tensor: ...>

Подклассированием tf.Module вместо object любые tf.Variable или tf.Module экземпляры, назначенные свойствам объекта, можно собрать с помощью свойства variables, trainable_variables или submodules:

d.variables
#==> (<tf.Variable 'b:0' ...>, <tf.Variable 'w:0' ...>)

Подклассы 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_size=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
Атрибуты
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
assert list(a.submodules) == [b, c]
assert list(b.submodules) == [c]
assert list(c.submodules) == []
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], 64]))
    return tf.matmul(x, self.w)

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

mod = MyModule()
mod(tf.ones([8, 32]))
# ==> <tf.Tensor: ...>
mod.w
# ==> <tf.Variable ...'my_module/w:0'>
Args
method Метод для обертывания.
Returns
Исходный метод, обернутый таким образом, что он входит в область имён модуля.

© 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/r1.15/api_docs/python/tf/Module

Spec-Zone.ru

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