tf.keras.layers.RNN
Базовый класс рекуррентных слоёв.
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 — это класс, у которого есть:
|
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