错误无效arguminterror的屏蔽层引线:Keras中的[128,0]与[128,6]形状不兼容

错误无效arguminterror的屏蔽层引线:Keras中的[128,0]与[128,6]形状不兼容,keras,recurrent-neural-network,masking,ner,crf,Keras,Recurrent Neural Network,Masking,Ner,Crf,我的模型如下 model = Sequential() model.add(Embedding(input_dim=wordEmbeddings.shape[0]+2, output_dim=wordEmbeddings.shape[1], input_length=n_in, trainable=False)) model.add(Masking(mask_value=0.)) model.add(Bidirectional(LSTM(200, return_sequences

我的模型如下

model = Sequential()
model.add(Embedding(input_dim=wordEmbeddings.shape[0]+2, output_dim=wordEmbeddings.shape[1], input_length=n_in,  trainable=False))       
model.add(Masking(mask_value=0.))
model.add(Bidirectional(LSTM(200, return_sequences=True, recurrent_dropout=0.5, dropout=0.5, name='bilstm1')))
model.add(TimeDistributed(Dense(100, activation="relu")))
crf = CRF(n_out,sparse_target=True)
model.add(crf)
模型摘要

当我使用这个模型而不使用遮罩层时,这个模型工作得很好。但损失是负面的。所以作为一个解决方案,我尝试添加掩蔽,然后我得到这个错误,说

大宗报价


根据您的描述,第一件事是您应该使用input_dim=wordEmbeddings.shape[0]+1而不是+2,在文档中它说您应该使用max_index+2,但是max_index=shape[0]-1,所以您应该使用+1而不是+2。然后,您只需将所有0传递到wordEmbeddings权重的第一行,并将预先训练好的嵌入传递到其余行。

根据您的描述,第一件事是您应该使用input\u dim=wordEmbeddings.shape[0]+1而不是+2,在文档中,您应该使用max\u index+2,但max\u index=shape[0]-1,所以你应该使用+1而不是+2。然后将所有0传递给第一行wordEmbeddings权重,并将预先训练好的嵌入传递给其余部分。

我也尝试过。但是没有起作用。还有其他建议吗?当我预测测试数据时,我得到了很好的结果,即使损失是负数。我还需要使损失为正吗?损失可以为负,这不是问题,特别是对于概率层,损失可以为负对数概率。我建议您制作一个玩具数据集示例,并提供一个我可以复制的示例。在您提供的代码中,编译部分也丢失了,因此请提供一个可运行的示例。非常感谢,我会检查。我也尝试过。但是没有起作用。还有其他建议吗?当我预测测试数据时,我得到了很好的结果,即使损失是负数。我还需要使损失为正吗?损失可以为负,这不是问题,特别是对于概率层,损失可以为负对数概率。我建议您制作一个玩具数据集示例,并提供一个我可以复制的示例。在您提供的代码中,编译部分也丢失了,因此请提供一个可运行的示例。非常感谢,我将检查。