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 — это класс, который имеет:
|
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, указывающее, должен ли слой работать в режиме обучения или в режиме предсказания. Этот аргумент передается ячейке при её вызове. Это используется для ячеек, которые используют дропаут. |
| Форма входных данных | |
|---|---|
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=Trueв конструкторе слоя. - Укажите фиксированный размер пакета для вашей модели, передав Если последовательная модель:
batch_input_shape=(...)первому слою вашей модели. В противном случае, для функциональной модели с 1 или более входными слоями: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