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
expected dense to have shape but got array with shape
提问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_data
is 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,) 的形状,因此您需要更改输入形状