Spec-Zone.ru › TensorFlow 2.9

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
)

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

Аргументы
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, представляющий 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, ...), а в случае False — (batch, timesteps, ...). Использование time_major = True немного эффективнее, так как оно позволяет избежать транспонирования в начале и в конце вычислений RNN. Однако большинство данных TensorFlow имеют структуру пакет-первым, поэтому по умолчанию эта функция принимает входные данные и выводит выходные данные в формате пакет-первым.
zero_output_for_mask Булево (по умолчанию False). Использовать ли нули для замаскированных временных шагов. Обратите внимание, что этот параметр используется только при return_sequences равно True и при наличии маски. Это может быть полезно, если вы хотите повторно использовать исходную последовательность выходов RNN без влияния замаскированных временных шагов, например, при объединении двунаправленных RNN.

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

  • inputs: Входной тензор.
  • mask: Бинарный тензор формы [batch_size, timesteps] , указывающий, следует ли маскировать определённый временной шаг. Отдельная запись True указывает, что соответствующий временной шаг должен быть использован, а False указывает, что соответствующий временной шаг следует игнорировать.
  • training: Булево значение, указывающее, должен ли слой работать в режиме обучения или в режиме вывода. Этот аргумент передаётся в ячейку при её вызове. Это используется для ячеек, использующих функцию dropout.
  • 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 = backend.dot(inputs, self.kernel)
        output = h + backend.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. Args: states: Массивы 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/RNN

Spec-Zone.ru

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