Spec-Zone.ru › TensorFlow 2.9

tf.nn.RNNCellDeviceWrapper

Оператор, гарантирующий, что RNNCell работает на определённом устройстве.

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

tf.nn.RNNCellDeviceWrapper(
    *args, **kwargs
)
Аргументы
cell Экземпляр RNNCell.
device Строка устройства или функция для передачи в tf.device.
**kwargs Словарь ключевых аргументов для базового слоя.
Атрибуты
activity_regularizer Необязательная функция регуляризации для вывода этого слоя.
compute_dtype Тип данных вычислений слоя.

Это эквивалентно Layer.dtype_policy.compute_dtype. Если не используется смешанная точность, это то же, что и Layer.dtype, тип данных весов.

Слои автоматически преобразуют свои входные данные в тип данных вычислений, что приводит к тому, что вычисления и вывод также будут в типе данных вычислений. Это выполняется базовым классом Layer в Layer.call, поэтому вам не нужно вставлять эти преобразования при реализации собственного слоя.

Слои часто выполняют определённые внутренние вычисления с более высокой точностью, когда compute_dtype равен float16 или bfloat16 для обеспечения числовой устойчивости. Вывод всё же, как правило, будет float16 или bfloat16 в таких случаях.

dtype Тип данных весов слоя.

Это эквивалентно Layer.dtype_policy.variable_dtype. Если не используется смешанная точность, это то же, что и Layer.compute_dtype, тип данных вычислений слоя.

dtype_policy Политика типа данных, связанная с этим слоем.

Это экземпляр tf.keras.mixed_precision.Policy.

dynamic Является ли слой динамическим (только для eager); устанавливается в конструкторе.
input Получает тензор(ы) входных данных слоя.

Применимо только если слой имеет ровно один вход, то есть если он подключен к одному входящему слою.

input_spec Экземпляр(ы) InputSpec, описывающие формат входных данных для этого слоя.

При создании подкласса слоя вы можете установить self.input_spec для включения проверок совместимости входных данных при вызове слоя. Рассмотрим слой Conv2D; он может вызываться только с одним входным тензором ранга 4. Поэтому вы можете установить это в __init__().

self.input_spec = tf.keras.layers.InputSpec(ndim=4)

Теперь, если вы попытаетесь вызвать слой с входом, который не имеет ранга 4 (например, входом с формой (2,)), он выведет понятное сообщение об ошибке:

ValueError: Input 0 of layer conv2d is incompatible with the layer:
expected ndim=4, found ndim=1. Full shape received: [2]

Проверки входных данных, которые можно указать с помощью input_spec, включают:

  • Структура (например, один вход, список из 2 входов и т. д.)
  • Форма
  • Ранг (ndim)
  • Тип данных

Для получения дополнительной информации см. tf.keras.layers.InputSpec.

losses Список потерь, добавленных с помощью API add_loss().

Векторы регуляризации переменных создаются при обращении к этому свойству, поэтому оно безопасно в режиме eager: доступ к losses в tf.GradientTape будет распространять градиенты обратно соответствующим переменным.

class MyLayer(tf.keras.layers.Layer):
  def call(self, inputs):
    self.add_loss(tf.abs(tf.reduce_mean(inputs)))
    return inputs
l = MyLayer()
l(np.ones((10, 1)))
l.losses
[1.0]
inputs = tf.keras.Input(shape=(10,))
x = tf.keras.layers.Dense(10)(inputs)
outputs = tf.keras.layers.Dense(1)(x)
model = tf.keras.Model(inputs, outputs)
# Activity regularization.
len(model.losses)
0
model.add_loss(tf.abs(tf.reduce_mean(x)))
len(model.losses)
1
inputs = tf.keras.Input(shape=(10,))
d = tf.keras.layers.Dense(10, kernel_initializer='ones')
x = d(inputs)
outputs = tf.keras.layers.Dense(1)(x)
model = tf.keras.Model(inputs, outputs)
# Weight regularization.
model.add_loss(lambda: tf.reduce_mean(d.kernel))
model.losses
[<tf.Tensor: shape=(), dtype=float32, numpy=1.0>]
metrics Список метрик, добавленных с помощью API add_metric().
input = tf.keras.layers.Input(shape=(3,))
d = tf.keras.layers.Dense(2)
output = d(input)
d.add_metric(tf.reduce_max(output), name='max')
d.add_metric(tf.reduce_min(output), name='min')
[m.name for m in d.metrics]
['max', 'min']
non_trainable_weights Список всех весов, которые не участвуют в обучении, отслеживаемых этим слоем.

Веса, не участвующие в обучении, не обновляются во время обучения. Они должны быть обновлены вручную в call().

output Получает тензор(ы) выходных данных слоя.

Применимо только если слой имеет ровно один выход, то есть если он подключен к одному входящему слою.

output_size
state_size
supports_masking Поддерживает ли этот слой вычисление маски с помощью compute_mask.
trainable
trainable_weights Список всех обучаемых весов, отслеживаемых этим слоем.

Обучаемые веса обновляются с помощью градиентного спуска во время обучения.

