Spec-Zone.ru › TensorFlow 2.3

tf.keras.layers.GRU

Просмотреть исходный код на GitHub

Узел с управляемым повторным входом — Cho et al. 2014.

Наследует от: GRU

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, implementation=2, return_sequences=False,
    return_state=False, go_backwards=False, stateful=False, unroll=False,
    time_major=False, reset_after=True, **kwargs
)

Подробную информацию об использовании API RNN см. в руководстве по API Keras RNN.

В зависимости от доступного оборудования и ограничений времени выполнения этот слой выберет различные реализации (на основе 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 в самом внешнем контексте.

Существует два варианта реализации GRU. По умолчанию используется вариант, основанный на v3, где управляющий вентиль сброса применяется к скрытому состоянию перед матричным умножением. Другой вариант основан на оригинальной статье и имеет обратный порядок.

Второй вариант совместим с 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.
implementation Режим реализации, либо 1, либо 2. Режим 1 будет структурировать свои операции как большее количество меньших скалярных произведений и сложений, в то время как режим 2 соберет их в меньше операций с большими размерами. Эти режимы будут иметь различные профили производительности на различных аппаратных средствах и для различных приложений. По умолчанию: 2.
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 имеют структуру пакет-major, поэтому по умолчанию эта функция принимает входы и выдает выходы в формате пакет-major.
reset_after Конвенция GRU (применять ли управляющий вентиль сброса после или перед матричным умножением). False = "перед", True = "после" (по умолчанию и совместимо с CuDNN).

Аргументы вызова:

  • inputs: Тензор 3D, с формой [batch, timesteps, feature].
  • mask: Бинарный тензор формы [samples, timesteps] указывающий, следует ли маскировать данный шаг во времени (необязательный, по умолчанию None).
  • 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. Аргументы: states: Массивы NumPy, содержащие значение начального состояния, которое будет передано ячейке на первом временном шаге. Когда значение равно None, будет создан массив NumPy с нулевыми значениями на основе размера состояния ячейки.

Возбуждает
AttributeError Когда слой RNN не является состоятельным.
ValueError Когда размер партии слоя RNN неизвестен.
ValueError Когда входной массив NumPy несовместим со состоянием слоя RNN, либо по размеру, либо по типу данных.

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/keras/layers/GRU

Spec-Zone.ru

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