我现在很困惑。我已经训练了我的模型,一切正常;但是当我尝试使用预测方法时,我得到了以下错误:
ValueError: 检查输入时出错:期望dense_1_input的形状为(64,),但得到的数组形状为(1,)
这让我觉得很奇怪,因为我给出的输入是(64,),我甚至在命令行界面返回了形状,像这样
print(type(test_x[0])) print(test_x[0].shape)
这返回了
<class ‘numpy.ndarray’>
(64,)
在我看来,这应该在使用时有效
print(str(np.argmax(model.predict(test_x[0]))))
谁能指出我做错了什么吗?
完整的错误输出:
File “/home/drbunsen/Downloads/code/neural/random/neuralPlaying.py”, line 115, in
main()
File “/home/drbunsen/Downloads/code/neural/random/neuralPlaying.py”, line 110, in main
print(np.argmax(model.predict(train_x[0])))
File “/home/drbunsen/.local/lib/python3.7/site-packages/keras/engine/training.py”, line 1441, in predict
x, _, _ = self._standardize_user_data(x)
File “/home/drbunsen/.local/lib/python3.7/site-packages/keras/engine/training.py”, line 579, in _standardize_user_data
exception_prefix=’input’)
File “/home/drbunsen/.local/lib/python3.7/site-packages/keras/engine/training_utils.py”, line 145, in standardize_input_data
str(data_shape))
ValueError: 检查输入时出错:期望dense_1_input的形状为(64,),但得到的数组形状为(1,)
回答:
模型期望的输入形状为:(样本数量,特征数量)
。
如果你想传递1个样本且每个样本有64个特征,那么输入的形状应该像:(1,64)
。
由于你已经用64个特征训练了你的模型,输入总是应该有(N,64)
的形状。
如果你传递了一个形状为(64,)
的数组,模型会认为它是64个样本,每个样本有1个特征,这与期望的64个特征不兼容。
要解决你的问题,像这样传递输入:
print(str(np.argmax(model.predict(test_x[0].reshape(1,-1))))) # 添加第一维度