torch.nn.functional.ctc_loss¶
- torch.nn.functional.ctc_loss(log_probs, targets, input_lengths, target_lengths, blank=0, reduction='mean', zero_infinity=False)[source][source]¶
应用 Connectionist Temporal Classification (连接时序分类) 损失。
详见
CTCLoss
。注意
在某些情况下,当在 CUDA 设备上给定张量并使用 CuDNN 时,此算子可能会选择非确定性算法以提高性能。如果不需要这样,您可以通过设置
torch.backends.cudnn.deterministic = True
来尝试使操作确定性(可能会牺牲性能)。更多信息请参阅 可复现性。注意
在 CUDA 设备上给定张量时,此操作可能会产生非确定性梯度。更多信息请参阅 可复现性。
- 参数
log_probs (Tensor) – 或 ,其中 C = 字母表中包括空白字符的数量,T = 输入长度,N = 批大小。输出的对数化概率(例如,通过
torch.nn.functional.log_softmax()
获得)。targets (Tensor) – 或 (sum(target_lengths))。目标不能是空白字符。在第二种形式中,目标被认为是已连接的。
input_lengths (Tensor) – 或 。输入的长度(每个必须 )
target_lengths (Tensor) – 或 。目标的长度
blank (int, optional) – 空白字符的标签。默认为 。
reduction (str, optional) – 指定应用于输出的归约方法:
'none'
|'mean'
|'sum'
。'none'
:不应用归约;'mean'
:输出损失将除以目标长度,然后取批次平均值;'sum'
:输出将被求和。默认值:'mean'
zero_infinity (bool, optional) – 是否将无限损失及其相关梯度清零。默认值:
False
。无限损失主要发生在输入太短而无法与目标对齐时。
- 返回类型
示例
>>> log_probs = torch.randn(50, 16, 20).log_softmax(2).detach().requires_grad_() >>> targets = torch.randint(1, 20, (16, 30), dtype=torch.long) >>> input_lengths = torch.full((16,), 50, dtype=torch.long) >>> target_lengths = torch.randint(10, 30, (16,), dtype=torch.long) >>> loss = F.ctc_loss(log_probs, targets, input_lengths, target_lengths) >>> loss.backward()