我有以下代码,
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)
我知道这个问题有很多重复,我已经尝试了所有这些,但它仍然给我同样的错误。我该如何解决?
答案 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
现在您将进行所需形状的测试。