Conv1d¶
- class Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, conv_mode='cross_correlation', compute_mode='default', padding_mode='zeros', **kwargs)[源代码]¶
对输入张量进行一维卷积
例如, 给定输入的大小 \((N, C_{\text{in}}, H)\), 该层会通过下述过程生成大小为 \((N, C_{\text{out}}, H_{\text{out}})\) 的输出:
\[\text{out}(N_i, C_{\text{out}_j}) = \text{bias}(C_{\text{out}_j}) + \sum_{k = 0}^{C_{\text{in}} - 1} \text{weight}(C_{\text{out}_j}, k) \star \text{input}(N_i, k)\]其中 \(\star\) 是有效的1D互相关运算; \(N\) 是批大小; \(C\) 表示通道数; \(H\) 是以像素为单位输入平面的高度。
当 groups == in_channels 且 out_channels == K * in_channels ,其中 K 是正整数,该操作也被称为深度方向卷积(depthwise convolution)。
换言之, 对于大小为 \((N, C_{in}, H_{in})\) 的 depthwise 卷积,可以通过参数构造:math:(in_channels=C_{in}, out_channels=C_{in} times K, …, groups=C_{in}).
- 参数
in_channels (
int
) – 输入数据中的通道数。out_channels (
int
) – 输出数据中的通道数。kernel_size (
int
) – 空间维度上的权重大小。stride (
int
) – 1D 卷积算子的步幅。padding (
int
) – 在空间维度两侧进行填充的宽度。默认值:0dilation (
int
) – 一维卷积运算的空洞(dilation)。默认:1groups (
int
) – 在进行“分组卷积”时,对输入输出通道的分组数量。当groups
不是 1 时,in_channels
和out_channels
必须可被groups
整除,卷积核权重的形状将会是(groups, out_channel // groups, in_channels // groups, kernel_size)
。默认值:1bias (
bool
) – 是否将偏置(bias)加入卷积的结果中。默认:Trueconv_mode (
str
) – 支持 cross_correlation. 默认: cross_correlationcompute_mode (
str
) – 当设置 “default” 时, 不会对中间结果的精度有特殊要求。当设置 “float32” 时, “float32” 将被用作中间结果的累加器, 但是只有当输入和输出的dtype是float16时有效。padding_mode (
str
) – “zeros”, “reflect” 或者 “replicate”。默认值:”zeros”。更多信息参考Pad
。
注解
weight
的shape通常是(out_channels, in_channels, kernel_size)
, 如果 groups 不是 1, shape 将变为(groups, out_channels // groups, in_channels // groups, kernel_size)
bias
通常shape为(1, out_channels, 1)
实际案例
>>> import numpy as np >>> m = M.Conv1d(in_channels=3, out_channels=1, kernel_size=3) >>> inp = mge.tensor(np.arange(0, 24).astype("float32").reshape(2, 3, 4)) >>> oup = m(inp) >>> oup.numpy().shape (2, 1, 2)