speechbrain.nnet.loss.transducer_loss 模块
Transducer 损失实现 (依赖于 numba)
- 作者
Abdelwahab Heba 2020
Titouan Parcollet 2023
摘要
类
此类实现了使用前向-后向算法的 Transducer 损失计算,采用朴素实现:https://arxiv.org/pdf/1211.3711.pdf |
|
此类实现了使用前向-后向算法的 Transducer 损失计算。 |
函数
使用 Numba cuda kernel 计算前向-后向算法的后向传播。 |
|
使用 Numba cuda kernel 计算前向-后向算法的梯度。 |
|
使用 Numba cuda kernel 计算前向-后向算法的前向传播。 |
参考
- speechbrain.nnet.loss.transducer_loss.cu_kernel_forward(log_probs, labels, alpha, log_p, T, U, blank, lock)[source]
使用 Numba cuda kernel 计算前向-后向算法的前向传播。采用朴素实现的序列转导:https://arxiv.org/pdf/1211.3711.pdf
- 参数:
log_probs (torch.Tensor) – 来自 Transducer 网络的 4D Tensor,形状为 (batch x TimeLength x LabelLength x outputDim)。
labels (torch.Tensor) – 2D Tensor,形状为 (batch x MaxSeqLabelLength),包含零填充的批次目标。
alpha (torch.Tensor) – 用于前向计算的 3D Tensor,形状为 (batch x TimeLength x LabelLength)。
log_p (torch.Tensor) – 用于前向成本计算的 1D Tensor,形状为 (batch)。
T (torch.Tensor) – 1D Tensor,形状为 (batch),包含每个目标的时间长度。
U (torch.Tensor) – 1D Tensor,形状为 (batch),包含每个目标的标签长度。
blank (int) – 空格符索引。
lock (torch.Tensor) – 用于并行计算的 2D Tensor,形状为 (batch x LabelLength),包含布尔值 (1-0) 锁。
- speechbrain.nnet.loss.transducer_loss.cu_kernel_backward(log_probs, labels, beta, log_p, T, U, blank, lock)[source]
使用 Numba cuda kernel 计算前向-后向算法的后向传播。采用朴素实现的序列转导:https://arxiv.org/pdf/1211.3711.pdf
- 参数:
log_probs (torch.Tensor) – 来自 Transducer 网络的 4D Tensor,形状为 (batch x TimeLength x LabelLength x outputDim)。
labels (torch.Tensor) – 2D Tensor,形状为 (batch x MaxSeqLabelLength),包含零填充的批次目标。
beta (torch.Tensor) – 用于后向计算的 3D Tensor,形状为 (batch x TimeLength x LabelLength)。
log_p (torch.Tensor) – 用于后向成本计算的 1D Tensor,形状为 (batch)。
T (torch.Tensor) – 1D Tensor,形状为 (batch),包含每个目标的时间长度。
U (torch.Tensor) – 1D Tensor,形状为 (batch),包含每个目标的标签长度。
blank (int) – 空格符索引。
lock (torch.Tensor) – 用于并行计算的 2D Tensor,形状为 (batch x LabelLength),包含布尔值 (1-0) 锁。
- speechbrain.nnet.loss.transducer_loss.cu_kernel_compute_grad(log_probs, labels, alpha, beta, grads, T, U, blank)[source]
使用 Numba cuda kernel 计算前向-后向算法的梯度。采用朴素实现的序列转导:https://arxiv.org/pdf/1211.3711.pdf
- 参数:
log_probs (torch.Tensor) – 来自 Transducer 网络的 4D Tensor,形状为 (batch x TimeLength x LabelLength x outputDim)。
labels (torch.Tensor) – 2D Tensor,形状为 (batch x MaxSeqLabelLength),包含零填充的批次目标。
alpha (torch.Tensor) – 用于后向计算的 3D Tensor,形状为 (batch x TimeLength x LabelLength)。
beta (torch.Tensor) – 用于后向计算的 3D Tensor,形状为 (batch x TimeLength x LabelLength)。
grads (torch.Tensor) – 用于后向计算的梯度。
T (torch.Tensor) – 1D Tensor,形状为 (batch),包含每个目标的时间长度。
U (torch.Tensor) – 1D Tensor,形状为 (batch),包含每个目标的标签长度。
blank (int) – 空格符索引。
- class speechbrain.nnet.loss.transducer_loss.Transducer(*args, **kwargs)[source]
基类:
Function
此类实现了使用前向-后向算法的 Transducer 损失计算,采用朴素实现:https://arxiv.org/pdf/1211.3711.pdf
此类使用 torch.autograd.Function。由于使用前向-后向算法,我们需要手动计算梯度。
此类别无法实例化,请参考 TransducerLoss 类
也可以直接使用 Transducer.apply 来使用此类
- class speechbrain.nnet.loss.transducer_loss.TransducerLoss(blank=0, reduction='mean')[source]
基类:
Module
此类实现了使用前向-后向算法的 Transducer 损失计算。采用朴素实现的序列转导:https://arxiv.org/pdf/1211.3711.pdf
TransducerLoss(nn.Module) 使用 Transducer(autograd.Function) 计算前向-后向损失和梯度。
输入张量必须在 CUDA 设备上。
示例
>>> import torch >>> loss = TransducerLoss(blank=0) >>> logits = torch.randn((1,2,3,5)).cuda().requires_grad_() >>> labels = torch.Tensor([[1,2]]).cuda().int() >>> act_length = torch.Tensor([2]).cuda().int() >>> # U = label_length+1 >>> label_length = torch.Tensor([2]).cuda().int() >>> l = loss(logits, labels, act_length, label_length) >>> l.backward()