阅读(11.1k) 书签 (0)

TensorFlow函数:tf.nn.bidirectional_dynamic_rnn

2019-01-31 11:30 更新

tf.nn.bidirectional_dynamic_rnn函数

tf.nn.bidirectional_dynamic_rnn(
    cell_fw,
    cell_bw,
    inputs,
    sequence_length=None,
    initial_state_fw=None,
    initial_state_bw=None,
    dtype=None,
    parallel_iterations=None,
    swap_memory=False,
    time_major=False,
    scope=None
)

定义在:tensorflow/python/ops/rnn.py.

请参阅指南:神经网络>递归神经网络

创建双向递归神经网络的动态版本.

获取输入并构建独立的前向和后向RNN.前向和后向单元的input_size必须匹配.默认情况下,两个方向的初始状态为零(但可以选择设置),并且不返回任何中间状态 - 如果没有给出长度,则为给定的 (传入) 长度完全展开网络,或者在未给出长度的情况下完全展开网络.

参数:

  • cell_fw:用于正向的RNNCell的实例.
  • cell_bw:用于反向的RNNCell的实例.
  • inputs:RNN输入.如果time_major == False(默认值),则必须是形状为[batch_size, max_time, ...]的张量,或这些元素的嵌套元组;如果time_major == True,则必须是形状为[max_time, batch_size, ...]的张量,或这些元素的嵌套元组.
  • sequence_length:(可选)int32/int64向量,size为[batch_size],包含批处理中每个序列的实际长度.如果未提供,则假定所有批次条目都是完整序列;对每个序列从时间0到max_time应用时间反转.
  • initial_state_fw:(可选)正向RNN的初始状态.这必须是适当类型和形状为[batch_size, cell_fw.state_size]的张量.如果cell_fw.state_size是一个元组,这应该是一个张量元组,在cell_fw.state_size中s具有形状[batch_size, s].
  • initial_state_bw:(可选)与initial_state_fw相同,但使用与cell_bw相应的属性.
  • dtype:(可选)初始状态和预期输出的数据类型;如果未提供initial_states或RNN状态具有异构dtype,则为必需有的.
  • parallel_iterations:(默认值:32),并行运行的迭代次数;那些没有任何时间依赖性并且可以并行运行的操作将是;该参数用于交换空间的时间;值>> 1使用更多内存但占用更少时间,而较小值使用较少内存但计算时间较长.
  • swap_memory:透明地交换正向推理中产生的张量,但是从GPU到CPU需要向后支撑.这允许训练通常不适合单个GPU的RNN,具有非常小的(或没有)性能损失.
  • 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;默认为“bidirectional_rnn”.

返回:

元组(outputs,output_states),其中:

  • outputs:包含正向和反向rnn输出的元组(output_fw,output_bw).

    • 如果time_major == False(默认值),则output_fw将是形状为[batch_size, max_time, cell_fw.output_size]的张量,则output_bw将是形状为[batch_size, max_time, cell_bw.output_size]的张量;
    • 如果time_major == True,则output_fw将是形状为[max_time, batch_size, cell_fw.output_size]的张量;output_bw将会是形状为[max_time, batch_size, cell_bw.output_size]的张量.
      与bidirectional_rnn不同,它返回一个元组而不是单个连接的张量.如果优选连接的,则正向和反向输出可以连接为tf.concat(outputs, 2).
  • output_states:包含双向rnn的正向和反向最终状态的元组.

可能引发的异常:

  • TypeError:如果cell_fw或cell_bw不是RNNCell的实例.