ValueError:层双向输入 0 与层不兼容:预期 ndim=3,发现 ndim=4。已收到完整形状:[无,50、200、200]

问题描述 投票:0回答:0

我想知道是否有人可以帮助我理解我的维度不匹配。我正在训练一个 NER 模型,其中输入是句子,填充到 50 个单词长度,其中每个单词都有 GloVe 200 表示。目标是 7 类的单热编码。

X_train 形状为 (9358, 50, 200) y_train 的形状是 (9358, 50, 7)

在切换到词嵌入之前,我的输入只是来自词汇表的 word2idx 表示,因此 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 的维度

python machine-learning keras deep-learning
© www.soinside.com 2019 - 2024. All rights reserved.