dynamic_decode
该接口重复执行 decoder.step()
直到 其返回的表示完成状态的Tensor中的值全部为True或解码步骤达到 max_step_num
。
decode.initialize()
会在解码循环之前被调用一次。如果 decoder
实现了 finalize
方法,则 decoder.finalize()
在解码循环后将被调用一次。
参数:
decoder (Decoder) - 解码器的实例。
output_time_major (bool,可选) - 指明最终输出(此方法的第一个返回值)中包含的Tensor的数据布局。如果为False,其将使用batch优先的数据布局, 此时的形状为
。如果为True,其将使用time优先的数据布局,此时的形状为 [seq_len,batch_size,…][seq_len,batch_size,…]。默认值为False。
return_length (bool,可选) - 标识是否在返回的元组中额外包含一个存放了所有解码序列实际长度的Tensor。默认为False。
kwargs - 其他命名关键字参数。这些参数将传递给
decoder.step
。
返回:若 return_length
为True,则返回三元组 (final_outputs, final_states, sequence_lengths)
,否则返回二元组 (final_outputs, final_states)
。 final_outputs, final_states
包含了最终的输出和状态,这两者都是Tensor或Tensor的嵌套结构。final_outputs
具有与 返回的 outputs
相同的结构和数据类型, 且其中的每个tensor都是将所有解码步中与其对应的的输出进行堆叠的结果;如果 decoder
实现了 finalize
方法,这些tensor也可能会通过 decoder.finalize()
进行修改。final_states
是最后时间步的状态,和 decoder.initialize()
返回的初始状态具有相同的结构,形状和数据类型。sequence_lengths
是int64类型的tensor,和 decoder.initialize()
返回的 finished
具有相同的形状,其保存了所有解码序列实际长度。
示例代码