预期的形状(无,8),但有阵形(8,1)

时间:2017-08-04 06:37:20

标签: python keras

我有以下代码,

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:检查时出错:期望的dense_1_input有    形状(无,8)但有阵形(8,1)

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

3 个答案:

答案 0 :(得分:6)

尽管我们没有看到完整的错误跟踪,但我认为该模型可以学习并且错误出现在该行:

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]])

现在test的形状(1,8)应该在模型预期(?,8)时运行。

答案 1 :(得分:0)

好吧,我认为这是糖尿病数据集,您将通过执行以下操作获得所需的输出

model.predict(np.array([[6,148,72,35,0,33.6,0.627,50]])) > 0.5

答案 2 :(得分:0)

test = test.transpose

现在您将进行所需形状的测试。