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
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 | Не поддерживается |
Описание
Выполняет полностью динамическое развертывание 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 (по умолчанию), это будет Если time_major == True, это будет Обратите внимание, если |
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