我有一个句子,我想使用神经网络“总结”或分类。
句子中的每个单词都由大小为16的向量表示。我想使用可变长度句子的1d卷积,然后进行分类。
当我使用 conv1d 时,我无法弄清楚如何一个接一个地输入单词并获得任何摘要向量。
layer_1 = Conv1d(input_channel, output_channel, kernel = 3, stride=2)
layer_2 = Conv1d(input_channel, output_channel, kernel = 3, stride=2) .. etc
问题是,如果循环抛出句子中的单词并生成张量,那么我无法向网络提供数据。
For example,
I am new to this. (5 words -- this is variable)
I -> [2, 1, .... 16 numbers]
am -> [5, 7, .... 16 numbers]
...
this -> [9, 1, .... 16 numbers]
由于长度是可变的,我(不知道)无法输入 Conv1d 层。如果我转置它并设置 input_channel = 8,它会起作用,但它失去了意义。
有什么帮助吗?预先感谢。
以下认知不起作用。
# input_data = torch.randn((batch_size, max_seq_length, embedding_dim))
# conv1d = nn.Conv1d(in_channels=embedding_dim, out_channels=num_filters, kernel_size=filter_size)
#================+++=#
batch_size = 1 # 1 Sentene at a time, or 8
max_seq_length = 12 # 12 words
embedding_dim = 4 # Vect size 4 for each word
num_filters = 1
filter_size = 3
input_data = torch.randn((batch_size, max_seq_length, embedding_dim))
conv1d = nn.Conv1d(in_channels=embedding_dim, out_channels=num_filters, kernel_size=filter_size)
follow these & let me know if you have any questions:
input_data = torch.randn((batch_size, max_seq_length, embedding_dim))
conv1d = nn.Conv1d(in_channels=embedding_dim, out_channels=num_filters, kernel_size=filter_size)
if input_data.size(1) < max_seq_length:
padding_size = max_seq_length - input_data.size(1)
input_data = torch.cat([input_data, torch.zeros(batch_size, padding_size, embedding_dim)], dim=1)
conv_output = conv1d(input_data.permute(0, 2, 1))
max_pooled = torch.max(conv_output, dim=2)[0]