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
Этот метод также можно вызвать непосредственно на функциональной модели во время построения. В этом случае любые тензоры потерь, передаваемые в эту модель, должны быть символическими и иметь возможность отслеживания до входов модели. Эти потери становятся частью топологии модели и отслеживаются в 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
Этот метод также можно вызвать непосредственно на функциональной модели во время построения. В этом случае любой тензор, передаваемый в эту модель, должен быть символическим и иметь возможность отслеживания до входов модели. Эти метрики становятся частью топологии модели и отслеживаются при сохранении модели с помощью 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() с результатом объекта метрики на функциональной модели, как показано в примере ниже, не поддерживается. Это связано с тем, что мы не можем отследить тензор результата метрики до входов модели.
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. |
| Возвращает | |
|---|---|
| Тензор(ы) вывода. |
| Примечание | |
|---|---|
|
| Исключения | |
|---|---|
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/api_docs/python/tf/nn/RNNCellResidualWrapper