PyTorch 中文本输入的卷积神经网络

Posted

技术标签:

【中文标题】PyTorch 中文本输入的卷积神经网络【英文标题】:Convolutional NN for text input in PyTorch 【发布时间】:2017-10-28 00:17:26 【问题描述】:

我正在尝试使用 CNN 实现 text classification model。据我所知,对于文本数据,我们应该使用 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

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

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

【问题讨论】:

300 哪里来的? 300 是嵌入维度。 澄清瓦西的回答:nn.Conv1d(300, 128, 2)。 i/p = 28 个 300 个维度的单词,每批 16 个,格式为 ; o/p = 128 个维度的 26 个单词,每批 16 个,格式为:。此格式适用于 PyTorch。格式可能从 FW 到 FW 略有不同 【参考方案1】:

这个example 将 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 

【讨论】:

感谢您分享解决方案!我一直在尝试实现相同的网络,但只找到了使用 2D 卷积的示例。这个例子正是我想要的!【参考方案2】:

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

【讨论】:

以上是关于PyTorch 中文本输入的卷积神经网络的主要内容,如果未能解决你的问题,请参考以下文章

Pytorch中自定义神经网络卷积核权重

干货使用Pytorch实现卷积神经网络

九大卷积神经网络 ( CNN ) 的 PyTorch 实现

图卷积神经网络(GCN)综述与实现(PyTorch版)

PyTorch卷积神经网络模型初建

深度神经网络中的卷积