Spec-Zone.ru › TensorFlow 2.4

tf.keras.layers.RNN

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

Базовый класс для рекуррентных слоёв.

Наследуется от: Layer, Module

Просмотр псевдонимов

Псевдонимы для миграции

См. Руководство по миграции для получения более подробной информации.

tf.compat.v1.keras.layers.RNN

tf.keras.layers.RNN(
    cell, return_sequences=False, return_state=False, go_backwards=False,
    stateful=False, unroll=False, time_major=False, **kwargs
)

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

Аргументы
cell Экземпляр ячейки RNN или список экземпляров ячеек RNN. Ячейка RNN — это класс, который имеет:
  • Метод call(input_at_t, states_at_t), возвращающий (output_at_t, states_at_t_plus_1). Метод вызова ячейки также может принимать необязательный аргумент constants, см. раздел «Замечание о передаче внешних констант» ниже.
  • Атрибут state_size . Это может быть целое число (один состояние) в котором случае это размер рекуррентного состояния. Это также может быть список/кортеж целых чисел (размер каждого состояния). state_size также может быть TensorShape или кортеж/список TensorShape, чтобы представить состояние высокой размерности.
  • Атрибут output_size . Это может быть целое число или TensorShape, которые представляют форму вывода. По соображениям обратной совместимости, если этот атрибут недоступен для ячейки, значение будет определяться по первому элементу state_size.
  • Метод get_initial_state(inputs=None, batch_size=None, dtype=None) , который создаёт тензор, предназначенный для передачи в call() в качестве начального состояния, если пользователь не указал начальное состояние другими способами. Возвращаемое начальное состояние должно иметь форму [размер_партьи, cell.state_size]. Ячейка может выбрать создание тензора, заполненного нулями, или тензора с другими значениями в зависимости от реализации ячейки. inputs — это входной тензор в слой RNN, который должен содержать размер партии в качестве shape[0], а также dtype. Обратите внимание, что shape[0] может быть None во время построения графа. Предоставляется либо inputs , либо пара batch_size и dtype . batch_size — скалярный тензор, представляющий размер партии входных данных. dtype — tf.DType, представляющий тип данных входных данных. По соображениям обратной совместимости, если этот метод не реализован ячейкой, слой RNN создаст тензор, заполненный нулями, с размером [размер_партьи, cell.state_size]. В случае, если cell является списком экземпляров ячеек RNN, ячейки будут уложены друг на друга в RNN, что обеспечит эффективный уложенный RNN.
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, ...), в противном случае — (batch, timesteps, ...). Использование time_major = True немного эффективнее, потому что оно избегает транспонирования в начале и в конце вычисления RNN. Однако большинство данных TensorFlow имеют порядок партии, поэтому по умолчанию эта функция принимает вход и выдает вывод в формате с порядком партии.
zero_output_for_mask Булево (значение по умолчанию False). Использует ли вывод нули для замаскированных временных шагов. Обратите внимание, что этот параметр используется только когда return_sequences равно True и маска предоставлена. Это может быть полезно, если вы хотите повторно использовать исходную последовательность вывода RNN без вмешательства от замаскированных временных шагов, например, для слияния двунаправленных RNN.

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

  • inputs: Входной тензор.
  • mask: Двоичный тензор формы [batch_size, timesteps], указывающий, должен ли быть замаскирован данный временной шаг.
  • training: Булевое значение Python, указывающее, должен ли слой работать в режиме обучения или в режиме вывода. Этот аргумент передаётся ячейке при её вызове. Это используется для ячеек, использующих дропаут.
  • initial_state: Список тензоров начального состояния, которые передаются в первый вызов ячейки.
  • constants: Список константных тензоров, которые передаются в ячейку на каждом временном шаге.

Форма входа:

N-мерный тензор с формой [batch_size, timesteps, ...] или [timesteps, batch_size, ...] когда time_major True.

Форма вывода:

  • Если return_state: список тензоров. Первый тензор — вывод. Остальные тензоры — последние состояния, каждое с формой [batch_size, state_size], где state_size может быть тензором высокой размерности.
  • Если return_sequences: N-мерный тензор с формой [batch_size, timesteps, output_size], где output_size может быть тензором высокой размерности, или [timesteps, batch_size, output_size] когда time_major True.
  • В противном случае N-мерный тензор с формой [batch_size, output_size], где output_size может быть тензором высокой размерности.

Маскирование:

Этот слой поддерживает маскирование для входных данных с переменным числом временных шагов. Для введения масок в данные используйте слой [tf.keras.layers.Embedding] с параметром mask_zero, установленным в True.

Примечание об использовании состоятельности в RNN: Вы можете установить слои RNN в «состоятельное» состояние, что означает, что состояния, вычисленные для образцов в одной партии, будут повторно использоваться в качестве начальных состояний для образцов в следующей партии. Это предполагает взаимно-однозначное соответствие между образцами в разных последовательных партиях.

Для включения состоятельности:

- Specify `stateful=True` in the layer constructor.
- Specify a fixed batch size for your model, by passing
  If sequential model:
    `batch_input_shape=(...)` to the first layer in your model.
  Else for functional model with 1 or more Input layers:
    `batch_shape=(...)` to all the first layers in your model.
  This is the expected shape of your inputs
  *including the batch size*.
  It should be a tuple of integers, e.g. `(32, 10, 100)`.
- Specify `shuffle=False` when calling `fit()`.

Для сброса состояний вашей модели вызовите .reset_states() на определённом слое или на всей вашей модели.

Примечание о задании начального состояния RNN: Вы можете задать начальное состояние слоёв RNN символически, вызвав их с ключевым аргументом initial_state. Значение initial_state должно быть тензором или списком тензоров, представляющих начальное состояние слоя RNN.

Вы можете задать начальное состояние слоёв RNN численно, вызвав reset_states с ключевым аргументом states. Значение states должно быть массивом NumPy или списком массивов NumPy, представляющих начальное состояние слоя RNN.

Примечание о передаче внешних констант в RNN: Вы можете передавать «внешние» константы в ячейку, используя ключевой аргумент constants метода RNN.call (а также RNN.call). Для этого требуется, чтобы метод cell.call принимал тот же ключевой аргумент constants. Такие константы могут использоваться для условного преобразования ячейки на дополнительных статических входных данных (не изменяющихся со временем), что также называется механизмом внимания.

Примеры:

# First, let's define a RNN Cell, as a layer subclass.

class MinimalRNNCell(keras.layers.Layer):

    def __init__(self, units, **kwargs):
        self.units = units
        self.state_size = units
        super(MinimalRNNCell, self).__init__(**kwargs)

    def build(self, input_shape):
        self.kernel = self.add_weight(shape=(input_shape[-1], self.units),
                                      initializer='uniform',
                                      name='kernel')
        self.recurrent_kernel = self.add_weight(
            shape=(self.units, self.units),
            initializer='uniform',
            name='recurrent_kernel')
        self.built = True

    def call(self, inputs, states):
        prev_output = states[0]
        h = K.dot(inputs, self.kernel)
        output = h + K.dot(prev_output, self.recurrent_kernel)
        return output, [output]

# Let's use this cell in a RNN layer:

cell = MinimalRNNCell(32)
x = keras.Input((None, 5))
layer = RNN(cell)
y = layer(x)

# Here's how to use the cell to build a stacked RNN:

cells = [MinimalRNNCell(32), MinimalRNNCell(64)]
x = keras.Input((None, 5))
layer = RNN(cells)
y = layer(x)
Атрибуты
states

Методы

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

Spec-Zone.ru

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