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

Nik*_*dra 5 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)
Run Code Online (Sandbox Code Playgroud)

当我运行该程序时,它给我以下错误.

ValueError:检查时出错:期望的dense_1_input具有形状(None,8)但是具有形状的数组(8,1)

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

Nas*_*Ben 6

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

predictions = model.predict(test)
Run Code Online (Sandbox Code Playgroud)

请确认一下.

预测失败,因为您应始终为网络提供的是一个numpy数组形状(number_of_samples_to_predict, input_shape).在开头总是有一个额外的维度,这是你想要预测的所有样本的堆积.如果只有一个样本,则仍需要提供[1, input_shape]数组.

要解决此问题,请使用以下方法定义测试输入:

test = np.array([[6,148,72,35,0,33.6,0.627,50]])
Run Code Online (Sandbox Code Playgroud)

现在测试的形状(1,8)应该按模型预期运行(?,8).