speechbrain.nnet.containers 模块

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

Authors
  • 彼得·普兰廷加 2020

摘要

类:

ConnectBlocks

使用快捷连接连接一系列块。

LengthsCapableSequential

可以在前向方法中接受lengths的Sequential模型。

ModuleList

该类实现了对torch.nn.ModuleList的封装,并提供了一个forward()方法,用于顺序前向传播所有层。

Sequential

一个模块序列,可能在构建时推断形状。

参考

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

基础:ModuleDict

一系列模块,可能在构建时推断形状。

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

Parameters:
  • *layers (tuple) – 按顺序应用的层。

  • input_shape (可迭代对象) – 一个由整数或None组成的列表或元组,表示输入张量的预期形状。None表示可变长度的维度。如果没有传递input_shape,则不会执行形状推断。

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

Example

>>> 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]

向图层列表中添加一个图层,必要时推断形状。

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

  • *args (tuple) – 如果构造了该层,这些参数将传递给该层。

  • layer_name (str) – 图层的名称,用于参考。如果名称已被使用,_{count} 将会被附加。

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

get_output_shape()[source]

返回输出的预期形状。

通过使用self.input_shape属性构造的虚拟输入进行计算。

Return type:

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

forward(x)[source]

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

Parameters:

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

Returns:

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

Return type:

torch.Tensor

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

基础类: Sequential

顺序模型可以在前向方法中接受lengths

这对于包含RNN的顺序模型非常有用,在这些模型中避免填充非常重要,或者对于一些特征归一化层也是如此。

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

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

向图层列表中添加一个图层,必要时推断形状。

forward(x, lengths=None)[source]

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

此外,将lengths参数传递给所有在其forward()方法中接受lengths参数的层(例如RNNs)。

Parameters:
  • x (torch.Tensor) – 输入张量,通过网络运行。

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

Returns:

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

Return type:

torch.Tensor

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

基础:Module

该类实现了对torch.nn.ModuleList的封装,并提供了一个forward()方法,用于顺序前向传播所有层。 对于一些使用SpeechBrain旧版Sequential类实现的预训练模型,用户可以使用该类来加载这些预训练模型。

Parameters:

*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

使用快捷连接连接一系列块。

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

Parameters:
  • input_shape (tuple) – 形状

  • shortcut_type (str) – 其中之一: * “residual” - 第一个块的输出传递给最终输出, * “dense” - 每个块的输入来自所有先前的块, * “skip” - 每个块的输出传递给最终输出。

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

  • shortcut_combine_fn (strfunction) – 可以是一个预定义的函数(如“add”、“sub”、“mul”、“div”、“avg”、“cat”之一),也可以是一个用户定义的函数,该函数接收快捷方式和下一个输入,并将它们组合起来,同时如果需要在函数内部初始化参数,还可以使用 init_params

Example

>>> 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]

将指定的模块附加到快捷方式模型中。

Parameters:
  • layer (torch.nn.Module 类) – 该层将使用 *args 和 **kwargs 进行初始化。此外,如果该层接受 input_shape 参数,该参数将被传递。

  • *args (元组)

  • **kwargs (dict) – 传递给层的内容保持不变,除了参数 end_of_block,该参数用于指示应添加快捷方式。

forward(x)[source]
Parameters:

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

Returns:

x – 所有块处理的输出。

Return type:

torch.Tensor