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