因此,大多数 CNN 指南将一维卷积解释为一系列 1D 内核与您的输入序列进行卷积(如传统的 FIR 滤波器)。但是,据我所知, conv1d 的默认设置在每个输出的所有通道上实现卷积(本质上是 2D 卷积)。如果需要传统的 FIR 滤波器实现,则应指定 groups=in_channels。
检查权重似乎可以验证这一点:
from torch import nn
C1 = nn.Conv1d(in_channels=3, out_channels=6, kernel_size=7)
C2 = nn.Conv1d(in_channels=3, out_channels=6, kernel_size=7,groups=3)
C3 = nn.Conv2d(in_channels=3, out_channels=6, kernel_size=7)
C4 = nn.Conv2d(in_channels=3, out_channels=6, kernel_size=7, groups=3)
print(C1.weight.shape, '<-- 6 filters which convolve across two dimensions')
print(C2.weight.shape, '<-- 6 filters which convolve across one dimensions')
print(C3.weight.shape, '<-- 6 filters which convolve across three dimensions')
print(C4.weight.shape, '<-- 6 filters which convolve across two dimensions')
提供以下输出:
torch.Size([6, 3, 7]) <-- 6 filters which convolve across two dimensions
torch.Size([6, 1, 7]) <-- 6 filters which convolve across one dimensions
torch.Size([6, 3, 7, 7]) <-- 6 filters which convolve across three dimensions
torch.Size([6, 1, 7, 7]) <-- 6 filters which convolve across two dimensions
我在这个观察中错了吗?
如果 a 是正确的,我相信 conv1d 的命名相当混乱,因为它暗示 1d 卷积。