Spec-Zone.ru › TensorFlow 1.15

tf.keras.layers.RNN

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

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

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

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

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

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

tf.compat.v1.keras.layers.RNN, `tf.compat.v2.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
)
Аргументы
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 Булево. Возвращать ли только последний выходной элемент в последовательности выходных данных, или всю последовательность.
return_state Булево. Возвращать ли последнее состояние дополнительно к выходу.
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 — пакетно-главные, поэтому по умолчанию эта функция принимает входные данные и выдаёт выходные данные в пакетно-главной форме.

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

  • inputs: Входной тензор.
  • mask: Двоичный тензор формы (samples, 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 может быть тензором высокой размерности.

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

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

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

Для активации statefulness:

- 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

Методы

get_initial_state

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

get_initial_state(
    inputs
)

reset_states

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

reset_states(
    states=None
)

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

Spec-Zone.ru

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