首页 文章

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

提问于
浏览
2

我想基于使用TfidfVectorizer的矢量化单词进行多标签分类(20个不同的输出标签) . 我有39974行,每行包含2739项(零或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 回答

  • 1

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

    所以在你的情况下,网络的输入形状是 (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)
    

相关问题