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', **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_channelsout_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) – 输入数据空域维度两侧的填充(padding)大小。仅支持填充0值。默认:0

  • dilation (int) – 一维卷积运算的空洞(dilation)。默认:1

  • groups (int) – 在进行“分组卷积”时,对输入输出通道的分组数量。当 groups 不是 1 时,in_channelsout_channels 必须可被 groups 整除,卷积核权重的形状将会是 (groups, out_channel // groups, in_channels // groups, kernel_size)。默认值:1

  • bias (bool) – 是否将偏置(bias)加入卷积的结果中。默认:True

  • conv_mode (str) – 支持 cross_correlation. 默认: cross_correlation

  • compute_mode (str) – 当设置 “default” 时, 不会对中间结果的精度有特殊要求。当设置 “float32” 时, “float32” 将被用作中间结果的累加器, 但是只有当输入和输出的dtype是float16时有效。

注解

  • 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
import megengine as mge
import megengine.module as M

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)
print(oup.numpy().shape)

输出:

(2, 1, 2)