Spec-Zone.ru › TensorFlow 2.9

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 и 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 compat v1 rnn можно найти в этом документе

Структурное соответствие с 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 Выход 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 будет кортежом, содержащим по одной 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/versions/r2.9/api_docs/python/tf/compat/v1/nn/dynamic_rnn

Spec-Zone.ru

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