web-dev-qa-db-fra.com

Keras: 3 dimensions attendues, mais tableau avec forme - modèle dense

Je veux faire une classification multi-étiquettes (20 étiquettes de sortie distinctes), basée sur des mots vectorisés en utilisant TfidfVectorizer. J'ai un ensemble de 39974 lignes contenant chacune 2739 éléments (zéros ou uns).

Je voudrais classer ces données en utilisant le modèle Keras qui contiendra 1 couche cachée (~ 20 nœuds avec activation = 'relu') et une couche de sortie égale 20 valeurs de sortie possibles (avec activation = 'softmax' pour choisir le meilleur ajustement).

Voici mon code jusqu'à présent:

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)

Mais erreur:

ValueError: erreur lors de la vérification de l'entrée: dense_1_input devrait avoir 3 dimensions, mais le tableau a la forme (39774, 2739)

Comment puis-je spécifier ce NN pour s'adapter à l'aide de cette matrice?

8
ldragicevic

Le nombre de lignes (nombre d'échantillons d'apprentissage) ne fait pas partie de la forme d'entrée du réseau car le processus d'apprentissage alimente le réseau un échantillon par lot (ou, plus précisément, les échantillons batch_size par lot).

Donc, dans votre cas, la forme d'entrée du réseau est (2739, ) et le bon code devrait être comme ceci:

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)
6
Denis Zubo