创建由 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
)
参数
-
cell
RNNCell 的一个实例。 -
inputs
RNN 输入。如果time_major == False
(默认),这必须是形状的Tensor
:[batch_size, max_time, ...]
,或此类元素的嵌套元组。如果time_major == True
,则必须是形状为Tensor
的[max_time, batch_size, ...]
或此类元素的嵌套元组。这也可能是满足此属性的张量(可能是嵌套的)元组。前两个维度必须在所有输入中匹配,否则等级和其他形状组件可能会有所不同。在这种情况下,在每个 time-step 输入到cell
将复制这些元组的结构,除了时间维度(从中获取时间)。每个时间步的cell
的输入将是一个Tensor
或(可能是嵌套的)张量元组,每个张量的维度为[batch_size, ...]
。 -
sequence_length
(可选)大小为[batch_size]
的 int32/int64 向量。当超过批次元素的序列长度时,用于copy-through 状态和zero-out 输出。此参数使用户能够提取最后一个有效状态并正确填充输出,因此提供它是为了正确性。 -
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 状态具有异构 dtype,则为必需。 -
parallel_iterations
(默认值:32)。并行运行的迭代次数。那些没有任何时间依赖性并且可以并行运行的操作将是。此参数以时间换空间。值 >> 1 使用更多内存但花费的时间更少,而较小的值使用更少的内存但计算时间更长。 -
swap_memory
透明地交换前向推理中产生的张量,但需要从 GPU 到 CPU 的反向支撑。这允许训练通常不适合单个 GPU 的 RNN,而性能损失非常小(或没有)。 -
time_major
inputs
和outputs
张量的形状格式。如果为真,则这些Tensors
必须为[max_time, batch_size, depth]
形状。如果为 false,则这些Tensors
的形状必须为[batch_size, max_time, depth]
。使用time_major = True
效率更高一些,因为它避免了 RNN 计算开始和结束时的转置。但是,大多数 TensorFlow 数据是 batch-major,因此默认情况下,此函数接受输入并以 batch-major 形式发出输出。 -
scope
创建的子图的变量范围;默认为"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
是 int,则其形状为[batch_size, cell.state_size]
。如果它是TensorShape
,它将被塑造成[batch_size] + cell.state_size
。如果它是一个(可能是嵌套的)整数元组或TensorShape
,这将是一个具有相应形状的元组。如果单元格是LSTMCells
state
将是一个元组,其中每个单元格包含一个LSTMStateTuple
。
抛出
-
TypeError
如果cell
不是 RNNCell 的实例。 -
ValueError
如果输入为 None 或空列表。
迁移到 TF2
警告:这个 API 是为 TensorFlow v1 设计的。继续阅读有关如何从该 API 迁移到本机 TensorFlow v2 等效项的详细信息。见TensorFlow v1 到 TensorFlow v2 迁移指南有关如何迁移其余代码的说明。
tf.compat.v1.nn.dynamic_rnn
与即刻执行和 tf.function
不兼容。请改用tf.keras.layers.RNN
进行 TF2 迁移。以 LSTM 为例,您可以使用 tf.keras.layers.LSTMCell
或直接通过 tf.keras.layers.LSTM
实例化 tf.keras.layers.RNN
层。创建 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)
相关用法
- Python tf.compat.v1.nn.depthwise_conv2d_native用法及代码示例
- Python tf.compat.v1.nn.depthwise_conv2d用法及代码示例
- Python tf.compat.v1.nn.dilation2d用法及代码示例
- Python tf.compat.v1.nn.static_rnn用法及代码示例
- Python tf.compat.v1.nn.sufficient_statistics用法及代码示例
- Python tf.compat.v1.nn.embedding_lookup_sparse用法及代码示例
- Python tf.compat.v1.nn.separable_conv2d用法及代码示例
- Python tf.compat.v1.nn.weighted_cross_entropy_with_logits用法及代码示例
- Python tf.compat.v1.nn.convolution用法及代码示例
- Python tf.compat.v1.nn.conv2d用法及代码示例
- Python tf.compat.v1.nn.safe_embedding_lookup_sparse用法及代码示例
- Python tf.compat.v1.nn.nce_loss用法及代码示例
- Python tf.compat.v1.nn.sampled_softmax_loss用法及代码示例
- Python tf.compat.v1.nn.pool用法及代码示例
- Python tf.compat.v1.nn.sigmoid_cross_entropy_with_logits用法及代码示例
- Python tf.compat.v1.nn.ctc_loss用法及代码示例
- Python tf.compat.v1.nn.rnn_cell.MultiRNNCell用法及代码示例
- Python tf.compat.v1.nn.erosion2d用法及代码示例
- Python tf.compat.v1.nn.raw_rnn用法及代码示例
- Python tf.compat.v1.distributions.Multinomial.stddev用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.compat.v1.nn.dynamic_rnn。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。