tf.nn.RNNCellResidualWrapper
Обёртка RNNCell, которая гарантирует, что входные данные ячейки добавляются к выходам.
Наследуется от: Module
tf.nn.RNNCellResidualWrapper(
*args, **kwargs
)
| Аргументы | |
|---|---|
cell | Экземпляр RNNCell. |
residual_fn | (Необязательно) Функция для отображения необработанных входных данных и необработанных выходных данных ячейки в фактические выходные данные ячейки остаточной сети. По умолчанию вызывается nest.map_structure по (lambda i, o: i + o), входы и выходы. |
**kwargs | Словарь ключевых аргументов для базового слоя. |
| Атрибуты | |
|---|---|
activity_regularizer | Необязательная функция регуляризации для выхода этого слоя. |
compute_dtype | Тип данных вычислений слоя. Это эквивалентно Слои автоматически преобразуют свои входные данные в тип вычислений, что приводит к тому, что вычисления и вывод будут в типе вычислений. Это делается базовым классом Layer в Слои часто выполняют некоторые внутренние вычисления с большей точностью, когда |
dtype | Тип данных весов слоя. Это эквивалентно |
dtype_policy | Политика типа данных, связанная с этим слоем. Это экземпляр |
dynamic | Является ли слой динамическим (только для режима eager); устанавливается в конструкторе. |
input | Извлекает входной(ые) тензор(ы) слоя. Применимо только если у слоя ровно один вход, т.е. если он подключен к одному входящему слою. |
input_spec | Экземпляр(ы) InputSpec, описывающий формат входных данных для этого слоя. При создании подкласса слоя, вы можете установить self.input_spec = tf.keras.layers.InputSpec(ndim=4) Теперь, если вы попытаетесь вызвать слой на вход, который не имеет ранга 4 (например, входной формы ValueError: Input 0 of layer conv2d is incompatible with the layer: expected ndim=4, found ndim=1. Full shape received: [2] Проверки входных данных, которые можно указать с помощью
Для получения дополнительной информации см. |
losses | Список потерь, добавленных с помощью API add_loss(). Переменные тензоры регуляризации создаются при обращении к этому свойству, поэтому это безопасно в режиме eager: обращение к
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 | Список всех весов, не участвующих в обучении, отслеживаемых этим слоем. Веса, не участвующие в обучении, не обновляются во время обучения. Они должны обновляться вручную в |
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, способным создать тот же самый слой из словаря конфигурации. Он не обрабатывает связность слоев (обрабатывается Network), а также веса (обрабатываются 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/RNNCellResidualWrapper