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