【问题标题】:ValueError: Error when checking target: expected dense_3 to have shape (500, 4) but got array with shape (4, 2)ValueError: 检查目标时出错:预期dense_3 的形状为 (500, 4) 但得到的数组的形状为 (4, 2)
【发布时间】:2019-08-01 04:58:24
【问题描述】:

如何修复此错误?我尝试访问所有论坛以寻找解决此问题的答案。

这里我正在尝试使用 keras 执行多标签分类

from keras.preprocessing.text import Tokenizer
from keras.models import Sequential
from keras.layers import Dense
from keras.preprocessing.sequence import pad_sequences
from keras.layers import Input, Dense, Dropout, Embedding, LSTM, Flatten
from keras.models import Model
from keras.utils import to_categorical
from keras.callbacks import ModelCheckpoint

MAX_LENGTH = 500
tokenizer = Tokenizer()
tokenizer.fit_on_texts(df.overview.values)
post_seq = tokenizer.texts_to_sequences(df.overview.values)
post_seq_padded = pad_sequences(post_seq, maxlen=MAX_LENGTH)

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(post_seq_padded, train_encoded, test_size=0.3)
vocab_size = len(tokenizer.word_index) + 1
inputs = Input(shape=(MAX_LENGTH, ))
embedding_layer = Embedding(vocab_size, 128, input_length=MAX_LENGTH)(inputs)
x = Dense(64, input_shape=(None,), activation='relu')(embedding_layer)
predictions = Dense(num_classes, activation='softmax')(x)
model = Model(inputs=[inputs], outputs=predictions)
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['acc'])
model.summary()

filepath="weights.hdf5"
checkpointer = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')
history = model.fit(X_train, batch_size=64, y=to_categorical(y_train), verbose=1, validation_split=0.25, shuffle=True, epochs=10, callbacks=[checkpointer])

ValueError Traceback(最近一次调用)

<ipython-input-11-7fdc4bff9648> in <module>
 2 checkpointer = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')
3 history = model.fit(X_train, batch_size=64, y=to_categorical(y_train), verbose=1, validation_split=0.25,
**---->** 4 shuffle=True, epochs=10, callbacks=[checkpointer])

ValueError:检查目标时出错:预期dense_3 的形状为(500, 4),但得到的数组的形状为(4, 2)

我希望输出形状为 (500,3),但我得到的 (4,2) 不匹配以继续进行。

【问题讨论】:

标签: python tensorflow machine-learning keras deep-learning


【解决方案1】:

在将嵌入层的输出传递给密集层之前尝试将其展平,如下所示:

embedding_layer = Embedding(vocab_size, 128, input_length=MAX_LENGTH)(inputs)
flat_layer = Flatten()(embedding_layer)
x = Dense(64, activation='relu')(flat_layer)

【讨论】:

  • 仍然出现错误:-- ValueError: 检查目标时出错:预期dense_17 有2 维,但得到的数组形状为(111, 4, 2)
  • 得到 (500,4)
【解决方案2】:

试试这个

x = Dense(64, input_dim = 500, activation='relu')(embedding_layer)

【讨论】:

    猜你喜欢
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2023-03-25
    • 2019-05-10
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多