variable_dtype Псевдоним Layer.dtype, тип данных весов.
weights Возвращает список всех переменных/весов слоя.

Методы

add_loss

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

add_loss(
    losses, **kwargs
)

Добавляет тензор(ы) потерь, потенциально зависящие от входных данных слоя.

Некоторые потери (например, потери регуляризации активности) могут зависеть от входных данных, переданных при вызове слоя. Поэтому при повторном использовании одного и того же слоя с разными входами a и b, некоторые записи в layer.losses могут зависеть от a, а некоторые — от b. Этот метод автоматически отслеживает зависимости.

Этот метод можно использовать внутри подклассированного слоя или метода call модели, в котором случае losses должен быть тензором или списком тензоров.

Пример:

class MyLayer(tf.keras.layers.Layer):
  def call(self, inputs):
    self.add_loss(tf.abs(tf.reduce_mean(inputs)))
    return inputs

Этот метод также можно вызывать непосредственно на модели Functional Model во время её построения. В этом случае любые тензоры потерь, переданные этой модели, должны быть символьными и могут быть прослежены до входных данных модели Input. Эти потери становятся частью топологии модели и отслеживаются в get_config.

Пример:

inputs = tf.keras.Input(shape=(10,))
x = tf.keras.layers.Dense(10)(inputs)
outputs = tf.keras.layers.Dense(1)(x)
model = tf.keras.Model(inputs, outputs)
# Activity regularization.
model.add_loss(tf.abs(tf.reduce_mean(x)))

Если это не так для ваших потерь (если, например, ваши потери ссылаются на Variable одного из слоёв модели), вы можете обернуть свои потери в лямбда-функцию без аргументов. Эти потери не отслеживаются как часть топологии модели, так как они не могут быть сериализованы.

Пример:

inputs = tf.keras.Input(shape=(10,))
d = tf.keras.layers.Dense(10)
x = d(inputs)
outputs = tf.keras.layers.Dense(1)(x)
model = tf.keras.Model(inputs, outputs)
# Weight regularization.
model.add_loss(lambda: tf.reduce_mean(d.kernel))
Аргументы
losses Тензор потерь или список/кортеж тензоров. Вместо тензоров потери также могут быть вызовами без аргументов, которые создают тензор потерь.
**kwargs Дополнительные ключевые аргументы для обратной совместимости. Допустимые значения: inputs — устарело, будет автоматически определено.

add_metric

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

add_metric(
    value, name=None, **kwargs
)

Добавляет тензор метрики к слою.

Этот метод можно использовать внутри метода call() подклассированного слоя или модели.

class MyMetricLayer(tf.keras.layers.Layer):
  def __init__(self):
    super(MyMetricLayer, self).__init__(name='my_metric_layer')
    self.mean = tf.keras.metrics.Mean(name='metric_1')

  def call(self, inputs):
    self.add_metric(self.mean(inputs))
    self.add_metric(tf.reduce_sum(inputs), name='metric_2')
    return inputs

Этот метод также можно вызывать непосредственно на модели Functional Model во время её построения. В этом случае любой тензор, переданный этой модели, должен быть символьным и может быть прослежен до входных данных модели Input. Эти метрики становятся частью топологии модели и отслеживаются при сохранении модели с помощью save().

inputs = tf.keras.Input(shape=(10,))
x = tf.keras.layers.Dense(10)(inputs)
outputs = tf.keras.layers.Dense(1)(x)
model = tf.keras.Model(inputs, outputs)
model.add_metric(math_ops.reduce_sum(x), name='metric_1')
Примечание: Вызов add_metric() с результатом объекта метрики на модели Functional Model, как показано в примере ниже, не поддерживается. Это связано с тем, что мы не можем проследить тензор результата метрики до входных данных модели.
inputs = tf.keras.Input(shape=(10,))
x = tf.keras.layers.Dense(10)(inputs)
outputs = tf.keras.layers.Dense(1)(x)
model = tf.keras.Model(inputs, outputs)
model.add_metric(tf.keras.metrics.Mean()(x), name='metric_1')
Аргументы
value Тензор метрики.
name Название метрики (строка).
**kwargs Дополнительные ключевые аргументы для обратной совместимости. Принятые значения: aggregation — когда тензор value не является результатом вызова экземпляра keras.Metric, он будет агрегироваться по умолчанию с помощью keras.Metric.Mean.

build

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

build(
    inputs_shape
)

Строит обернутый ячейку.

compute_mask

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

compute_mask(
    inputs, mask=None
)

Вычисляет тензор маски вывода.

Аргументы
inputs Тензор или список тензоров.
mask Тензор или список тензоров.
Возвращает
None или тензор (или список тензоров, по одному на каждый выходной тензор слоя).

compute_output_shape

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

compute_output_shape(
    input_shape
)

Вычисляет форму вывода слоя.

Если слой ещё не был построен, этот метод вызовет build в слое. Это предполагает, что слой впоследствии будет использоваться с входными данными, соответствующими предоставленной форме ввода.

Аргументы
input_shape Кортеж формы (кортеж целых чисел) или список кортежей форм (по одному на каждый выходной тензор слоя). Кортежи форм могут содержать None для свободных размерностей вместо целого числа.
Возвращает
Кортеж входной формы.

