speechbrain.nnet.loss.transducer_loss 模块

传感器损失实现(依赖于numba)

Authors
  • 阿卜杜勒瓦哈布·赫巴 2020

  • Titouan Parcollet 2023

摘要

类:

Transducer

该类实现了使用前向-后向算法进行序列转换的Transducer损失计算,采用简单实现:https://arxiv.org/pdf/1211.3711.pdf

TransducerLoss

该类实现了使用前向-后向算法的Transduce损失计算。

函数:

cu_kernel_backward

使用Numba cuda内核计算前向-后向算法的后向传递。

cu_kernel_compute_grad

使用Numba cuda内核计算前向-后向算法的梯度。

cu_kernel_forward

使用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

static forward(ctx, log_probs, labels, T, U, blank, reduction)[source]

计算换能器损耗。

static backward(ctx, grad_output)[source]

用于转换器损失的反向计算。

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设备上。

Parameters:
  • blank (int) – 用作空白标记的标记。

  • reduction (str) – 使用的缩减类型,默认为“mean”

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()
forward(logits, labels, T, U)[source]

计算传感器损耗。