0

因此,大多数 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 卷积。

4

1 回答 1

0

有几点需要考虑:

1) Conv1d 运行一个具有一维(向量)内核的卷积。C1 和 C2 的内核大小为 (7)。

2) Conv2d 运行具有二维内核(矩阵)的卷积。C3 和 C4 的内核大小为 (7, 7)。

3)组是控制输入和输出通道之间连接的一种方式,如果您可以同时产生多个同时卷积。

更多信息在这里

于 2020-05-29T15:24:35.233 回答