Keras:预计有3个维度,但是有阵列形状 - 密集模型

时间:2018-02-07 23:13:16

标签: python machine-learning neural-network keras

我想基于使用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 个答案:

答案 0 :(得分:3)

行数(训练样本的数量)不是网络输入形状的一部分,因为训练过程为网络每批次提供一个样本(或者更确切地说,每批次的batch_size样本)。

因此,在您的情况下,网络的输入形状为(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)