tf.nn.RNNCellDeviceWrapper
Оператор, который обеспечивает выполнение RNNCell на определённом устройстве. (устарело)
Наследует от: Module
tf.nn.RNNCellDeviceWrapper(
*args, **kwargs
)
| Аргументы | |
|---|---|
cell | Экземпляр RNNCell. |
device | Строка или функция, обозначающая устройство, для передачи в tf.device. |
**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/RNNCellDeviceWrapper