speechbrain.nnet.containers module

用于实现不同神经网络模块级联(序列)的库。

作者
  • Peter Plantinga 2020

摘要

ConnectBlocks

使用快捷连接连接块序列。

LengthsCapableSequential

可以在 forward 方法中接受 `lengths` 参数的 Sequential 模型。

ModuleList

此类实现了 torch.nn.ModuleList 的包装器,带有 forward() 方法,用于按顺序转发所有层。对于一些使用 SpeechBrain 旧版本 Sequential 类实现的预训练模型,用户可以使用此类加载这些预训练模型

Sequential

在构建时可以潜在推断形状的模块序列。

参考

class speechbrain.nnet.containers.Sequential(*layers, input_shape=None, **named_layers)[source]

基类:`ModuleDict`

在构建时可以潜在推断形状的模块序列。

如果层是通过名称传递的,则可以使用点符号引用它们。

参数:
  • **\*layers** (`tuple`) – 按顺序应用的层。

  • **input_shape** (*iterable*) – 一个整数或 None 的列表或元组,表示输入张量的预期形状。None 表示可变长度的维度。如果未传递 `input_shape`,则不会执行形状推断。

  • **\*\*named_layers** (`dict`) – 输入被视为按顺序应用的层列表。每层的输出形状用于推断下一层的形状。如果返回一个元组,则仅使用第一个元素的形状来确定下一层的输入形状(例如,RNN 返回输出、隐藏层)。

示例

>>> inputs = torch.rand(10, 40, 50)
>>> model = Sequential(input_shape=inputs.shape)
>>> model.append(Linear, n_neurons=100, layer_name="layer1")
>>> model.append(Linear, n_neurons=200, layer_name="layer2")
>>> outputs = model(inputs)
>>> outputs.shape
torch.Size([10, 40, 200])
>>> outputs = model.layer1(inputs)
>>> outputs.shape
torch.Size([10, 40, 100])
append(layer, *args, layer_name=None, **kwargs)[source]

将层添加到层列表中,并在必要时推断形状。

参数:
  • **layer** (*一个 torch.nn.Module 类* 或 `object`) – 如果层是一个类,它应该接受一个名为 `input_shape` 的参数,该参数将被推断并传递。如果层是一个模块对象,则按原样添加。

  • **\*args** (`tuple`) – 如果层被构造,这些参数将传递给它。

  • **layer_name** (`str`) – 层的名称,用于引用。如果名称已被使用,将附加 `_{count}`。

  • **\*\*kwargs** (`dict`) – 如果层被构造,这些参数将传递给它。

get_output_shape()[source]

返回输出的预期形状。

通过传递使用 `self.input_shape` 属性构建的 dummy 输入进行计算。

返回类型:

所有层应用后的输出预期形状。

forward(x)[source]

按顺序应用层,仅传递元组的第一个元素。

参数:

**x** (*torch.Tensor*) – 要通过网络运行的输入张量。

返回值:

**x** – 应用所有层后的输出。

返回类型:

torch.Tensor

class speechbrain.nnet.containers.LengthsCapableSequential(*args, **kwargs)[source]

基类:Sequential

可以在 forward 方法中接受 `lengths` 参数的 Sequential 模型。

这对于包含 RNN 的 Sequential 模型非常有用,在这些模型中避免填充很重要,也适用于某些特征归一化层。

不幸的是,这个模块不是 jit-able 的,因为编译器无法提前知道是否会传递长度参数,而且某些层不接受 length 参数。

append(*args, **kwargs)[source]

将层添加到层列表中,并在必要时推断形状。

forward(x, lengths=None)[source]

按顺序应用层,仅传递元组的第一个元素。

此外,将 `lengths` 参数转发给所有在其 `forward()` 方法中接受 `lengths` 参数的层(例如 RNN)。

参数:
  • **x** (*torch.Tensor*) – 要通过网络运行的输入张量。

  • **lengths** (*torch.Tensor*) – 张量中每个信号的相对长度。

返回值:

**x** – 所有层应用后的输出。

返回类型:

torch.Tensor

class speechbrain.nnet.containers.ModuleList(*layers)[source]

基类:`Module`

此类实现了 torch.nn.ModuleList 的包装器,带有 forward() 方法,用于按顺序转发所有层。对于一些使用 SpeechBrain 旧版本 Sequential 类实现的预训练模型,用户可以使用此类加载这些预训练模型

参数:

**\*layers** (*torch class*) – 要放入 ModuleList 中的 Torch 对象。

forward(x)[source]

应用计算流程。

append(module)[source]

将模块附加到层列表。

extend(modules)[source]

将模块附加到层列表。

insert(index, module)[source]

将模块插入到层列表。

class speechbrain.nnet.containers.ConnectBlocks(input_shape, shortcut_type='residual', shortcut_projection=False, shortcut_combine_fn=<built-in method add of type object>)[source]

基类:`Module`

使用快捷连接连接块序列。

注意:所有快捷连接都从第一个块的输出开始,因为第一个块可能会显著改变形状。

参数:
  • **input_shape** (`tuple`) – 输入的形状。

  • **shortcut_type** (`str`) – 以下之一:* “residual” - 第一个块的输出传递到最终输出,* “dense” - 每个块的输入来自所有前面的块,* “skip” - 每个块的输出传递到最终输出。

  • **shortcut_projection** (`bool`) – 仅在传递 `shortcut_type` 时有效。是否在与输出组合之前向快捷连接添加一个线性投影层,以处理不同大小。

  • **shortcut_combine_fn** (`str` 或 *function*) – 预定义函数(以下之一:“add”、“sub”、“mul”、“div”、“avg”、“cat”)或用户定义函数,该函数接收快捷连接和下一个输入,并将它们组合,如果需要在函数内部初始化参数,还会接收 `init_params`。

示例

>>> inputs = torch.rand(10, 100, 20)
>>> model = ConnectBlocks(
...     input_shape=inputs.shape, shortcut_projection=True
... )
>>> model.append(Linear, n_neurons=10)
>>> model.append(Linear, n_neurons=10, end_of_block=True)
>>> model.append(Linear, n_neurons=10)
>>> model.append(Linear, n_neurons=10, end_of_block=True)
>>> outputs = model(inputs)
>>> outputs.shape
torch.Size([10, 100, 10])
append(layer, *args, **kwargs)[source]

将指定的模块附加到快捷连接模型。

参数:
  • **layer** (*torch.nn.Module class*) – 此层将使用 *args 和 \*\*kwargs 初始化。此外,如果层接受 `input_shape` 参数,也会传递该参数。

  • **\*args** (`tuple`)

  • **\*\*kwargs** (`dict`) – 原封不动地传递给层,**除了**关键字参数 `end_of_block`,该参数用于指示应该添加快捷连接。

forward(x)[source]
参数:

**x** (*torch.Tensor*) – 复制模块的输入。

返回值:

**x** – 由所有块处理后的输出。

返回类型:

torch.Tensor