mindspore.ops.sequence_mask

mindspore.ops.sequence_mask(lengths, maxlen=None)[源代码]

返回一个表示每个单元的前N个位置的掩码Tensor。内部元素数据类型为bool。

如果 lengths 的shape为 \((d_1, d_2, ..., d_n)\) ,则生成的Tensor掩码拥有数据类型,其shape为 \((d_1, d_2, ..., d_n, maxlen)\) ,且mask \([i_1, i_2, ..., i_n, j] = (j < lengths[i_1, i_2, ..., i_n])\)

参数:

  • lengths (Tensor) - 用来计算掩码的Tensor,一般代表长度。此Tensor中的所有值都应小于或等于 maxlen 。大于 maxlen 的值将被视为 maxlen 。其数据类型为int32或int64。

  • maxlen (int) - 指定返回Tensor的长度。其值为正数,且与 lengths 中的元素数据类型相同。默认为None。

输出:

返回一个Tensor,shape为 lengths.shape + (maxlen,)

异常:

  • TypeError - lengths 不是Tensor。

  • TypeError - maxlen 不是int。

  • TypeError - lengths 的数据类型既不是int32,也不是int64。

支持平台:

GPU

样例:

>>> from mindspore import Tensor, ops
>>> import mindspore
>>> import numpy as np
>>> # case 1: When maxlen is assigned
>>> x = Tensor(np.array([1, 2, 3, 4]))
>>> output = ops.sequence_mask(x, 5)
>>> print(output)
[[ True False False False False]
 [ True  True False False False]
 [ True  True  True False False]
 [ True  True  True  True False]]
>>> # case 2: When there is 0 in x
>>> x = Tensor(np.array([[1, 3], [2, 0]]))
>>> output = ops.sequence_mask(x, 5)
>>> print(output)
[[[ True False False False False]
  [ True  True  True False False]]
 [[ True  True False False False]
  [False False False False False]]]
>>> # case 3: when the maxlen is not assigned
>>> x = Tensor(np.array([[1, 3], [2, 4]]))
>>> output = ops.sequence_mask(x)
>>> print(output)
[[[ True False False False ]
  [ True  True  True False ]]
 [[ True  True False False ]
  [ True  True  True  True ]]]