tf.keras.layers.GRU
| Просмотреть исходный код на GitHub |
Гейт-рекуррентный блок — Cho et al. 2014.
Наследуется от: RNN, Layer, Module
tf.keras.layers.GRU(
units,
activation='tanh',
recurrent_activation='sigmoid',
use_bias=True,
kernel_initializer='glorot_uniform',
recurrent_initializer='orthogonal',
bias_initializer='zeros',
kernel_regularizer=None,
recurrent_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
recurrent_constraint=None,
bias_constraint=None,
dropout=0.0,
recurrent_dropout=0.0,
return_sequences=False,
return_state=False,
go_backwards=False,
stateful=False,
unroll=False,
time_major=False,
reset_after=True,
**kwargs
)
Для получения подробной информации об использовании API RNN см. руководство по API RNN Keras.
В зависимости от доступного оборудования и ограничений времени выполнения этот слой выберет различные реализации (на основе cuDNN или чисто TensorFlow) для максимальной производительности. Если доступен графический процессор и все аргументы слоя соответствуют требованиям ядра cuDNN (подробности см. ниже), слой будет использовать быструю реализацию cuDNN.
Требования для использования реализации cuDNN:
-
activation==tanh -
recurrent_activation==sigmoid -
recurrent_dropout== 0 -
unrollявляетсяFalse -
use_biasявляетсяTrue -
reset_afterявляетсяTrue - Входные данные (если используется маскирование) строго справа заполнены нулями.
- Внешний контекст активирует режим Eager execution.
Существует два варианта реализации GRU. По умолчанию используется вариант v3, в котором гейт reset применяется к скрытому состоянию перед умножением матриц. Другой вариант основан на исходном варианте и имеет обратный порядок.
Второй вариант совместим с CuDNNGRU (только для графических процессоров) и позволяет выполнение вывода на процессоре. Поэтому он имеет отдельные смещения для kernel и recurrent_kernel. Чтобы использовать этот вариант, установите reset_after=True и recurrent_activation='sigmoid'.
Например:
inputs = tf.random.normal([32, 10, 8]) gru = tf.keras.layers.GRU(4) output = gru(inputs) print(output.shape) (32, 4) gru = tf.keras.layers.GRU(4, return_sequences=True, return_state=True) whole_sequence_output, final_state = gru(inputs) print(whole_sequence_output.shape) (32, 10, 4) print(final_state.shape) (32, 4)
| Аргументы | |
|---|---|
units | Положительное целое число, размерность выходного пространства. |
activation | Функция активации для использования. По умолчанию: гиперболический тангенс (tanh). Если вы передаёте None, никакая активация не применяется (т.е. линейная активация: a(x) = x). |
recurrent_activation | Функция активации для использования на рекуррентном шаге. По умолчанию: сигмоида (sigmoid). Если вы передаёте None, никакая активация не применяется (т.е. линейная активация: a(x) = x). |
use_bias | Булево значение (по умолчанию True), использует ли слой вектор смещения. |
kernel_initializer | Инициализатор матрицы весов kernel, используемой для линейного преобразования входов. По умолчанию: glorot_uniform. |
recurrent_initializer | Инициализатор матрицы весов recurrent_kernel, используемой для линейного преобразования рекуррентного состояния. По умолчанию: orthogonal. |
bias_initializer | Инициализатор вектора смещения. По умолчанию: zeros. |
kernel_regularizer | Функция регуляризации, применяемая к матрице весов kernel. По умолчанию: None. |
recurrent_regularizer | Функция регуляризации, применяемая к матрице весов recurrent_kernel. По умолчанию: None. |
bias_regularizer | Функция регуляризации, применяемая к вектору смещения. По умолчанию: None. |
activity_regularizer | Функция регуляризации, применяемая к выходу слоя (его "активации"). По умолчанию: None. |
kernel_constraint | Функция ограничения, применяемая к матрице весов kernel. По умолчанию: None. |
recurrent_constraint | Функция ограничения, применяемая к матрице весов recurrent_kernel. По умолчанию: None. |
bias_constraint | Функция ограничения, применяемая к вектору смещения. По умолчанию: None. |
dropout | Вещественное число от 0 до 1. Доля единиц для отбрасывания при линейном преобразовании входов. По умолчанию: 0. |
recurrent_dropout | Вещественное число от 0 до 1. Доля единиц для отбрасывания при линейном преобразовании рекуррентного состояния. По умолчанию: 0. |
return_sequences | Булево значение. Возвращать ли только последний выходной сигнал в последовательности, или всю последовательность. По умолчанию: False. |
return_state | Булево значение. Возвращать ли также последнее состояние, кроме выхода. По умолчанию: False. |
go_backwards | Булево значение (по умолчанию False). Если True, обрабатывает последовательность в обратном порядке и возвращает обратную последовательность. |
stateful | Булево значение (по умолчанию False). Если True, последнее состояние для каждого образца с индексом i в пакете будет использоваться как начальное состояние для образца с индексом i в следующем пакете. |
unroll | Булево значение (по умолчанию False). Если True, сеть будет развернута, иначе будет использоваться символическая петля. Развертывание может ускорить RNN, хотя оно, как правило, более ресурсоёмко. Развертывание подходит только для коротких последовательностей. |
time_major | Формат формы тензоров inputs и outputs. Если True, входы и выходы будут иметь форму [timesteps, batch, feature], в противном случае - [batch, timesteps, feature]. Использование time_major = True немного эффективнее, потому что оно избегает транспонирования в начале и в конце вычисления RNN. Однако большинство данных TensorFlow являются по умолчанию пакетно-ориентированными, поэтому эта функция по умолчанию принимает вход и выводит выход в пакетно-ориентированной форме. |
reset_after | Конвенция GRU (применять ли гейт reset после или до умножения матриц). False = "до", True = "после" (по умолчанию и совместимо с cuDNN). |
Аргументы вызова:
-
inputs: Тензор 3D с формой[batch, timesteps, feature]. -
mask: Бинарный тензор с формой[samples, timesteps], указывающий, должен ли быть замаскирован данный временной шаг (необязательно, по умолчаниюNone). Отдельная записьTrueуказывает, что соответствующий временной шаг должен быть использован, в то время как записьFalseуказывает, что соответствующий временной шаг должен быть проигнорирован. -
training: Булево значение Python, указывающее, должен ли слой работать в режиме обучения или в режиме вывода. Этот аргумент передается ячейке при ее вызове. Это актуально только в случае использованияdropoutилиrecurrent_dropout(необязательно, по умолчаниюNone). -
initial_state: Список тензоров начального состояния, которые должны быть переданы в первый вызов ячейки (необязательно, по умолчаниюNone, что вызывает создание тензоров начального состояния, заполненных нулями).
| Атрибуты | |
|---|---|
activation | |
bias_constraint | |
bias_initializer | |
bias_regularizer | |
dropout | |
implementation | |
kernel_constraint | |
kernel_initializer | |
kernel_regularizer | |
recurrent_activation | |
recurrent_constraint | |
recurrent_dropout | |
recurrent_initializer | |
recurrent_regularizer | |
reset_after | |
states | |
units | |
use_bias | |
Методы
get_dropout_mask_for_cell
get_dropout_mask_for_cell(
inputs, training, count=1
)
Получить маску дропаута для входных данных ячейки RNN.
Создаст маску на основе контекста, если нет кэшированной маски. Если новая маска создана, она обновит кэш в ячейке.
| Аргументы | |
|---|---|
inputs | Входной тензор, форма которого будет использована для генерации маски дропаута. |
training | Булевый тензор, является ли это режим обучения, дропаут игнорируется в режиме не-обучения. |
count | Целое число, количество масок дропаута, которые будут сгенерированы. Это полезно для ячейки, у которой внутренние веса объединены вместе. |
| Возвращает | |
|---|---|
| Список тензоров маски, созданных или кэшированных на основе контекста. |
get_recurrent_dropout_mask_for_cell
get_recurrent_dropout_mask_for_cell(
inputs, training, count=1
)
Получить маску рекуррентного дропаута для ячейки RNN.
Создаст маску на основе контекста, если нет кэшированной маски. Если новая маска создана, она обновит кэш в ячейке.
| Аргументы | |
|---|---|
inputs | Входной тензор, форма которого будет использована для генерации маски дропаута. |
training | Булевый тензор, является ли это режим обучения, дропаут игнорируется в режиме не-обучения. |
count | Целое число, количество масок дропаута, которые будут сгенерированы. Это полезно для ячейки, у которой внутренние веса объединены вместе. |
| Возвращаемое значение | |
|---|---|
| Список тензоров маски, сгенерированной или кэшированной маски на основе контекста. |
reset_dropout_mask
reset_dropout_mask()
Сбросить кэшированные маски дропаута, если таковые имеются.
Это важно для слоя RNN, чтобы вызвать это в методе call(), чтобы кэшированная маска была очищена перед вызовом cell.call(). Маска должна кэшироваться на протяжении шага во времени в рамках одной партии, но не должна кэшироваться между партиями. В противном случае это введёт необоснованное смещение против определённого индекса данных в партии.
reset_recurrent_dropout_mask
reset_recurrent_dropout_mask()
Сбросить кэшированные маски рекуррентного дропаута, если таковые имеются.
Это важно для слоя RNN, чтобы вызвать это в методе call(), чтобы кэшированная маска была очищена перед вызовом cell.call(). Маска должна кэшироваться на протяжении шага во времени в рамках одной партии, но не должна кэшироваться между партиями. В противном случае это введёт необоснованное смещение против определённого индекса данных в партии.
reset_states
reset_states(
states=None
)
Сбросить записанные состояния для состоятельного слоя RNN.
Может быть использован только тогда, когда слой RNN создан с stateful = True. Аргументы: состояния: массивы NumPy, содержащие значение для начального состояния, которое будет передано ячейке на первом шаге. Если значение равно None, будет создан массив NumPy с нулевыми значениями на основе размера состояния ячейки.
| Исключения | |
|---|---|
AttributeError | Когда слой RNN не является состоятельным. |
ValueError | Когда размер партии слоя RNN неизвестен. |
ValueError | Когда входной массив NumPy несовместим с состоянием слоя RNN, либо по размеру, либо по типу данных. |
© 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/keras/layers/GRU