我训练了Keras模型,但是我很难做出预测。我的输入数组的形状为(400,2)
,而输出数组的形状为(400,1)
。现在,当我将参数array([1,2])
传递给model.predict()
函数时,出现以下错误:
ValueError: Error when checking input: expected dense_1_input to have shape (2,) but got array with shape (1,).
自shape(array([1,2])) = (2,)
起是荒谬的,因此model.predict
函数应将其作为有效输入。
相反,当我传递形状为(1,2)
的数组时,它将原始工作。那么Keras实现中是否存在错误?
我的模型如下:
from keras.models import Sequential
from keras.layers import Dense
from keras import optimizers
import numpy as np
data = np.random.rand(400,2)
Y = np.random.rand(400,1)
def base():
model = Sequential()
model.add(Dense(4,activation = 'tanh', input_dim = 2))
model.add(Dense(1, activation = 'sigmoid'))
model.compile(optimizer = optimizers.RMSprop(lr = 0.1), loss = 'binary_crossentropy', metrics= ['accuracy'])
return model
model = base()
model.fit(data,Y, epochs = 10, batch_size =1)
model.predict(np.array([1,2]).reshape(2,1)) #Error
model.predict(np.array([1,2]).reshape(2,)) #Error
model.predict(np.array([1,2]).reshape(1,2)) #Works
答案 0 :(得分:1)
第一个维度是批处理维度。因此,即使使用(num_samples,) + (the input shape of network)
方法,也必须传递形状为predict
的数组。这就是为什么当您传递形状为(1,2)
的数组时它会起作用的原因,因为(1,)
表示样本数,而(2,)
是网络的输入形状。
答案 1 :(得分:0)
如果模型需要(2,)数组,则应传递(2,)形状数组
x = x.reshape((2,))
model.predict(x)