### Keras predict() 值错误:输入没有正确的维度

我完全是机器学习的新手,我想从一个相当简单的项目开始:使用mnist数据集进行数字识别。我使用的是keras和tensorflow,并且我开始使用我在这里找到的代码。网络已经正确构建和训练,现在我想做一个简单的预测。首先,我简单地使用了数据集中用于测试的一部分图片中的一张,我希望我的输出是那个数字。(在这种情况下,输出应该是7。)这是我的代码:

# Baseline MLP for MNIST datasetfrom tensorflow.keras.datasets import mnistfrom tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Densefrom keras.utils import np_utilsimport numpy as np# load data(X_train, y_train), (X_test, y_test) = mnist.load_data()# flatten 28*28 images to a 784 vector for each imagenum_pixels = X_train.shape[1] * X_train.shape[2]X_train = X_train.reshape((X_train.shape[0], num_pixels)).astype('float32')X_test = X_test.reshape((X_test.shape[0], num_pixels)).astype('float32')# normalize inputs from 0-255 to 0-1X_train = X_train / 255X_test = X_test / 255# one hot encode outputsy_train = np_utils.to_categorical(y_train)y_test = np_utils.to_categorical(y_test)num_classes = y_test.shape[1]# define baseline modeldef baseline_model():    # create model    model = Sequential()    model.add(Dense(num_pixels, input_dim=num_pixels, kernel_initializer='normal', activation='relu'))    model.add(Dense(num_classes, kernel_initializer='normal', activation='softmax'))    # Compile model    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])    return model# build the modelmodel = baseline_model()print("created model")# Fit the modelmodel.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=10, batch_size=200, verbose=2) print("did model.fit")image_index=0print("correct result : ", y_test[image_index])print("shape of the array: ", X_test[0].shape)print("predicted result : ", model.predict(X_test[image_index]))

现在我得到了以下错误:

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

尽管我的数组确实具有正确的形状!如你所见,我打印了print("shape of the array: ", X_test[0].shape),它确实返回了shape of the array: (784,)。784正是我们想要的维度,但我仍然得到了那个错误。

我花了几个小时试图解决这个问题,但无论我尝试什么(例如重塑数组),似乎都不起作用。显然,对于keras的predict函数或数组存在一些误解。你能帮我理解并解决这个问题吗?提前感谢你。


回答:

所以predict函数仍然期望第0维是样本维度。

当你索引X_test[0]时,你基本上移除了这个维度,这导致predict函数现在有784个1像素的样本!

将你的代码更改为:

print("predicted result : ", model.predict(X_test[0].reshape(-1,num_pixels)))

现在你应该能得到结果概率。

编辑:

如果你只想得到预测的最大概率数字:

print("predicted result : ",  np.argmax(model.predict(X_test[0].reshape(-1,num_pixels)), axis = 1))

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注