PyTorch 中用于文本输入的卷积神经网络
Convolutional NN for text input in PyTorch
我正在尝试使用 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
因此,我将提供形状为 <16, 1, 28, 300> 的张量,其中 28 是句子的长度。我想使用 Conv1d,它会给我 128 个长度为 26 的特征图(因为我正在考虑三元组)。
我不确定如何为此设置定义 nn.Conv1d()。我可以使用 Conv2d,但想知道是否可以使用 Conv1d 实现同样的效果?
虽然我不处理文本数据,但当前形式的输入张量只能使用 conv2d。使用 conv1d 的一种可能方法是将嵌入连接成一个形状的张量,例如<16,1,28*300>。您可以在 pytorch 中使用 view
重塑输入。
将 Conv1d 和 Pool1d 层 example 放入 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
我正在尝试使用 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
因此,我将提供形状为 <16, 1, 28, 300> 的张量,其中 28 是句子的长度。我想使用 Conv1d,它会给我 128 个长度为 26 的特征图(因为我正在考虑三元组)。
我不确定如何为此设置定义 nn.Conv1d()。我可以使用 Conv2d,但想知道是否可以使用 Conv1d 实现同样的效果?
虽然我不处理文本数据,但当前形式的输入张量只能使用 conv2d。使用 conv1d 的一种可能方法是将嵌入连接成一个形状的张量,例如<16,1,28*300>。您可以在 pytorch 中使用 view
重塑输入。
将 Conv1d 和 Pool1d 层 example 放入 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