keras ValueError:双向图层的输入0与图层不兼容:预期ndim=3,发现ndim=4,接收到完整形状:【无、50、200、200】

zphenhs4  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(184)

我想知道是否有人可以帮助我理解我的维度不匹配。我正在训练NER模型,其中输入是句子,填充到50个单词长度,其中每个单词都是GloVe 200表示。目标是7个类的one-hot编码。
X_train形状为(9358,50,200)y_train形状为(9358,50,7)
在切换到词嵌入之前,我的输入只是来自vocab的word 2 idx表示,因此X的维度只有(9358,50),我的模型工作得很好。

def fit(x_train, y_train, num_words, tags, embeddings_matrix):
    max_length = 50
    embedding_dim = 200
    
    model = Sequential()
    model.add(Embedding(input_dim=num_words, output_dim=200, 
                    input_length=max_length, weights=[embeddings_matrix], mask_zero=True))
    model.add(Bidirectional(LSTM(units=embedding_dim, return_sequences=True, 
                             recurrent_dropout=0.01)))
    model.add(TimeDistributed(Dense(len(tags))))
    model.compile(optimizer='adam')
    model.summary()

    print(x_train.shape)
    print(y_train.shape)

    history = model.fit(
        x_train, 
        y_train,
        validation_split = 0.2,
        batch_size = 64,
        epochs = 20,
        verbose = 1
    )

    return model

我已经尝试了一些不同的构造,比如设置Input(shape=(50,200,)),我传入put,但是没有任何成功。我只是很困惑为什么要通过嵌入层添加另一个长度为200的维度,这导致了所有的问题

7rtdyuoh

7rtdyuoh1#

既然你已经将输入编码到GloVe 200,那么为什么你需要Embedding层?我相信这就是增加额外维度的原因,这导致了错误。

相关问题