Spec-Zone.ru › TensorFlow 2.9

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:

  1. activation == tanh
  2. recurrent_activation == sigmoid
  3. recurrent_dropout == 0
  4. unroll является False
  5. use_bias является True
  6. reset_after является True
  7. Входные данные (если используется маскирование) строго справа заполнены нулями.
  8. Внешний контекст активирует режим 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 Целое число, количество масок дропаута, которые будут сгенерированы. Это полезно для ячейки, у которой внутренние веса объединены вместе.
END_OF_DOCUMENT_MARKER
Возвращаемое значение
Список тензоров маски, сгенерированной или кэшированной маски на основе контекста.

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API