web-dev-qa-db-ja.com

密集していると予想されますが、形状が配列になっています

Kerasでテキスト分類モデルを実行しているときにmodel.predict関数を呼び出すと、次のエラーが表示されます。どこでも検索しましたが、うまくいきませんでした。

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

私のデータには5つのクラスがあり、合計15の例しかありません。以下はデータセットです

             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

これは私のモデルのコードです

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)

問題がどこにあるのか、どのように修正するのかがわかりません。

9

x_dataは、形状を持つ2次元配列(15, 100)

  print(x_data.shape) 

しかしx_data[0]は形状(100, )の1次元配列です

  print(x_data[0].shape) 

そしてそれは問題を起こします。

スライスx_data[0:1]を使用して、形状(1, 100)の2次元配列として取得します

 print(x_data[0:1].shape) 

そしてそれは動作します

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

predictions = model.predict(x_data)predictions = model.predict(x_data[0:1])に変更します

NNの入力レイヤーには100個のニューロンがありましたが、入力の形状は(1)のみであるようであるため、入力形状を変更する必要があります

1