Spec-Zone.ru › TensorFlow 2.3

tf.keras.layers.RNN

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

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

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

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

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

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

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

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

  • inputs: Входной тензор.
  • mask: Бинарный тензор формы [batch_size, 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 может быть многомерной формой тензора.

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

Этот слой поддерживает маскирование для входных данных с переменным количеством временных шагов. Для введения масок в ваши данные используйте слой [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 = 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

Методы

reset_states

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

reset_states(
    states=None
)

Сбросить записанные состояния для состоятельного слоя RNN.

Может быть использован только при создании слоя RNN с stateful = True . Args: states: Массивы NumPy, содержащие значения для начального состояния, которые будут переданы ячейке на первом временном шаге. Когда значение None, создаётся массив NumPy, заполненный нулями, на основе размера состояния ячейки.

Исключения
AttributeError При использовании слоя RNN не в состоятельном режиме.
ValueError При неизвестном размере пакета слоя RNN.
ValueError При несовместимости входного массива NumPy со состоянием слоя RNN, как по размеру, так и по типу данных.

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

Spec-Zone.ru

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