speechbrain.nnet.CNN 模块
实现卷积神经网络的库。
- Authors
Mirco Ravanelli 2020
钟建元 2020
Cem Subakan 2021
达维德·博拉 2021
安德烈亚斯·诺奇 2022
Sarthak Yadav 2022
摘要
类:
此函数实现一维卷积。 |
|
此函数实现了二维卷积。 |
|
该类使用speechbrain实现一维转置卷积。 |
|
该类实现了深度可分离的一维卷积。 |
|
该类实现了深度可分离的2D卷积。 |
|
这个类实现了1D Gabor卷积 |
|
此函数实现了SincConv(SincNet)。 |
函数:
此函数计算要添加的元素数量以进行零填充。 |
|
此函数计算转置卷积所需的填充大小 |
参考
- class speechbrain.nnet.CNN.SincConv(out_channels, kernel_size, input_shape=None, in_channels=None, stride=1, dilation=1, padding='same', padding_mode='reflect', sample_rate=16000, min_low_hz=50, min_band_hz=50)[source]
基础:
Module此函数实现了SincConv(SincNet)。
M. Ravanelli, Y. Bengio, “从原始波形进行说话人识别的SincNet”,发表于 SLT 2018 会议 (https://arxiv.org/abs/1808.00158)
- Parameters:
out_channels (int) – 这是输出通道的数量。
kernel_size (int) – 卷积滤波器的核大小。
input_shape (tuple) – 输入的形状。也可以使用
in_channels。in_channels (int) – 输入通道的数量。或者使用
input_shape。stride (int) – 卷积滤波器的步长因子。当步长因子大于1时,会进行时间上的降采样。
dilation (int) – 卷积滤波器的膨胀因子。
padding (str) – (same, valid, causal). 如果为“valid”,则不进行填充。 如果为“same”且步幅为1,输出形状与输入形状相同。 “causal”会导致因果(扩张)卷积。
padding_mode (str) – 此标志指定填充的类型。有关更多信息,请参阅 torch.nn 文档。
sample_rate (int) – 输入信号的采样率。仅用于sinc_conv。
min_low_hz (float) – 滤波器的最低可能频率(以Hz为单位)。仅用于sinc_conv。
min_band_hz (float) – 滤波器带宽的最低可能值(以Hz为单位)。
Example
>>> inp_tensor = torch.rand([10, 16000]) >>> conv = SincConv(input_shape=inp_tensor.shape, out_channels=25, kernel_size=11) >>> out_tensor = conv(inp_tensor) >>> out_tensor.shape torch.Size([10, 16000, 25])
- class speechbrain.nnet.CNN.Conv1d(out_channels, kernel_size, input_shape=None, in_channels=None, stride=1, dilation=1, padding='same', groups=1, bias=True, padding_mode='reflect', skip_transpose=False, weight_norm=False, conv_init=None, default_padding=0)[source]
基础:
Module此函数实现一维卷积。
- Parameters:
out_channels (int) – 这是输出通道的数量。
kernel_size (int) – 卷积滤波器的核大小。
input_shape (tuple) – 输入的形状。也可以使用
in_channels。in_channels (int) – 输入通道的数量。或者使用
input_shape。stride (int) – 卷积滤波器的步长因子。当步长因子大于1时,会进行时间上的降采样。
dilation (int) – 卷积滤波器的扩张因子。
padding (str) – (same, valid, causal). 如果为“valid”,则不进行填充。 如果为“same”且步幅为1,输出形状与输入形状相同。 “causal”会导致因果(扩张)卷积。
groups (int) – 从输入通道到输出通道的阻塞连接数。
bias (bool) – 是否在卷积操作中添加偏置项。
padding_mode (str) – 此标志指定填充的类型。有关更多信息,请参阅 torch.nn 文档。
skip_transpose (bool) – 如果为False,使用speechbrain的批次 x 时间 x 通道约定。 如果为True,使用批次 x 通道 x 时间约定。
weight_norm (bool) – 如果为True,使用权重归一化, 在推理时通过self.remove_weight_norm()移除
conv_init (str) – 卷积网络的权重初始化
default_padding (str 或 int) – 这将设置由pytorch Conv1d后端使用的默认填充模式。
Example
>>> inp_tensor = torch.rand([10, 40, 16]) >>> cnn_1d = Conv1d( ... input_shape=inp_tensor.shape, out_channels=8, kernel_size=5 ... ) >>> out_tensor = cnn_1d(inp_tensor) >>> out_tensor.shape torch.Size([10, 40, 8])
- class speechbrain.nnet.CNN.Conv2d(out_channels, kernel_size, input_shape=None, in_channels=None, stride=(1, 1), dilation=(1, 1), padding='same', groups=1, bias=True, padding_mode='reflect', max_norm=None, swap=False, skip_transpose=False, weight_norm=False, conv_init=None)[source]
基础:
Module此函数实现了二维卷积。
- Parameters:
out_channels (int) – 这是输出通道的数量。
kernel_size (tuple) – 2d卷积滤波器在时间和频率轴上的核大小。
input_shape (tuple) – 输入的形状。也可以使用
in_channels。in_channels (int) – 输入通道的数量。或者使用
input_shape。stride (int) – 2D卷积滤波器在时间和频率轴上的步长因子。
dilation (int) – 2D卷积滤波器在时间和频率轴上的扩张因子。
padding (str) – (same, valid, causal). 如果为“valid”,则不进行填充。 如果为“same”且步幅为1,输出形状与输入形状相同。 如果为“causal”,则插入适当的填充以模拟第一个空间维度上的因果卷积。 (对于skip_transpose=False和skip_transpose=True,空间维度1都是维度3)
groups (int) – 此选项指定卷积组。有关更多信息,请参阅 torch.nn 文档。
bias (bool) – 如果为True,则采用加法偏置b。
padding_mode (str) – 此标志指定填充的类型。有关更多信息,请参阅 torch.nn 文档。
max_norm (float) – 核的最大范数。
swap (bool) – 如果为True,卷积将以(B, C, W, H)格式进行。 如果为False,卷积将以(B, H, W, C)格式进行。 仅在skip_transpose为False时有效。
skip_transpose (bool) – 如果为False,使用speechbrain的batch x spatial.dim2 x spatial.dim1 x channel约定。 如果为True,使用batch x channel x spatial.dim1 x spatial.dim2约定。
weight_norm (bool) – 如果为True,使用权重归一化, 在推理时通过self.remove_weight_norm()移除
conv_init (str) – 卷积网络的权重初始化
Example
>>> inp_tensor = torch.rand([10, 40, 16, 8]) >>> cnn_2d = Conv2d( ... input_shape=inp_tensor.shape, out_channels=5, kernel_size=(7, 3) ... ) >>> out_tensor = cnn_2d(inp_tensor) >>> out_tensor.shape torch.Size([10, 40, 16, 5])
- class speechbrain.nnet.CNN.ConvTranspose1d(out_channels, kernel_size, input_shape=None, in_channels=None, stride=1, dilation=1, padding=0, output_padding=0, groups=1, bias=True, skip_transpose=False, weight_norm=False)[source]
基础:
Module该类使用speechbrain实现了一维转置卷积。 转置卷积通常用于执行上采样。
- Parameters:
out_channels (int) – 这是输出通道的数量。
kernel_size (int) – 卷积滤波器的核大小。
input_shape (tuple) – 输入的形状。也可以使用
in_channels。in_channels (int) – 输入通道的数量。或者使用
input_shape。stride (int) – 卷积滤波器的步长因子。当步长因子大于1时,会进行时间上的上采样。
dilation (int) – 卷积滤波器的扩张因子。
padding (str 或 int) – 为了在输出中获得目标维度,我们建议适当调整内核大小和填充。我们还支持以下函数来控制填充和相应的输出维度。 如果为“valid”,则不应用填充 如果为“same”,则推断填充量以使输出大小尽可能接近输入大小。请注意,对于某些kernel_size / stride组合,无法获得完全相同的大小,但我们会返回最接近的可能大小。 如果为“factor”,则推断填充量以使输出大小最接近inputsize*stride。请注意,对于某些kernel_size / stride组合,无法获得确切的大小,但我们会返回最接近的可能大小。 如果输入整数值,则使用自定义填充。
output_padding (int,) – 添加到输出形状一侧的额外大小
groups (int) – 从输入通道到输出通道的阻塞连接数。 默认值:1
bias (bool) – 如果为True,向输出添加一个可学习的偏置
skip_transpose (bool) – 如果为False,使用speechbrain的批次 x 时间 x 通道约定。 如果为True,使用批次 x 通道 x 时间约定。
weight_norm (bool) – 如果为True,使用权重归一化, 在推理时通过self.remove_weight_norm()移除
Example
>>> from speechbrain.nnet.CNN import Conv1d, ConvTranspose1d >>> inp_tensor = torch.rand([10, 12, 40]) #[batch, time, fea] >>> convtranspose_1d = ConvTranspose1d( ... input_shape=inp_tensor.shape, out_channels=8, kernel_size=3, stride=2 ... ) >>> out_tensor = convtranspose_1d(inp_tensor) >>> out_tensor.shape torch.Size([10, 25, 8])
>>> # Combination of Conv1d and ConvTranspose1d >>> from speechbrain.nnet.CNN import Conv1d, ConvTranspose1d >>> signal = torch.tensor([1,100]) >>> signal = torch.rand([1,100]) #[batch, time] >>> conv1d = Conv1d(input_shape=signal.shape, out_channels=1, kernel_size=3, stride=2) >>> conv_out = conv1d(signal) >>> conv_t = ConvTranspose1d(input_shape=conv_out.shape, out_channels=1, kernel_size=3, stride=2, padding=1) >>> signal_rec = conv_t(conv_out, output_size=[100]) >>> signal_rec.shape torch.Size([1, 100])
>>> signal = torch.rand([1,115]) #[batch, time] >>> conv_t = ConvTranspose1d(input_shape=signal.shape, out_channels=1, kernel_size=3, stride=2, padding='same') >>> signal_rec = conv_t(signal) >>> signal_rec.shape torch.Size([1, 115])
>>> signal = torch.rand([1,115]) #[batch, time] >>> conv_t = ConvTranspose1d(input_shape=signal.shape, out_channels=1, kernel_size=7, stride=2, padding='valid') >>> signal_rec = conv_t(signal) >>> signal_rec.shape torch.Size([1, 235])
>>> signal = torch.rand([1,115]) #[batch, time] >>> conv_t = ConvTranspose1d(input_shape=signal.shape, out_channels=1, kernel_size=7, stride=2, padding='factor') >>> signal_rec = conv_t(signal) >>> signal_rec.shape torch.Size([1, 231])
>>> signal = torch.rand([1,115]) #[batch, time] >>> conv_t = ConvTranspose1d(input_shape=signal.shape, out_channels=1, kernel_size=3, stride=2, padding=10) >>> signal_rec = conv_t(signal) >>> signal_rec.shape torch.Size([1, 211])
- class speechbrain.nnet.CNN.DepthwiseSeparableConv1d(out_channels, kernel_size, input_shape, stride=1, dilation=1, padding='same', bias=True)[source]
基础:
Module该类实现了深度可分离的一维卷积。
首先,对输入应用通道卷积 然后,使用点卷积将输入投影到输出
- Parameters:
out_channels (int) – 这是输出通道的数量。
kernel_size (int) – 卷积滤波器的核大小。
input_shape (tuple) – 输入的预期形状。
stride (int) – 卷积滤波器的步长因子。当步长因子大于1时,会进行时间上的降采样。
dilation (int) – 卷积滤波器的扩张因子。
padding (str) – (same, valid, causal). 如果为“valid”,则不进行填充。 如果为“same”且步幅为1,输出形状与输入形状相同。 “causal”会导致因果(扩张)卷积。
bias (bool) – 如果为True,则采用加法偏置b。
Example
>>> inp = torch.randn([8, 120, 40]) >>> conv = DepthwiseSeparableConv1d(256, 3, input_shape=inp.shape) >>> out = conv(inp) >>> out.shape torch.Size([8, 120, 256])
- class speechbrain.nnet.CNN.DepthwiseSeparableConv2d(out_channels, kernel_size, input_shape, stride=(1, 1), dilation=(1, 1), padding='same', bias=True)[source]
基础:
Module该类实现了深度可分离的2D卷积。
首先,对输入应用通道卷积 然后,使用点卷积将输入投影到输出
- Parameters:
out_channels (int) – 这是输出通道的数量。
kernel_size (int) – 卷积滤波器的核大小。
input_shape (tuple) – 输入张量的预期形状。
stride (int) – 卷积滤波器的步长因子。当步长因子大于1时,会进行时间上的降采样。
dilation (int) – 卷积滤波器的扩张因子。
padding (str) – (same, valid, causal). 如果为“valid”,则不进行填充。 如果为“same”且步幅为1,输出形状与输入形状相同。 “causal”会导致因果(扩张)卷积。
bias (bool) – 如果为True,则采用加法偏置b。
Example
>>> inp = torch.randn([8, 120, 40, 1]) >>> conv = DepthwiseSeparableConv2d(256, (3, 3), input_shape=inp.shape) >>> out = conv(inp) >>> out.shape torch.Size([8, 120, 40, 256])
- class speechbrain.nnet.CNN.GaborConv1d(out_channels, kernel_size, stride, input_shape=None, in_channels=None, padding='same', padding_mode='constant', sample_rate=16000, min_freq=60.0, max_freq=None, n_fft=512, normalize_energy=False, bias=False, sort_filters=False, use_legacy_complex=False, skip_transpose=False)[source]
基础:
Module该类实现了来自
Neil Zeghidour, Olivier Teboul, F{‘e}lix de Chaumont Quitry & Marco Tagliasacchi, “LEAF: 一个可学习的音频分类前端”, 在ICLR 2021的会议论文中 (https://arxiv.org/abs/2101.08596)
- Parameters:
out_channels (int) – 这是输出通道的数量。
kernel_size (int) – 卷积滤波器的核大小。
stride (int) – 卷积滤波器的步长因子。当步长因子大于1时,会进行时间上的降采样。
input_shape (tuple) – 输入的预期形状。
in_channels (int) – 输入中预期的通道数。
padding (str) – (same, valid)。如果为“valid”,则不进行填充。 如果为“same”且步幅为1,输出形状与输入形状相同。
padding_mode (str) – 此标志指定填充的类型。有关更多信息,请参阅 torch.nn 文档。
sample_rate (int,) – 输入信号的采样率。它仅用于sinc_conv。
min_freq (float) – 滤波器的最低可能频率(以Hz为单位)
max_freq (float) – 过滤器的最高可能频率(以Hz为单位)
n_fft (int) – 用于初始化的FFT bin数量
normalize_energy (bool) – 是否在初始化时归一化能量。默认值为 False
bias (bool) – 如果为True,则采用加法偏置b。
sort_filters (bool) – 是否按中心频率对过滤器进行排序。默认值为 False
use_legacy_complex (bool) – 如果为False,则使用torch.complex64数据类型进行Gabor脉冲响应 如果为True,则在两个实值张量上进行计算
skip_transpose (bool) – 如果为False,使用speechbrain的批次 x 时间 x 通道约定。 如果为True,使用批次 x 通道 x 时间约定。
Example
>>> inp_tensor = torch.rand([10, 8000]) >>> # 401 corresponds to a window of 25 ms at 16000 kHz >>> gabor_conv = GaborConv1d( ... 40, kernel_size=401, stride=1, in_channels=1 ... ) >>> # >>> out_tensor = gabor_conv(inp_tensor) >>> out_tensor.shape torch.Size([10, 8000, 40])
- speechbrain.nnet.CNN.get_padding_elem(L_in: int, stride: int, kernel_size: int, dilation: int)[source]
此函数计算用于零填充的元素数量。