mindspore.ops.RNNTLoss

查看源文件
class mindspore.ops.RNNTLoss(blank_label=0)[源代码]

计算相对于softmax输出的RNNTLoss及其梯度。

参数:
  • blank_label (int) - 空白标签。默认值: 0

输入:
  • acts (Tensor) - Tensor,shape为 \((B, T, U, V)\) 。其中 \(B\) 为batch维, \(T\) 为输入序列长度, \(U\) 为目标序列长度, \(V\) 为输出维。数据类型必须为float16或float32。

  • labels (Tensor) - Tensor,shape为 \((B, U-1)\) 。数据类型为int32。

  • input_lengths (Tensor) - Tensor,shape为 \((B,)\) 。数据类型为int32。

  • label_lengths (Tensor) - Tensor,shape为 \((B,)\) 。数据类型为int32。

输出:
  • costs (Tensor) - Tensor,shape为 \((B,)\) 。数据类型为int32。

  • grads (Tensor) - 具有与 acts 相同的shape和dtype。

异常:
  • TypeError - 如果 actslabelsinput_lengthslabel_lengths 不是Tensor。

  • TypeError - 如果 acts 的dtype既不是float16也不是float32。

  • TypeError - 如果 labelsinput_lengthslabel_lengths 的dtype不是int32。

支持平台:

Ascend

样例:

>>> import numpy as np
>>> from mindspore import ops, Tensor
>>> B, T, U, V = 1, 2, 3, 5
>>> blank = 0
>>> acts = np.random.random((B, T, U, V)).astype(np.float32)
>>> labels = np.array([[1, 2]]).astype(np.int32)
>>> input_length = np.array([T] * B).astype(np.int32)
>>> label_length = np.array([len(l) for l in labels]).astype(np.int32)
>>> rnnt_loss = ops.RNNTLoss(blank_label=0)
>>> costs, grads = rnnt_loss(Tensor(acts), Tensor(labels), Tensor(input_length), Tensor(label_length))
>>> print(costs.shape)
(1,)
>>> print(grads.shape)
(1, 2, 3, 5)