简体   繁体   English

Keras 嵌入中的不兼容层错误

[英]Keras Incompatible layer error in Embedding

I am training a model to get the embedding of texts using Keras but running into dimension incompatibility issue.我正在训练 model 以使用 Keras 嵌入文本,但遇到维度不兼容问题。 I have tried the things suggested in different posts but havent been able to resolve the error.我尝试了不同帖子中建议的方法,但未能解决错误。 Below is my code-下面是我的代码-

text_embedding_size = 30
text_tknzr_vocab_size = 700
text_tknzr_max_length = 557

text_embedder_model = Sequential()
text_embedder_model.add(Embedding(input_dim=700, output_dim=30, input_length=557, name="text_embedding"))
text_embedder_model.add(Flatten())
text_embedder_model.add(Dense(15, activation="relu"))
text_embedder_model.add(Dense(2, activation='sigmoid'))

text_embedder_model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=[tf.keras.metrics.KLDivergence()])
print(text_embedder_model.summary())

The model summary is model总结为

Model: "sequential_8"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
text_embedding (Embedding)   (None, 557, 30)           21000     
_________________________________________________________________
flatten_7 (Flatten)          (None, 16710)             0         
_________________________________________________________________
dense_11 (Dense)             (None, 15)                250665    
_________________________________________________________________
dense_12 (Dense)             (None, 3)                 48        
=================================================================
Total params: 271,713
Trainable params: 271,713
Non-trainable params: 0

On running the below line...在运行下面的行......

text_embedder_model.fit(x = tr_padded_docs, y=dummy_y_tr, epochs = 10, batch_size = 512)

I recieve the following error我收到以下错误

ValueError: Input 0 of layer dense_11 is incompatible with the layer: expected axis -1 of input shape to have value 16710 but received input with shape [None, 21000] ValueError:层 dense_11 的输入 0 与层不兼容:输入形状的预期轴 -1 的值为 16710 但收到的输入形状为 [None, 21000]

I have looked up a few posts and a tutorials but cant locate the error.我已经查找了一些帖子和教程,但找不到错误。

I have replicated the same model with imdb_reviews dataset.我用imdb_reviews数据集复制了相同的 model。 You can modify the sentence length while padding as below:您可以在填充时修改句子长度,如下所示:

vocab_size = 700
embedding_dim = 30
max_length = 557
trunc_type='post'
oov_tok = "<OOV>"

from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences

tokenizer = Tokenizer(num_words = vocab_size, oov_token=oov_tok)
tokenizer.fit_on_texts(training_sentences)
sequences = tokenizer.texts_to_sequences(training_sentences)

# This will change sentence length as defined while padding
padded = pad_sequences(sequences,maxlen=max_length, truncating=trunc_type)

testing_sequences = tokenizer.texts_to_sequences(testing_sentences)
testing_padded = pad_sequences(testing_sequences,maxlen=max_length)

padded.shape, testing_padded.shape

Output: Output:

((25000, 557), (25000, 557))

Also change the unit=1 in final Dense layer as you are using Sigmoid function which is used for binary classification along with by changing the loss function to 'binary_crossentropy'当您使用用于binary classificationSigmoid function以及将损失 function 更改为'binary_crossentropy'时,还要更改最终Dense layer中的unit=1

text_embedder_model.add(Dense(1, activation='sigmoid'))

text_embedder_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=[tf.keras.metrics.KLDivergence()])

print(text_embedder_model.summary())

Output: Output:

Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 text_embedding (Embedding)  (None, 557, 30)           21000     
                                                                 
 flatten (Flatten)           (None, 16710)             0         
                                                                 
 dense (Dense)               (None, 15)                250665    
                                                                 
 dense_1 (Dense)             (None, 1)                 16        
                                                                 
=================================================================
Total params: 271,681
Trainable params: 271,681
Non-trainable params: 0
_________________________________________________________________
None

Now you can train the model using padded dataset:现在您可以使用填充数据集训练 model:

text_embedder_model.fit(padded, training_labels_final, epochs=10, batch_size=516, validation_data=(testing_padded, testing_labels_final))

Output: Output:

Epoch 1/10
49/49 [==============================] - 5s 27ms/step - loss: 0.6748 - kullback_leibler_divergence: 0.3321 - val_loss: 0.6284 - val_kullback_leibler_divergence: 0.2766
Epoch 2/10
49/49 [==============================] - 1s 20ms/step - loss: 0.5010 - kullback_leibler_divergence: 0.2490 - val_loss: 0.4044 - val_kullback_leibler_divergence: 0.1922
Epoch 3/10
49/49 [==============================] - 1s 20ms/step - loss: 0.3582 - kullback_leibler_divergence: 0.1780 - val_loss: 0.3638 - val_kullback_leibler_divergence: 0.2079
Epoch 4/10
49/49 [==============================] - 1s 17ms/step - loss: 0.3142 - kullback_leibler_divergence: 0.1572 - val_loss: 0.3604 - val_kullback_leibler_divergence: 0.1282
Epoch 5/10
49/49 [==============================] - 1s 18ms/step - loss: 0.2786 - kullback_leibler_divergence: 0.1410 - val_loss: 0.3489 - val_kullback_leibler_divergence: 0.1564
Epoch 6/10
49/49 [==============================] - 1s 18ms/step - loss: 0.2445 - kullback_leibler_divergence: 0.1225 - val_loss: 0.3518 - val_kullback_leibler_divergence: 0.1744
Epoch 7/10
49/49 [==============================] - 1s 19ms/step - loss: 0.2131 - kullback_leibler_divergence: 0.1069 - val_loss: 0.3653 - val_kullback_leibler_divergence: 0.1625
Epoch 8/10
49/49 [==============================] - 1s 18ms/step - loss: 0.1841 - kullback_leibler_divergence: 0.0924 - val_loss: 0.3883 - val_kullback_leibler_divergence: 0.1442
Epoch 9/10
49/49 [==============================] - 1s 19ms/step - loss: 0.1581 - kullback_leibler_divergence: 0.0792 - val_loss: 0.3979 - val_kullback_leibler_divergence: 0.1878
Epoch 10/10
49/49 [==============================] - 1s 15ms/step - loss: 0.1307 - kullback_leibler_divergence: 0.0657 - val_loss: 0.4297 - val_kullback_leibler_divergence: 0.1623
<keras.callbacks.History at 0x7f11f0149b10>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM