Keras:嵌入句子数组作为输入
Keras: Embadding on Sentences Array as Input
我是keras的新手。我尝试创建一个以嵌入层作为输入层的神经网络。据我目前的理解,结构如下所示:
model.add(Embedding(word_count,embedding_size,input_length=sentence_length).
这适用于标记句子的数据集。
现在我想更改数据集的结构。我将标记句子集(句子数组)。
据我所知,我不能再使用嵌入层作为输入层了。这是因为它需要一个句子作为输入,而不是一组句子。我可以改变一些东西,以便我仍然可以在我的模型中使用嵌入层,但将句子数组作为输入吗?
我的句子数组的数组长度始终相同,因为我的句子长度保持整个句子相同。
假设您有固定长度句子的数组,并且如您所述,所有数组中的句子数都相同。因此,如果将所有数据存储在一个张量中,它将具有 (num_of_arrays, num_of_sentences, length_of_sentence)
的形状。每个句子数组都有自己的标签。所以基本上你的模型应该将一组句子作为输入并预测它的标签。现在要使用嵌入层,我们首先重塑数据,然后将其传递给嵌入层,然后(如有必要)我们将其重新整形。这是一个例子:
from keras import models, layers
# the following numbers are just for demonstration
vocab_size = 1000
embed_dim = 50
num_arrays = 100
num_sentences = 200
len_sentence = 300
model = models.Sequential()
model.add(layers.Reshape((num_sentences*len_sentence,), input_shape=(num_sentences, len_sentence)))
model.add(layers.Embedding(vocab_size, embed_dim, input_length=num_sentences*len_sentence))
model.add(layers.Reshape((num_sentences, len_sentence, embed_dim)))
# add whatever layers as you wish to complete your model
model.summary()
这是模型摘要:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
reshape_1 (Reshape) (None, 60000) 0
_________________________________________________________________
embedding_1 (Embedding) (None, 60000, 50) 50000
_________________________________________________________________
reshape_2 (Reshape) (None, 200, 300, 50) 0
=================================================================
Total params: 50,000
Trainable params: 50,000
Non-trainable params: 0
_________________________________________________________________
如您所见,数组中的每个句子现在都由形状为 (sentence_length, embed_dim)
的矩阵表示。现在您可以添加更多层来完成您的模型。我不确定这是否是您要求的。如果您还有其他意思,请在评论中告诉我。
我是keras的新手。我尝试创建一个以嵌入层作为输入层的神经网络。据我目前的理解,结构如下所示:
model.add(Embedding(word_count,embedding_size,input_length=sentence_length).
这适用于标记句子的数据集。
现在我想更改数据集的结构。我将标记句子集(句子数组)。
据我所知,我不能再使用嵌入层作为输入层了。这是因为它需要一个句子作为输入,而不是一组句子。我可以改变一些东西,以便我仍然可以在我的模型中使用嵌入层,但将句子数组作为输入吗?
我的句子数组的数组长度始终相同,因为我的句子长度保持整个句子相同。
假设您有固定长度句子的数组,并且如您所述,所有数组中的句子数都相同。因此,如果将所有数据存储在一个张量中,它将具有 (num_of_arrays, num_of_sentences, length_of_sentence)
的形状。每个句子数组都有自己的标签。所以基本上你的模型应该将一组句子作为输入并预测它的标签。现在要使用嵌入层,我们首先重塑数据,然后将其传递给嵌入层,然后(如有必要)我们将其重新整形。这是一个例子:
from keras import models, layers
# the following numbers are just for demonstration
vocab_size = 1000
embed_dim = 50
num_arrays = 100
num_sentences = 200
len_sentence = 300
model = models.Sequential()
model.add(layers.Reshape((num_sentences*len_sentence,), input_shape=(num_sentences, len_sentence)))
model.add(layers.Embedding(vocab_size, embed_dim, input_length=num_sentences*len_sentence))
model.add(layers.Reshape((num_sentences, len_sentence, embed_dim)))
# add whatever layers as you wish to complete your model
model.summary()
这是模型摘要:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
reshape_1 (Reshape) (None, 60000) 0
_________________________________________________________________
embedding_1 (Embedding) (None, 60000, 50) 50000
_________________________________________________________________
reshape_2 (Reshape) (None, 200, 300, 50) 0
=================================================================
Total params: 50,000
Trainable params: 50,000
Non-trainable params: 0
_________________________________________________________________
如您所见,数组中的每个句子现在都由形状为 (sentence_length, embed_dim)
的矩阵表示。现在您可以添加更多层来完成您的模型。我不确定这是否是您要求的。如果您还有其他意思,请在评论中告诉我。