当前位置: 首页 > 知识库问答 >
问题:

Keras:预期为3维,但得到了形状密集型阵列

方安怡
2023-03-14

我想基于使用TfidfVectorizer的矢量化单词进行多标签分类(20个不同的输出标签)。我已经设置了39974行,每行包含2739个项目(0或1)。

我想使用Keras模型对这些数据进行分类,该模型将包含1个隐藏层(~ 20个节点,激活='relu'),输出层等于20个可能的输出值(激活='softmax'以选择最佳拟合)。

以下是我目前的代码:

model = Sequential()
model.add(Dense(units=20, activation='relu', input_shape=tfidf_matrix.shape))
model.add(Dense(units=20, activation='softmax'))
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(tfidf_matrix, train_data['cuisine_id'], epochs=10)

但有错误:

ValueError:检查输入时出错:预期dense_1_input有3个维度,但得到了带有形状(39774, 2739)的数组

如何使用此矩阵指定此NN以进行拟合?

共有1个答案

龙宣
2023-03-14

行数(训练样本数)不是网络输入形状的一部分,因为训练过程为网络提供了每批一个样本(或者更准确地说,每批一个batch\u大小的样本)。

因此,在您的情况下,网络的输入形状是(2739,),正确的代码应该如下所示:

model = Sequential()
# the shape of one training example is
input_shape = tfidf_matrix[0].shape
model.add(Dense(units=20, activation='relu', input_shape=input_shape))
model.add(Dense(units=20, activation='softmax'))
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', 
metrics=['accuracy'])
model.fit(tfidf_matrix, train_data['cuisine_id'], epochs=10)
 类似资料: