首页 > 解决方案 > Keras 模型错误,引用不兼容的目标形状,但模型摘要并未表明它是错误的

问题描述

我编写了一个模型来使用一种热编码对文本进行分类。以下是我的代码(我没有包含导入以使代码对读者简洁):

# Generate one-hot encodings for data and labels
num_labels = len(set(train_label_text))
# vocab_size = len(list(itertools.chain.from_iterable(train_data_text)))
vocab_size = 10000
label_tokenizer = keras.preprocessing.text.Tokenizer(num_words=num_labels)
label_tokenizer.fit_on_texts(train_label_text)
train_label = label_tokenizer.texts_to_matrix(train_label_text)

data_tokenizer = keras.preprocessing.text.Tokenizer(num_words=vocab_size)
data_tokenizer.fit_on_texts(train_data_text_unsplit)
train_data = data_tokenizer.texts_to_matrix(train_data_text)

# Model
model = keras.Sequential()
model.add(keras.layers.Dense(8, input_shape=(vocab_size,), activation=tf.nn.relu))
model.add(keras.layers.Dense(num_labels, activation=tf.nn.sigmoid))
model.compile(optimizer=tf.train.AdamOptimizer(),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
x_val = train_data[:leave_alone]
partial_x_train = train_data[leave_alone:]
y_val = train_label[:leave_alone]
partial_y_train = train_label[leave_alone:]

history = model.fit(partial_x_train,
                    partial_y_train,
                    epochs=epochs,
                    batch_size=512,
                    validation_data=(x_val, y_val),
                    verbose=1)

我的模型总结如下:


层(类型)输出形状参数#

dense_40(密集)(无,8)80008


dense_41(密集)(无,14)126

总参数:80,134 可训练参数:80,134 不可训练参数:0


我的数据和目标如下:

输入的前两条记录:array([[0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.]])

输出的前两条记录:array([[0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0 .], [0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])

输出中的值数与模型摘要中的 14 个相匹配。但是,当我运行模型时,出现以下错误:

ValueError:检查目标时出错:预期dense_43的形状为(1,),但数组的形状为(14,)

我检查了网络上的示例以及其他问题的一些答案,但没有看到我做错了什么。我有什么明显的遗漏吗?谢谢!

标签: pythontensorflowkeras

解决方案


推荐阅读