nn.Conv1d()源代码翻译与解读:
源链接:https://pytorch.org/docs/stable/generated/torch.nn.Conv1d.html?highlight=conv1d#torch.nn.Conv1d
torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0,
dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)
对由多个输入平面组成的输入信号应用一维卷积。
在最简单的情况下,输入尺寸(
N
N
N,
C
i
n
C_{in}
Cin,
L
L
L),输出尺寸(
N
N
N,
C
i
n
C_{in}
Cin,
L
L
L),表达式如下:
其中星号表示valid coss-correlation运算符,N表示batch size,C表示channel的数目,L表示信号序列的长度。
这个模块支持TensorFloat32。
stride | 控制cross-correlation的步长(stride),一个数字或者one-element元组 |
padding | 控制应用于输入的填充量(padding),它可以是字符串{‘valid’,‘same’},也可以是一个int元组,给出应用于两边的隐式填充的数量 |
dilation | 控制内核点之间的间距,也被称为a-trous算法,这很难描述,这个链接(打不开也不着急,我后面会详细读过这篇文章,将重要内容写到博客里。)解释了膨胀的作用。 |
groups | 控制输入和输出之间的连接,in_channels和out_channels必须都能被groups整除。 |
举例子:
- groups=1,all inputs are convolved to all outputs。
- groups=2,该操作等价于有两个并行的conv层,每个层看到一半的输入通道,产生一半的输出通道,然后两者连接起来。
- groups=in_channels,each input channel is convolved with its own set of filters(of size o u t _ c h a n n e l s / i n _ c h a n n e l s out\_channels/in\_channels out_channels/in_channels)
图解计算过程
假设输入特征维度是【B,C,T】,B=4,C=3,T=4
要求输出通道数量为3
黄色蓝色红色三个kernel构成Filter,在时间维度上移动。