tf.nn.RNNCellDropoutWrapper
Оператор, добавляющий дропаут к входным и выходным данным заданного ячейки.
Наследуется от: Module
tf.nn.RNNCellDropoutWrapper(
*args, **kwargs
)
| Аргументы | |
|---|---|
cell | ячейка RNN, к ней добавляется проекция на размер output_size. |
input_keep_prob | тензор ячейки или число от 0 до 1, вероятность сохранения входных данных; если это постоянная величина 1, то входной дропаут не будет добавлен. |
output_keep_prob | тензор ячейки или число от 0 до 1, вероятность сохранения выходных данных; если это постоянная величина 1, то выходной дропаут не будет добавлен. |
state_keep_prob | тензор ячейки или число от 0 до 1, вероятность сохранения выходных данных; если это постоянная величина 1, то выходной дропаут не будет добавлен. Дропаут состояния выполняется на исходящих состояниях ячейки. Примечание компоненты состояния, к которым применяется дропаут, когда state_keep_prob находится в (0, 1), также определяются аргументом dropout_state_filter_visitor (например, по умолчанию дропаут никогда не применяется к компоненту c объекта LSTMStateTuple). |
variational_recurrent | булево значение Python. Если True, то одна и та же схема дропаута применяется ко всем временным шагам при каждом вызове. Если этот параметр установлен, input_size обязательно должен быть предоставлен. |
input_size | (необязательно) (возможно, вложенная кортеж) объекты TensorShape, содержащие глубину(ы) входных тензоров, ожидаемых при передаче в DropoutWrapper. Требуется и используется, если variational_recurrent = True и input_keep_prob < 1. |
dtype | (необязательно) тип dtype входных, состояния и выходных тензоров. Требуется и используется, если variational_recurrent = True. |
seed | (необязательно) целое число, семя случайности. |
dropout_state_filter_visitor | (необязательно), по умолчанию: (см. ниже). Функция, которая принимает любой иерархический уровень состояния и возвращает скаляр или структуру с глубиной 1 Python-булевых значений, описывающих, какие члены состояния должны быть удалены. Кроме того, если функция возвращает True, дропаут применяется к этому подуровню. Если функция возвращает False, дропаут не применяется к этому подуровню. Поведение по умолчанию: выполнение дропаута для всех членов, кроме памяти (c) состояния объектов LSTMCellState, и не пытайтесь применить дропаут к объектам TensorArray: def dropout_state_filter_visitor(s): if isinstance(s, LSTMCellState): # Never perform dropout on the c state. return LSTMCellState(c=False, h=True) elif isinstance(s, TensorArray): return False return True |
**kwargs | словарь с ключевыми аргументами для базового слоя. |
| Исключения | |
|---|---|
TypeError | если cell не является RNNCell, или keep_state_fn предоставлен, но не callable. |
ValueError | если любой из keep_probs не находится в диапазоне от 0 до 1. |
| Атрибуты | |
|---|---|
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 | Возвращает список всех переменных/весов слоя. |
wrapped_cell | |
Методы
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, способным создать тот же слой из словаря конфигурации. Он не обрабатывает соединение слоёв (обработка осуществляется сетью), ни веса (обработка осуществляется set_weights).
| Аргументы | |
|---|---|
config | Словарь Python, обычно выходной результат get_config. |
| Возвращает | |
|---|---|
| Экземпляр слоя. |
get_config
get_config()
Возвращает конфигурацию обёртки dropout.
get_initial_state
get_initial_state(
inputs=None, batch_size=None, dtype=None
)
get_weights
get_weights()
Возвращает текущие веса слоя в виде массивов NumPy.
Веса слоя представляют состояние слоя. Эта функция возвращает как значения обучаемых, так и необучаемых весов, связанных с этим слоем, как список массивов NumPy, которые в свою очередь могут быть использованы для загрузки состояния в аналогичные слои с параметрами.
Например, слой Dense возвращает список из двух значений: матрицу ядра и вектор смещения. Эти значения могут быть использованы для установки весов другого слоя %%%CODE_BLOCK_141%%:
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 возвращает список из двух значений: матрицу ядра и вектор смещения. Эти значения могут быть использованы для установки весов другого слоя %%%CODE_BLOCK_146%%:
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/RNNCellDropoutWrapper