speechbrain.nnet.loss.transducer_loss 模块
传感器损失实现(依赖于numba)
- Authors
阿卜杜勒瓦哈布·赫巴 2020
Titouan Parcollet 2023
摘要
类:
该类实现了使用前向-后向算法进行序列转换的Transducer损失计算,采用简单实现:https://arxiv.org/pdf/1211.3711.pdf |
|
该类实现了使用前向-后向算法的Transduce损失计算。 |
函数:
使用Numba cuda内核计算前向-后向算法的后向传递。 |
|
使用Numba cuda内核计算前向-后向算法的梯度。 |
|
使用Numba cuda内核计算前向-后向算法的前向传递。 |
参考
- speechbrain.nnet.loss.transducer_loss.cu_kernel_forward(log_probs, labels, alpha, log_p, T, U, blank, lock)[source]
使用Numba cuda内核计算前向-后向算法的前向传递。 使用朴素实现进行序列转导:https://arxiv.org/pdf/1211.3711.pdf
- Parameters:
log_probs (torch.Tensor) – 来自Transducer网络的4D张量,形状为(batch x TimeLength x LabelLength x outputDim)。
labels (torch.Tensor) – 2D 张量 (batch x MaxSeqLabelLength),包含批处理的目标,并用零填充。
alpha (torch.Tensor) – 用于前向计算的 (批次 x 时间长度 x 标签长度) 的3D张量。
log_p (torch.Tensor) – 用于前向成本计算的(批次)一维张量。
T (torch.Tensor) – 包含每个目标时间长度的1D张量(批次)。
U (torch.Tensor) – 包含每个目标的标签长度的1D张量(批次)。
空白 (int) – 空白索引。
lock (torch.Tensor) – 2D 张量 (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内核计算前向-后向算法的后向传递。 使用朴素实现进行序列转导:https://arxiv.org/pdf/1211.3711.pdf
- Parameters:
log_probs (torch.Tensor) – 来自Transducer网络的4D张量,形状为(batch x TimeLength x LabelLength x outputDim)。
labels (torch.Tensor) – 2D 张量 (batch x MaxSeqLabelLength),包含批处理的目标,并用零填充。
beta (torch.Tensor) – 用于反向计算的 (batch x TimeLength x LabelLength) 的3D张量。
log_p (torch.Tensor) – 用于反向成本计算的1D张量(批次)。
T (torch.Tensor) – 包含每个目标时间长度的1D张量(批次)。
U (torch.Tensor) – 包含每个目标的标签长度的1D张量(批次)。
空白 (int) – 空白索引。
lock (torch.Tensor) – 2D 张量 (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内核计算前向-后向算法的梯度。 使用朴素实现进行序列转导:https://arxiv.org/pdf/1211.3711.pdf
- Parameters:
log_probs (torch.Tensor) – 来自Transducer网络的4D张量,形状为(batch x TimeLength x LabelLength x outputDim)。
labels (torch.Tensor) – 2D 张量 (batch x MaxSeqLabelLength),包含批处理的目标,并用零填充。
alpha (torch.Tensor) – 用于反向计算的 (batch x TimeLength x LabelLength) 的3D张量。
beta (torch.Tensor) – 用于反向计算的 (batch x TimeLength x LabelLength) 的3D张量。
grads (torch.Tensor) – 用于反向计算的梯度。
T (torch.Tensor) – 包含每个目标时间长度的1D张量(批次)。
U (torch.Tensor) – 包含每个目标的标签长度的1D张量(批次)。
空白 (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该类实现了使用前向-后向算法进行Transduce损失计算。 序列转导的简单实现:https://arxiv.org/pdf/1211.3711.pdf
TransducerLoss(nn.Module) 使用 Transducer(autograd.Function) 来计算前向-后向损失和梯度。
输入张量必须在cuda设备上。
Example
>>> 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()