python - ValueError:检查输入时出错:预期dense_1_input的形状为(3000,)但得到的数组形状为(1,)
问题描述
我正在玩这个https://vgpena.github.io/classifying-tweets-with-keras-and-tensorflow/模型并尝试制作 Twitter 情绪分析模型。我越来越
File "C:\Users\sam\Desktop\proje\load_model.py", line 71, in <module>
pred = model.predict(top_tweets)
File "C:\Users\sam\anaconda3\lib\site-packages\keras\engine\training.py", line 1441, in predict
x, _, _ = self._standardize_user_data(x)
File "C:\Users\sam\anaconda3\lib\site-packages\keras\engine\training.py", line 579, in _standardize_user_data
exception_prefix='input')
File "C:\Users\sam\anaconda3\lib\site-packages\keras\engine\training_utils.py", line 145, in standardize_input_data
str(data_shape))
ValueError: Error when checking input: expected dense_1_input to have shape (3000,) but got array with shape (1,)
我已经搜索过,我的模型似乎有问题,但我似乎无法确定问题所在
我的代码:
模型.py:
import json
import keras
import keras.preprocessing.text as kpt
from keras.preprocessing.text import Tokenizer
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
import numpy as np
import pandas as pd
training = np.genfromtxt('training.1600000.processed.noemoticon.csv', delimiter=',', skip_header=1, usecols=(0, 5), dtype=None, encoding='latin-1')
train_x = [x[1] for x in training]
train_y = np.asarray([x[0] for x in training])
max_words = 3000
tokenizer = Tokenizer(num_words=max_words)
tokenizer.fit_on_texts(train_x)
dictionary = tokenizer.word_index
with open('dict.json', 'w') as dictionary_file:
json.dump(dictionary, dictionary_file)
def convert_text_to_index_array(text):
return [dictionary[word] for word in kpt.text_to_word_sequence(text)]
allWordIndices = []
for text in train_x:
wordIndices = convert_text_to_index_array(text)
allWordIndices.append(wordIndices)
allWordIndices = np.asarray(allWordIndices)
train_y = tokenizer.sequences_to_matrix(allWordIndices, mode='binary')
train_x = keras.utils.to_categorical(train_x, 2)
model = Sequential()
model.add(Dense(512, input_shape=(max_words,), activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(256, activation='sigmoid'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
model.fit(train_x, train_y,
batch_size=32,
epochs=5,
verbose=1,
validation_split=0.1,
shuffle=True)
model_json = model.to_json()
with open('model.json', 'w') as json_file:
json_file.write(model_json)
model.save_weights('model.h5')
print('Model saved!')
加载模型.py:
import json
import numpy as np
import keras.preprocessing.text as kpt
from keras.preprocessing.text import Tokenizer
from keras.models import model_from_json
from numpy.core._multiarray_umath import ndarray
import GetOldTweets3 as got
import pandas as pd
def get_tweets(username, top_only, max_tweets):
tweet_criteria = got.manager.TweetCriteria().setUsername(username) \
.setTopTweets(top_only) \
.setMaxTweets(max_tweets)
tweet = got.manager.TweetManager.getTweets(tweet_criteria)
text_tweets = [[tw.text] for tw in tweet]
top_tweets = pd.DataFrame(text_tweets)
return top_tweets
tokenizer = Tokenizer(num_words=3000)
labels = ['negative', 'pozitive']
with open('dict.json', 'r') as dictionary_file:
dictionary = json.load(dictionary_file)
def convert_to_index_array(text):
words = kpt.text_to_word_sequence(text)
wordIndices = []
for word in words:
if word in dictionary:
wordIndices.append(dictionary[word])
else:
print(("'%s' is getting ignored." % (word)))
return wordIndices
json_file = open('model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
model = model_from_json(loaded_model_json)
model.load_weights('model.h5')
while True:
username = input("Enter an username:")
top_tweets = get_tweets(username,
top_only=True,
max_tweets=100)
evalSentence = top_tweets
if len([input]) < 1:
break
testArr = convert_to_index_array(evalSentence.to_string())
username = tokenizer.sequences_to_matrix([testArr], mode="binary")
pred = model.predict(top_tweets)
print(("Your profile %s; %f%% confidince" % (labels(np.argmax(pred)), pred[0][np.argmax(pred)] * 100)))
谢谢
解决方案
推荐阅读
- android - 在 Android 手机上运行时,与 Capacitor Camera 插件和 EXIFR 插件反应未获取位置数据
- css - JavaFX 中是否可以不使用节点的父样式表?
- java - 使用 lambda 回调的 replaceAll 未按预期工作
- java - Java 检查异常
- google-chrome-extension - 为什么 chrome.storage.local.get 返回 undefined 的值?
- ios - 退出开关盒不保存值
- python - 命令“python setup.py egg_info”失败,错误代码为 1 对于 Micropython-umqtt
- javascript - expect(jest.fn()).toHaveBeenCalledWith(...expected) 笑话酶
- ssl - ssl 连接,使用不在主机证书的 SAN 列表中的主机名
- wordpress - 仅从 Wordpress 中的 pods 文件字段中获取图像 URL