Spec-Zone.ru › TensorFlow 2.4

tf.keras.layers.GRU

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

Ячейка с управляемыми воротами (GRU) — Cho et al. 2014.

Наследуется от: GRU, 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 Keras RNN для получения подробной информации об использовании API RNN.

В зависимости от доступного оборудования и ограничений времени выполнения этот слой выберет различные реализации (на основе cuDNN или чистого TensorFlow), чтобы максимально повысить производительность. Если доступна видеокарта GPU и все аргументы слоя соответствуют требованиям ядра 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 (только для GPU) и позволяет проводить вывод на CPU. Поэтому у неё есть отдельные смещения для 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 (применять ли ворота сброса до или после умножения матриц). 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 Целое число, сколько масок дропаута будет сгенерировано. Это полезно для ячеек, у которых внутренние веса объединены.
Возвращает
Список тензоров масок, сгенерированные или извлечённые из кэша маски в зависимости от контекста.

reset_dropout_mask

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

reset_dropout_mask()

Сбросить кэшированные маски дропаута, если они есть.

Это важно для того, чтобы слой RNN вызывал этот метод, чтобы кэшированная маска очищалась перед вызовом 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, как по размеру, так и по типу данных.

© 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.4/api_docs/python/tf/keras/layers/GRU

Spec-Zone.ru

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