Spec-Zone.ru › TensorFlow

tf.keras.layers.RNN

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

Наследует: Layer, Operation

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

Используется в блокнотах

Используется в руководствах
  • Прогнозирование временных рядов
Аргументы
cell Экземпляр ячейки RNN или список экземпляров ячеек RNN. Ячейка RNN — это класс, у которого есть:
  • Метод call(input_at_t, states_at_t), возвращающий (output_at_t, states_at_t_plus_1). Метод call ячейки также может принимать необязательный аргумент constants; см. раздел «Примечание о передаче внешних констант» ниже.
  • Атрибут state_size. Это может быть одно целое число (одно состояние), в этом случае оно задаёт размер рекуррентного состояния. Также это может быть список или кортеж целых чисел (размер каждого состояния).
  • Атрибут output_size, одно целое число.
  • Метод get_initial_state(batch_size=None), создающий тензор, который передаётся в call() в качестве начального состояния, если пользователь не указал начальное состояние другим способом. Форма возвращаемого начального состояния должна быть (batch_size, cell.state_size). Ячейка может создать тензор, заполненный нулями, или другими значениями в зависимости от своей реализации. inputs — входной тензор слоя RNN с формой (batch_size, timesteps, features). Если ячейка не реализует этот метод, слой RNN создаст тензор, заполненный нулями, с формой (batch_size, 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, хотя обычно требует больше памяти. Развёртывание подходит только для коротких последовательностей.
zero_output_for_mask Логическое значение (по умолчанию False). Следует ли использовать нули для выходных данных на замаскированных временных шагах. Обратите внимание, что это поле используется только если return_sequences равно True и передан mask. Это может быть полезно, если вы хотите повторно использовать необработанную выходную последовательность RNN без влияния замаскированных временных шагов, например при объединении двунаправленных RNN.
Аргументы вызова
inputs Входной тензор.
initial_state Список тензоров начального состояния, передаваемых при первом вызове ячейки.
mask Двоичный тензор формы [batch_size, timesteps], указывающий, следует ли маскировать заданный временной шаг. Элемент True означает, что соответствующий временной шаг следует использовать, а элемент False — что его следует игнорировать.
training Логическое значение Python, указывающее, должен ли слой работать в режиме обучения или вывода. Этот аргумент передаётся ячейке при вызове. Используется с ячейками, в которых применяется dropout.
Форма входных данных
Тензор размерности 3 с формой (batch_size, timesteps, features).

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

  • Если return_state: список тензоров. Первый тензор — выходные данные. Остальные тензоры — последние состояния, каждое формы (batch_size, state_size), где state_size может быть формой тензора высокой размерности.
  • Если return_sequences: тензор размерности 3 формы (batch_size, timesteps, output_size).

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

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

Примечание об использовании состояния в RNN:

Слои RNN можно сделать «stateful» (с сохранением состояния). Это означает, что состояния, вычисленные для примеров в одном пакете, будут повторно использоваться как начальные состояния для примеров в следующем пакете. При этом предполагается взаимно-однозначное соответствие между примерами в последовательных пакетах.

Чтобы включить сохранение состояния:

  • Укажите stateful=True в конструкторе слоя.
  • Задайте фиксированный размер пакета для модели, передав If sequential model: batch_input_shape=(...) первому слою модели. Для функциональной модели с одним или несколькими слоями Input передайте batch_shape=(...) всем первым слоям модели. Это ожидаемая форма входных данных включая размер пакета. Она должна быть кортежем целых чисел, например (32, 10, 100).
  • Укажите shuffle=False при вызове fit().

Чтобы сбросить состояния модели, вызовите .reset_states() для конкретного слоя или всей модели.

Примечание об указании начального состояния RNN:

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

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

Примеры:

from keras.src.layers import RNN
from keras.src import ops

# First, let's define a RNN Cell, as a layer subclass.
class MinimalRNNCell(keras.layers.Layer):

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

    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 = ops.matmul(inputs, self.kernel)
        output = h + ops.matmul(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)
Атрибуты
input Получает входной тензор или тензоры символической операции.

Возвращает только тензор или тензоры, соответствующие первому вызову операции.

output Получает выходной тензор или тензоры слоя.

Возвращает только тензор или тензоры, соответствующие первому вызову операции.

Методы

from_config

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

@classmethod
from_config(
    config, custom_objects=None
)

Создаёт слой на основе его конфигурации.

Этот метод является обратным по отношению к get_config и позволяет создать тот же слой из словаря конфигурации. Он не обрабатывает связи между слоями (это делает Network) и веса (это делает set_weights).

Аргументы
config Словарь Python, обычно являющийся результатом get_config.
Возвращает
Экземпляр слоя.

get_initial_state

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

get_initial_state(
    batch_size
)

inner_loop

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

inner_loop(
    sequences, initial_state, mask, training=False
)

reset_state

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

reset_state()

reset_states

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

reset_states()

symbolic_call

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

symbolic_call(
    *args, **kwargs
)

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

Spec-Zone.ru

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