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 в эквивалент native TensorFlow v2. Обратитесь к руководству по миграции TensorFlow v1 в TensorFlow v2 для получения инструкций по миграции остальной части вашего кода.

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

Структурное сопоставление с native 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 (необязательно) Тип данных для начального состояния и ожидаемых выходов. Требуется, если initial_state не указан или состояние RNN имеет неоднородный тип данных.
parallel_iterations (По умолчанию: 32). Количество итераций, выполняемых параллельно. Те операции, которые не имеют временной зависимости и могут выполняться параллельно, будут. Этот параметр меняет время на место. Значения >> 1 используют больше памяти, но занимают меньше времени, в то время как меньшие значения используют меньше памяти, но вычисления занимают больше времени.
swap_memory Прозрачно меняет тензоры, произведённые в прямом выводе, но необходимые для обратного распространения с GPU на CPU. Это позволяет обучать RNN, которые обычно не помещаются на одном GPU, с минимальной (или без) потерей производительности.
time_major Формат формы тензоров inputs и outputs. Если true, эти Tensors должны быть формы [max_time, batch_size, depth]. Если false, эти Tensors должны быть формы [batch_size, max_time, depth]. Использование time_major = True немного эффективнее, так как оно избегает транспонирования в начале и в конце вычислений RNN. Однако большинство данных TensorFlow являются пакетно-главными, поэтому по умолчанию эта функция принимает входные данные и генерирует выходные данные в пакетно-главной форме.
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