speechbrain.nnet.containers module
用于实现不同神经网络模块级联(序列)的库。
- 作者
Peter Plantinga 2020
摘要
类
使用快捷连接连接块序列。 |
|
可以在 forward 方法中接受 `lengths` 参数的 Sequential 模型。 |
|
此类实现了 torch.nn.ModuleList 的包装器,带有 forward() 方法,用于按顺序转发所有层。对于一些使用 SpeechBrain 旧版本 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`) – 如果层被构造,这些参数将传递给它。
- class speechbrain.nnet.containers.LengthsCapableSequential(*args, **kwargs)[source]
基类:
Sequential
可以在 forward 方法中接受 `lengths` 参数的 Sequential 模型。
这对于包含 RNN 的 Sequential 模型非常有用,在这些模型中避免填充很重要,也适用于某些特征归一化层。
不幸的是,这个模块不是 jit-able 的,因为编译器无法提前知道是否会传递长度参数,而且某些层不接受 length 参数。
- class speechbrain.nnet.containers.ModuleList(*layers)[source]
基类:`Module`
此类实现了 torch.nn.ModuleList 的包装器,带有 forward() 方法,用于按顺序转发所有层。对于一些使用 SpeechBrain 旧版本 Sequential 类实现的预训练模型,用户可以使用此类加载这些预训练模型
- 参数:
**\*layers** (*torch class*) – 要放入 ModuleList 中的 Torch 对象。
- 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])