Python 预期密集有形状,但有形状的阵列

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/51421885/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 19:50:44  来源:igfitidea点击:

expected dense to have shape but got array with shape

pythonkerasshapetext-classification

提问by Bhavesh Laddagiri

I am getting the following error while calling the model.predict function when running a text classification model in keras. I searched the everywhere but it isn't working for me.

在 keras 中运行文本分类模型时调用 model.predict 函数时出现以下错误。我到处搜索,但它对我不起作用。

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

My data has 5 classes and has a total of 15 examples only. Below is the dataset

我的数据有 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

This is the code of my model

这是我模型的代码

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)

I am not able to figure out where the problem lies and how to fix it.

我无法弄清楚问题出在哪里以及如何解决它。

采纳答案by furas

x_datais 2-dimensional array with shape (15, 100)

x_data是具有形状的二维数组 (15, 100)

  print(x_data.shape) 

but x_data[0]is 1-dimensional array with shape (100, )

但是x_data[0]是具有形状的一维数组(100, )

  print(x_data[0].shape) 

and it makes problem.

它会产生问题。

Use slicing x_data[0:1]to get it as 2-dimensional array with shape (1, 100)

使用切片x_data[0:1]将其作为具有形状的二维数组(1, 100)

 print(x_data[0:1].shape) 

and it will work

它会起作用

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

回答by Rishabh Mandayam

Change predictions = model.predict(x_data)to predictions = model.predict(x_data[0:1])

更改predictions = model.predict(x_data)predictions = model.predict(x_data[0:1])

Your input layer in your NN had 100 neurons but it seems that your input has a shape of only (1,), therefore you need change the input shape

您的 NN 中的输入层有 100 个神经元,但您的输入似乎只有 (1,) 的形状,因此您需要更改输入形状