12

我正在尝试使用 CNN实现文本分类模型。据我所知,对于文本数据,我们应该使用 1d Convolutions。我在 pytorch 中看到了一个使用 Conv2d 的示例,但我想知道如何将 Conv1d 应用于文本?或者,实际上不可能?

这是我的模型场景:

Number of in-channels: 1, Number of out-channels: 128 
Kernel size : 3 (only want to consider trigrams)
Batch size : 16

因此,我将提供形状张量 <16, 1, 28, 300>,其中 28 是句子的长度。我想使用 Conv1d,它将为我提供 128 个长度为 26 的特征图(因为我正在考虑三元组)。

我不确定如何为此设置定义 nn.Conv1d() 。我可以使用 Conv2d 但想知道是否可以使用 Conv1d 实现相同的效果?

4

2 回答 2

16

这个将 Conv1d 和 Pool1d 层放入 RNN 的示例解决了我的问题。

因此,我需要在使用时将嵌入维度视为通道内的数量,nn.Conv1d如下所示。

m = nn.Conv1d(200, 10, 2) # in-channels = 200, out-channels = 10
input = Variable(torch.randn(10, 200, 5)) # 200 = embedding dim, 5 = seq length
feature_maps = m(input)
print(feature_maps.size()) # feature_maps size = 10,10,4 
于 2017-06-02T02:45:11.840 回答
2

虽然我不使用文本数据,但当前形式的输入张量只能使用 conv2d。使用 conv1d 的一种可能方法是将嵌入连接到一个形状的张量中,例如 <16,1,28*300>。您可以使用viewIn pytorch 重塑输入。

于 2017-05-28T23:37:35.733 回答