阅读(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有相同的类型和形状,是部分反转的输入.