Spec-Zone.ru › TensorFlow

tf.compat.v1.nn.dynamic_rnn

Создает рекуррентную нейронную сеть, заданную RNNCell cell. (устарело)

tf.compat.v1.nn.dynamic_rnn(
    cell,
    inputs,
    sequence_length=None,
    initial_state=None,
    dtype=None,
    parallel_iterations=None,
    swap_memory=False,
    time_major=False,
    scope=None
)

Перейдите на TF2

Внимание: Этот API предназначен для TensorFlow v1. Ниже приведены сведения о переходе с этого API на встроенный эквивалент TensorFlow v2. Инструкции по переносу остальной части кода см. в руководстве по переходу с TensorFlow v1 на TensorFlow v2.

tf.compat.v1.nn.dynamic_rnn несовместим с eager execution и tf.function. Для перехода на TF2 используйте вместо него tf.keras.layers.RNN. Например, для LSTM можно создать слой tf.keras.layers.RNN с помощью tf.keras.layers.LSTMCell или напрямую через tf.keras.layers.LSTM. Создав слой Keras, можно получить выходные данные и состояния, вызвав слой с входными данными и состояниями. Дополнительные сведения о RNN в Keras см. в этом руководстве. Подробное сравнение RNN в Keras и RNN из TF compat v1 приведено в этом документе

Структурное отображение на встроенный TF2

До:

# create 2 LSTMCells
rnn_layers = [tf.compat.v1.nn.rnn_cell.LSTMCell(size) for size in [128, 256]]

# create a RNN cell composed sequentially of a number of RNNCells
multi_rnn_cell = tf.compat.v1.nn.rnn_cell.MultiRNNCell(rnn_layers)

# 'outputs' is a tensor of shape [batch_size, max_time, 256]
# 'state' is a N-tuple where N is the number of LSTMCells containing a
# tf.nn.rnn_cell.LSTMStateTuple for each cell
outputs, state = tf.compat.v1.nn.dynamic_rnn(cell=multi_rnn_cell,
                                             inputs=data,
                                             dtype=tf.float32)

После:

# RNN layer can take a list of cells, which will then stack them together.
# By default, keras RNN will only return the last timestep output and will not
# return states. If you need whole time sequence output as well as the states,
# you can set `return_sequences` and `return_state` to True.
rnn_layer = tf.keras.layers.RNN([tf.keras.layers.LSTMCell(128),
                                 tf.keras.layers.LSTMCell(256)],
                                return_sequences=True,
                                return_state=True)
outputs, output_states = rnn_layer(inputs, states)

Как сопоставить аргументы

Имя аргумента TF1 Имя аргумента TF2 Примечание
cell cell В конструкторе слоя RNN
inputs inputs В слое RNN __call__
sequence_length Не используется Добавьте слой маскирования перед RNN, чтобы добиться того же результата.
initial_state initial_state В слое RNN __call__
dtype dtype В конструкторе слоя RNN
parallel_iterations Не поддерживается
swap_memory Не поддерживается
time_major time_major В конструкторе слоя RNN
scope Не поддерживается

Описание

Устарело: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущей версии. Инструкции по обновлению: используйте keras.layers.RNN(cell), который является эквивалентом этого API

Выполняет полностью динамическое развертывание inputs.

Пример:

# create a BasicRNNCell
rnn_cell = tf.compat.v1.nn.rnn_cell.BasicRNNCell(hidden_size)

# 'outputs' is a tensor of shape [batch_size, max_time, cell_state_size]

# defining initial state
initial_state = rnn_cell.zero_state(batch_size, dtype=tf.float32)

# 'state' is a tensor of shape [batch_size, cell_state_size]
outputs, state = tf.compat.v1.nn.dynamic_rnn(rnn_cell, input_data,
                                   initial_state=initial_state,
                                   dtype=tf.float32)
# create 2 LSTMCells
rnn_layers = [tf.compat.v1.nn.rnn_cell.LSTMCell(size) for size in [128, 256]]

# create a RNN cell composed sequentially of a number of RNNCells
multi_rnn_cell = tf.compat.v1.nn.rnn_cell.MultiRNNCell(rnn_layers)

