理解在 Torch 中的时间卷积

我试图通过 Torch 参数化一个 1D 卷积神经网络。

假设我有一个名为 data 的张量,它的维度为 10 x 512,其中有 10 行和 512 列。因此,我想要实现一个由单个 TemporalConvolution 层、ReLU 层和 TemporalMaxPooling 层组成的三层堆叠。我的分类问题是二元的,并且有一个相应的 labels 张量,它是 10 x 1 的。假设已经编写了一个 feval 来迭代遍历 datalabels 中的每个 row

因此,问题就是构建一个能够将 512 列映射到 1 列的网络

改编自 documentation:

...
model = nn.Sequential()
model:add(nn.TemporalConvolution(inputFrameSize, outputFrameSize, kW, [dW]))
model:add(nn.ReLU())
model:add(nn.TemporalMaxPooling(kW2, [dW2])
...
criterion = nn.BCECriterion()
...

我将其参数化如下,但是以下内容不起作用: /

TemporalConvolution(512,1,3,1)
ReLU())
TemporalMaxPooling(3, 1)

它会抛出 expected 2D or 3D(batch mode) tensor 错误。因此,在将其传递给网络之前,我尝试对 data 进行重塑:

data = data:resize(1, 100, 512)

但是这会抛出 invalid input frame size 错误。


我可以看到错误涉及到进入卷积网络的数据的 形状,当然也涉及 参数化。我进一步受到 [这里的帖子](https://groups.google.com/forum/#!topic/torch7/aBYS4YVBkxQ)的困扰,这似乎表明 TemporalConvolutioninputFrameSize 应该设置为 10 而不是 512

任何指导将不胜感激,以帮助构建一个 1D 卷积网络。


P.S. 我已经使用了 logisticRegression 模型测试了脚本,并且运行良好,因此问题仅仅出在卷积网络的架构 / 进入它的数据的形状上。

点赞
用户6564477
用户6564477

我想你误解了 inputFrameSize 的意义,它并不是你输入的 seqlen,而是 n_channels(例如,在二维卷积中,对于 512 * 512 的 RGB 图像,inputFrameSize 应该是 3 而不是 512)。

2016-11-30 12:58:42