2017-08-04 40 views
3

我有下面的代码,预期形状(无,8),但得到阵列形状(8,1)

from keras.models import Sequential 
from keras.layers import Dense 
import numpy as np 

# load dataset 
dataset = np.loadtxt("data.csv", delimiter=",") 
# split into input (X) and output (Y) variables 
X = dataset[:, 0:8] 
Y = dataset[:, 8] 
# create model 
model = Sequential() 
model.add(Dense(8, activation="relu", input_dim=8, kernel_initializer="uniform")) 
model.add(Dense(12, activation="relu", kernel_initializer="uniform")) 
model.add(Dense(1, activation="sigmoid", kernel_initializer="uniform")) 
# Compile model 
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) 
# Fit the model 
model.fit(X, Y, epochs=150, batch_size=10, verbose=2) 
# calculate predictions 
test = np.array([6,148,72,35,0,33.6,0.627,50]) 
predictions = model.predict(test) 
# round predictions 
rounded = [round(x[0]) for x in predictions] 
print(rounded) 

当我运行程序时,它给了我下面的错误。

ValueError: Error when checking : expected dense_1_input to have shape (None, 8) but got array with shape (8,1)

我知道这个问题有很多重复,我尝试了所有这些,但它仍然给我同样的错误。我如何解决它?

回答

3

虽然我们并不看到完整的错误跟踪,我认为,该模型学习和错误出现在该行:

predictions = model.predict(test) 

请证实。

预测失败,因为你总是应该喂养网络是一个形状为(number_of_samples_to_predict, input_shape)的numpy数组。 开头总是有一个额外的维度,这就是你想要预测的所有样本堆积的地方。当只有一个样品时,您仍然需要喂入一个[1, input_shape]阵列。

为了解决这个问题利用这样定义您的测试输入:

test = np.array([[6,148,72,35,0,33.6,0.627,50]]) 

现在测试具有形状(1,8)应该运行的模型预计(?,8)

+0

是的,你的假设是正确的,现在的工作。谢谢! –

相关问题