web-dev-qa-db-fra.com

devrait avoir une forme dense mais un tableau de forme

J'obtiens l'erreur suivante lors de l'appel de la fonction model.predict lors de l'exécution d'un modèle de classification de texte en keras. J'ai cherché partout mais ça ne marche pas pour moi.

ValueError: Error when checking input: expected dense_1_input to have shape (100,) but got array with shape (1,)

Mes données ont 5 classes et ont un total de 15 exemples seulement. Voici l'ensemble de données

             query        tags
0               hi       intro
1      how are you       wellb
2            hello       intro
3        what's up       wellb
4       how's life       wellb
5              bye          gb
6    see you later          gb
7         good bye          gb
8           thanks   gratitude
9        thank you   gratitude
10  that's helpful   gratitude
11      I am great  revertfine
12            fine  revertfine
13       I am fine  revertfine
14            good  revertfine

C'est le code de mon modèle

from keras.preprocessing.text import Tokenizer
from sklearn.preprocessing import LabelBinarizer
from keras.models import Sequential
import pandas as pd
from keras.layers import Dense, Activation

data = pd.read_csv('text_class.csv')
train_text = data['query']
train_labels = data['tags']

tokenize = Tokenizer(num_words=100)
tokenize.fit_on_texts(train_text)

x_data = tokenize.texts_to_matrix(train_text)

encoder = LabelBinarizer()
encoder.fit(train_labels)
y_data = encoder.transform(train_labels)

model = Sequential()
model.add(Dense(512, input_shape=(100,)))
model.add(Activation('relu'))
model.add(Dense(5))
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])
model.fit(x_data, y_data, batch_size=8, epochs=10)

predictions = model.predict(x_data[0])
tag_labels = encoder.classes_
predicted_tags = tag_labels[np.argmax(predictions)]
print (predicted_tags)

Je ne suis pas en mesure de comprendre où se situe le problème et comment le résoudre.

9
Bhavesh Laddagiri

x_data est un tableau bidimensionnel de forme (15, 100)

  print(x_data.shape) 

mais x_data[0] est un tableau unidimensionnel de forme (100, )

  print(x_data[0].shape) 

et cela pose problème.

Utiliser le découpage x_data[0:1] pour l'obtenir sous forme de tableau à deux dimensions avec la forme (1, 100)

 print(x_data[0:1].shape) 

et ça marchera

 predictions = model.predict(x_data[0:1])
6
furas

Remplacez predictions = model.predict(x_data) par predictions = model.predict(x_data[0:1])

Votre couche d'entrée dans votre NN avait 100 neurones, mais il semble que votre entrée ait une forme de seulement (1,), vous devez donc changer la forme d'entrée

1
Rishabh Mandayam