# 'outputs' is a tensor of shape [batch_size, max_time, 256]
# 'state' is a N-tuple where N is the number of LSTMCells containing a
# tf.nn.rnn_cell.LSTMStateTuple for each cell
outputs, state = tf.compat.v1.nn.dynamic_rnn(cell=multi_rnn_cell,
                                   inputs=data,
                                   dtype=tf.float32)
Аргументы
cell Экземпляр RNNCell.
inputs Входные данные RNN. Если time_major == False (по умолчанию), это должен быть Tensor формы: [batch_size, max_time, ...] или вложенный кортеж таких элементов. Если time_major == True, это должен быть Tensor формы: [max_time, batch_size, ...] или вложенный кортеж таких элементов. Также это может быть (возможно, вложенный) кортеж тензоров, удовлетворяющих этому свойству. Первые два измерения должны совпадать у всех входных данных, в остальных случаях ранги и другие компоненты формы могут различаться. В этом случае входные данные для cell на каждом временном шаге будут повторять структуру этих кортежей, за исключением временного измерения (из которого берется время). На каждом временном шаге входные данные для cell будут представлять собой Tensor или (возможно, вложенный) кортеж тензоров, каждый из которых имеет размерности [batch_size, ...].
sequence_length (Необязательно) Вектор int32/int64 размером [batch_size]. Используется для передачи состояния без изменений и обнуления выходных данных, когда достигнута длина последовательности элемента пакета. Этот параметр позволяет извлекать последнее допустимое состояние и корректно дополненные выходные данные, поэтому он необходим для правильной работы.
initial_state (Необязательно) Начальное состояние RNN. Если cell.state_size — целое число, это должен быть Tensor соответствующего типа и формы [batch_size, cell.state_size]. Если cell.state_size — кортеж, это должен быть кортеж тензоров с формами [batch_size, s] for s in cell.state_size.
dtype (Необязательно) Тип данных начального состояния и ожидаемых выходных данных. Обязателен, если начальное состояние не задано или состояние RNN имеет неоднородный тип данных.
parallel_iterations (По умолчанию: 32). Количество итераций, выполняемых параллельно. Операции, не имеющие временной зависимости и допускающие параллельное выполнение, будут выполняться параллельно. Этот параметр позволяет выбирать между временем и объемом памяти. Значения >> 1 требуют больше памяти, но сокращают время выполнения; меньшие значения используют меньше памяти, но увеличивают время вычислений.
swap_memory Прозрачно переносить тензоры, созданные при прямом проходе и необходимые для обратного распространения, с GPU на CPU. Это позволяет обучать RNN, которые обычно не помещаются на одном GPU, практически без снижения производительности или совсем без него.
time_major Формат формы тензоров inputs и outputs. Если значение истинно, эти Tensors должны иметь форму [max_time, batch_size, depth]. Если значение ложно, эти Tensors должны иметь форму [batch_size, max_time, depth]. Использование time_major = True немного повышает эффективность, так как позволяет избежать транспонирования в начале и в конце вычисления RNN. Однако большинство данных TensorFlow организовано в формате batch-major, поэтому по умолчанию эта функция принимает входные данные и формирует выходные данные в формате batch-major.
scope VariableScope для создаваемого подграфа; по умолчанию — «rnn».
Возвращает
Пару (outputs, state), где:
outputs Выходные данные RNN Tensor.

Если time_major == False (по умолчанию), это будет Tensor формы: [batch_size, max_time, cell.output_size].

Если time_major == True, это будет Tensor формы: [max_time, batch_size, cell.output_size].

Обратите внимание: если cell.output_size — (возможно, вложенный) кортеж целых чисел или объектов TensorShape, то outputs будет кортежем с той же структурой, что и cell.output_size, содержащим тензоры с формами, соответствующими данным о форме в cell.output_size.

state Итоговое состояние. Если cell.state_size — целое число, оно будет иметь форму [batch_size, cell.state_size]. Если это TensorShape, оно будет иметь форму [batch_size] + cell.state_size. Если это (возможно, вложенный) кортеж целых чисел или TensorShape, результатом будет кортеж с соответствующими формами. Если ячейки имеют тип LSTMCells, state будет кортежем, содержащим LSTMStateTuple для каждой ячейки.
Вызывает исключения
TypeError Если cell не является экземпляром RNNCell.
ValueError Если inputs равно None или является пустым списком.

© 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/compat/v1/nn/dynamic_rnn

Spec-Zone.ru

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