我使用keras创建了一个深度学习模型。我正在针对不同长度的评论训练模型。我对输入数据进行了预处理,并将其填充为相等的长度。在预测时,如果我给出的输入的长度大于训练输入的长度,则模型将失败。我该怎么办?请也分享一些示例,这将非常有帮助。
latent_dim = 1024
inpt = Input(shape=(max_len,)) ### max_len is the final length
emb_layer = Embedding(vocabulary_size, 100, weights=[embedding_matrix], trainable = False)(inpt)
bdlstm1 = Bidirectional(LSTM(64, return_sequences = True))(emb_layer)
dns2 = Dense(no_labels, activation='softmax')(bdlstm1)
model = Model(inpt, dns2)
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x,y)
答案 0 :(得分:0)
我认为您会在这里找到满意的答案:
https://ai.stackexchange.com/questions/2008/how-can-neural-networks-deal-with-varying-input-sizes
最好(也是唯一简单)的方法是使用RNN。
祝你好运!
答案 1 :(得分:0)
从理论上讲,限制是由深网末端的一个或多个完全连接的层提供的,它的所有单元都需要喂食。
由于此限制,我们必须正常地确定长度一个先验(NLP中的最大单词数)。正如我在您的代码中看到的那样,您使用的是100大小的嵌入层,因此对于每个未达到最小大小的句子,您都必须为每个丢失的单词添加100个零。
对于较长的句子(如您所评论的情况),您可以执行以下操作,但是您应该知道自己会丢失信息,因为超过的单词不会被预测。
if max_len < len(sentence.split()):
# add zero padding until reach max_len
else:
inputSentence = " ".join(sentence.split()[:max_len]) # no. words = max_len
答案 2 :(得分:0)
您使用的LSTM是一种RNN,它需要最大时间步长,因此您必须限制文本的上限。
如果新输入的长度超过max_len