Keras-与model.predict()不匹配的数组形状

时间:2019-03-30 22:04:18

标签: python numpy keras

我有一个简单的密集型NN,其中有2个用Keras编写的输入值,在Tensorflow和Python上运行。我已经成功安装了该网,并且可以进行评估而不会出错。但是,当我要预测单个样本数据的结果时,由于输入数据的尺寸形状不正确,会出现错误。但是,当我打印numpy数组的形状时,它将返回正确的形状:

inputArr = np.array((x[sample][0], x[sample][1]))
print(inputArr)
print(inputArr.shape)
prediction = model.predict(inputArr)

这将产生以下输出:

Input data: [-1. -1.]
Array shape: (2,)

随后出现错误:

Traceback (most recent call last):
  File ".\train3d.py", line 60, in <module>
    prediction = model.predict(inputArr)
  File "C:\Users\svoja\AppData\Local\Programs\Python\Python35\lib\site-packages\keras\engine\training.py", line 1147, in predict
    x, _, _ = self._standardize_user_data(x)
  File "C:\Users\svoja\AppData\Local\Programs\Python\Python35\lib\site-packages\keras\engine\training.py", line 749, in _standardize_user_data
    exception_prefix='input')
  File "C:\Users\svoja\AppData\Local\Programs\Python\Python35\lib\site-packages\keras\engine\training_utils.py", line 137, in standardize_input_data
    str(data_shape))
ValueError: Error when checking input: expected dense_1_input to have shape (2,) but got array with shape (1,)

从错误消息中可以看到,网络期望一个尺寸为(2,)的数组,该数组与我的输入数组的输出完全相同。

我的问题是,数组到底有什么问题?

1 个答案:

答案 0 :(得分:2)

您缺少批处理大小,Keras希望数据隐式(N, D),其中N是批处理大小,D是要素数量。对于您的情况D=2,但您没有矩阵。

要传递单个数据点,您需要形状(1, 2),该形状将读取具有2个特征的1个数据点。您可以通过以下方式实现此目标:

inputArr = np.array((x[sample][0], x[sample][1]))
print(inputArr) # [-1, -1]
print(inputArr.shape) # (2,)
inputArr = np.expand_dims(inputArr, 0)
print(inputArr.shape) # (1, 2)

或更短的语法糖版本:

inputArr = inputArr[None, :] # (1, 2)

其中None添加了新的维度。