我理解卷积滤波器,当应用于图像时(例如,一个224x224的图像,有3个内通道,由56个5x5 conv的总滤波器转换为一个224x224的图像,有56个外通道)。关键是有56个不同的滤镜,每个滤镜都有5x5x3的权重,最终产生输出图像224x224,56(逗号后的术语是输出通道)。
但我似乎不明白如何 conv1d
过滤器在seq2seq模型中适用于字符序列。我正在看的一个模型 https:/arxiv.orgpdf1712.05884.pdf 有一个"后网层由512个形状为5×1 "的滤波器组成。 在80-d的频谱图帧上进行操作(意味着帧中有80个不同的浮动值),过滤的结果是一个512-d的帧。
我不明白的是 in_channels, out_channels
意味着在pytorch conv1d的定义,因为在图像中,我可以很容易地理解什么in-channelout-channels的意思,但对于80-float值帧的序列,我失去了。它们在seq2seq模型的上下文中是什么意思?
在80个浮点值上用512、5x1滤波器如何产生512个浮点值呢**。
5x1过滤器在80个浮点值上操作时,是不是只会产生80个浮点值(通过在这80个浮点值中每次只取5个连续值)?这512个滤波器总共有多少个权重呢**?
在pytorch中打印时,该层显示为:
(conv): Conv1d(80, 512, kernel_size=(5,), stride=(1,), padding=(2,))
而这层中的参数显示为:。
postnet.convolutions.0.0.conv.weight : 512x80x5 = 204800
基本上 Conv1d
犹如 Conv2d
但不是在图像上 "滑动 "矩形窗口(如 3x3
对于 kernel_size=3
)你 "滑动 "过的矢量(比如说长度为 256
)与 kernel
偌大 3
). 这是对 in_channels
和 out_channels
与...相当 1
这是基本的。
下面你可以看到 Conv1d
滑过 3
in_channels (x-axis
, y-axis
, z-axis
)跨越 seconds
的步骤。
你可以给内核增加深度(就像你给 2D
卷积 5x5x3
立方体),这将是 5x3
也是(5
是内核大小。3
是多少 in_channels
). 现在可能有 out_channels
的方块(例如 56
out_channels),所以最终产生的序列是 56 x sequence_length
.
[......]后网层由512个形状为5×1的滤波器组成",对80-d的谱图帧进行操作(指帧中有80个不同的浮动值),滤波器的结果是512-d的帧。
所以你的输入是 80d
(而不是 3
像上面的轴)。) kernel_size
是相同的(5
)和 out_channels
是 512
. 所以输入的内容可以是这样的。[64, 80, 256]
(对于 [batch, in_channels, length]
),产出将是 [64, 512, 256]
(提供的填充物为 3
两边都用了).我不明白在pytorch conv1d定义中in_channels, out_channels是什么意思。
我不明白在pytorch conv1d定义中in_channels,out_channels是什么意思,因为在图像中我很容易理解in-channelsout-channels是什么意思,但是对于80-float值帧的序列我就不知道了。它们在seq2seq模型的上下文中是什么意思呢?
我想上面已经回答过了。主要的是。序列不是80个浮点值! 序列可以是任何长度的(就像图像传递给卷积时可以是任何大小一样),这里的 in_channels
是 80
.
如何对80个浮点数进行512,5x1滤波,产生512个浮点数?
512 x sequence_length
的值是如何产生的?80 x sequence_length
输入。
这个层中的权重是不是应该是512*5*1,因为它只有512个滤波器,每个都是5x1?
在 PyTorch 中,您的情况下,权重的形状应该是 torch.Size([512, 80, 5])
. 他们可能是 torch.Size([512, 1, 5])
如果你有一个输入通道,但在这种情况下,有一个输入通道。80
其中。