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 中文本输入的卷积神经网络的主要内容,如果未能解决你的问题,请参考以下文章