count_params

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

count_params()

Подсчитать общее количество скаляров, составляющих веса.

Возвращает
Целое число (счёт).
Возбуждает исключение
ValueError если слой ещё не построен (в этом случае его веса ещё не определены).

from_config

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

@classmethod
from_config(
    config, custom_objects=None
)

Создаёт слой по его конфигурации.

Этот метод — обратный get_config, способный создать тот же самый слой из словаря конфигурации. Он не обрабатывает связность слоёв (обрабатывается в сети), ни веса (обрабатывается set_weights).

Аргументы
config Словарь Python, обычно вывод метода get_config.
Возвращает
Экземпляр слоя.

get_config

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

get_config()

get_initial_state

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

get_initial_state(
    inputs=None, batch_size=None, dtype=None
)

get_weights

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

get_weights()

Возвращает текущие веса слоя в виде массивов NumPy.

Веса слоя представляют состояние слоя. Эта функция возвращает значения весов, как обучаемых, так и необучаемых, связанных с этим слоем, в виде списка массивов NumPy, которые, в свою очередь, могут быть использованы для загрузки состояния в аналогично параметризованные слои.

Например, слой Dense возвращает список из двух значений: матрицу ядра и вектор смещения. Их можно использовать для установки весов другого слоя Dense.

layer_a = tf.keras.layers.Dense(1,
  kernel_initializer=tf.constant_initializer(1.))
a_out = layer_a(tf.convert_to_tensor([[1., 2., 3.]]))
layer_a.get_weights()
[array([[1.],
       [1.],
       [1.]], dtype=float32), array([0.], dtype=float32)]
layer_b = tf.keras.layers.Dense(1,
  kernel_initializer=tf.constant_initializer(2.))
b_out = layer_b(tf.convert_to_tensor([[10., 20., 30.]]))
layer_b.get_weights()
[array([[2.],
       [2.],
       [2.]], dtype=float32), array([0.], dtype=float32)]
layer_b.set_weights(layer_a.get_weights())
layer_b.get_weights()
[array([[1.],
       [1.],
       [1.]], dtype=float32), array([0.], dtype=float32)]
Возвращает
Значения весов в виде списка массивов NumPy.

set_weights

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

set_weights(
    weights
)

Устанавливает веса слоя из массивов NumPy.

Веса слоя представляют состояние слоя. Эта функция устанавливает значения весов из массивов NumPy. Значения весов должны передаваться в том порядке, в котором они создавались слоем. Обратите внимание, что веса слоя должны быть созданы перед вызовом этой функции, вызвав сам слой.

Например, слой Dense возвращает список из двух значений: матрицу ядра и вектор смещения. Их можно использовать для установки весов другого слоя Dense.

layer_a = tf.keras.layers.Dense(1,
  kernel_initializer=tf.constant_initializer(1.))
a_out = layer_a(tf.convert_to_tensor([[1., 2., 3.]]))
layer_a.get_weights()
[array([[1.],
       [1.],
       [1.]], dtype=float32), array([0.], dtype=float32)]
layer_b = tf.keras.layers.Dense(1,
  kernel_initializer=tf.constant_initializer(2.))
b_out = layer_b(tf.convert_to_tensor([[10., 20., 30.]]))
layer_b.get_weights()
[array([[2.],
       [2.],
       [2.]], dtype=float32), array([0.], dtype=float32)]
layer_b.set_weights(layer_a.get_weights())
layer_b.get_weights()
[array([[1.],
       [1.],
       [1.]], dtype=float32), array([0.], dtype=float32)]
Аргументы
weights список массивов NumPy. Количество массивов и их форма должны соответствовать количеству измерений весов слоя (т.е. должны соответствовать выводу get_weights).
Возбуждает исключение
ValueError Если предоставленный список весов не соответствует спецификациям слоя.

zero_state

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

zero_state(
    batch_size, dtype
)

__call__

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

__call__(
    *args, **kwargs
)

Оборачивает call, применяя предварительные и последующие этапы обработки.

Аргументы
*args Позиционные аргументы, которые будут переданы self.call.
**kwargs Именованные аргументы, которые будут переданы self.call.
Возвращает
Выходной(ые) тензор(ы).

Примечание:

  • Следующие необязательные именованные аргументы зарезервированы для специального использования:
    • training: Булев скалярный тензор Python булевых значений, указывающий, предназначен ли call для обучения или вывода.
    • mask: Маска входных данных.
  • Если метод call слоя принимает аргумент mask (как это делают некоторые слои Keras), его значение по умолчанию будет установлено в маску, сгенерированную для inputs предыдущим слоем (если input действительно пришёл от слоя, который сгенерировал соответствующую маску, т.е. если он пришёл от слоя Keras с поддержкой маскирования).
  • Если слой не построен, метод вызовет build.
Возбуждает исключение
ValueError если метод call слоя возвращает None (неверное значение).
RuntimeError если super().__init__() не был вызван в конструкторе.

© 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/versions/r2.9/api_docs/python/tf/nn/RNNCellDeviceWrapper

Spec-Zone.ru

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