阅读(1445) (13)

TensorFlow函数:tf.reverse_sequence

2017-12-26 10:29:03 更新

tf.reverse_sequence 函数

reverse_sequence(
    input,
    seq_lengths,
    seq_axis=None,
    batch_axis=None,
    name=None,
    seq_dim=None,
    batch_dim=None
)

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

参见指南:张量变换>分割和连接

反转可变长度切片.

此操作首先沿着维度batch_axis对input进行分割,并且对于每个切片 i,将第一个 seq_lengths 元素沿维度 seq_axis 反转.

seq_lengths 的元素必须服从 seq_lengths[i] <= input.dims[seq_dim],seq_lengths必须是一个长度input.dims[batch_dim]的矢量.

然后沿着维度batch_axis的输出切片i由输入切片i给出,与第一个 seq_lengths [i] 切片沿维度 seq_axis 反转.

例如:

# 给定如下:
batch_dim = 0 seq_dim = 1 input.dims = (4, 8, ...) seq_lengths = [7, 2, 3, 5] # 然后输入的切片在seq_dim上反转,但只到seq_lengths:
output[0, 0:7, :, ...] = input[0, 7:0:-1, :, ...] output[1, 0:2, :, ...] = input[1, 2:0:-1, :, ...] output[2, 0:3, :, ...] = input[2, 3:0:-1, :, ...] output[3, 0:5, :, ...] = input[3, 5:0:-1, :, ...] #当条目通过seq_lens被复制通过:output[0, 7:, :, ...] = input[0, 7:, :, ...] output[1, 2:, :, ...] = input[1, 2:, :, ...] output[2, 3:, :, ...] = input[2, 3:, :, ...] output[3, 2:, :, ...] = input[3, 2:, :, ...]

相反的情况如下:

# 给定如下:
batch_dim = 2
seq_dim = 0
input.dims = (8, ?, 4, ...)
seq_lengths = [7, 2, 3, 5]

# 然后在seq_dim上切换输入的切片,但只能切换到seq_lengths:
output[0:7, :, 0, :, ...] = input[7:0:-1, :, 0, :, ...] output[0:2, :, 1, :, ...] = input[2:0:-1, :, 1, :, ...] output[0:3, :, 2, :, ...] = input[3:0:-1, :, 2, :, ...] output[0:5, :, 3, :, ...] = input[5:0:-1, :, 3, :, ...] # 通过seq_lens的条目被复制:
output[7:, :, 0, :, ...] = input[7:, :, 0, :, ...] output[2:, :, 1, :, ...] = input[2:, :, 1, :, ...] output[3:, :, 2, :, ...] = input[3:, :, 2, :, ...] output[2:, :, 3, :, ...] = input[2:, :, 3, :, ...]

参数:

  • input:一个Tensor.要反转的输入.
  • seq_lengths:一个Tensor.必须是以下类型之一:int32,int64;长度为input.dims(batch_dim)和max(seq_lengths) <= input.dims(seq_dim)的一维
  • seq_axis:int;部分逆转的维度.
  • batch_axis:可选int.默认为0.逆向执行的维度.
  • name:操作的名称(可选).

返回:

该函数返回Tensor,与input有相同的类型和形状,是部分反转的输入.