tf.nn.RNNCellResidualWrapper
Обёртка RNNCell, которая гарантирует, что входные данные ячейки добавляются к выходным данным. (устарело)
Наследуется от: Module
tf.nn.RNNCellResidualWrapper(
*args, **kwargs
)
| Аргументы | |
|---|---|
cell | Экземпляр RNNCell. |
residual_fn | (Необязательно) Функция для сопоставления исходных входных данных и исходных выходных данных ячейки с фактическими выходными данными остаточной сети. По умолчанию вызывается nest.map_structure с (lambda i, o: i + o), inputs и outputs. |
**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
Этот метод также можно вызывать непосредственно при построении функциональной модели. В этом случае все передаваемые модели тензоры потерь должны быть символическими, а их происхождение должно прослеживаться до 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
Этот метод также можно вызывать непосредственно при построении функциональной модели. В этом случае передаваемый модели тензор должен быть символическим, а его происхождение должно прослеживаться до 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() с результатом метрики, полученным от объекта метрики функциональной модели, как показано в примере ниже, не поддерживается. Это связано с тем, что мы не можем проследить тензор результата метрики до входных данных модели.
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