Keras输入形状错误

时间:2017-05-16 14:49:56

标签: python numpy tensorflow neural-network keras

我是Keras的新手,我正在努力创建一个需要在纸牌游戏中学习的网络。它需要93个二进制输入,其中隐藏层有40个神经元和一个输出神经元,它可以计算得分(从0到25)。

model = Sequential()
model.add(Dense(input_dim=93, units=40, activation="sigmoid"))
model.add(Dense(units=2, activation="linear"))
sgd = optimizers.SGD(lr=0.01, clipvalue=0.5)
model.compile(loss="mse", optimizer=sgd, learning_rate=0.01)

我首先尝试计算(进行前向传播)93个输入

这是" s.toInputs()"

  

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1    1 1 0 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 0 1 0 1 0 0 0    0 0 1 1 0 0 1 1 0 0 1 0 0 0 0 1 1 0 1]

model.predict(np.array(s.toInputs())

但我收到了错误

  

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

如何传递正确的参数?

3 个答案:

答案 0 :(得分:1)

错误消息告诉您,您的数据需要具有(None, 93)形状(None此处意味着,此维度可以具有任意值。这是您的样本数量)

但您的输入数据的形状为(93,1)。请注意,尺寸相反。 您可以使用转置来使数据处于正确的形状:

model.predict(np.array(s.toInputs()).T)

答案 1 :(得分:1)

实际上s.toInputs()看起来应该是这样的

  

[[0,0,0,etc ......],[0,1,0等等......]]

基本上你必须有一个具有以下形状的数组:(n_batchesn_attributes

你有93个属性,所以如果你使用tensorflow

,这应该可以解决问题
np.array(s.toInputs()).reshape(-1, 93)

完整的工作示例

model = Sequential()
model.add(Dense(input_dim=93, units=40, activation="sigmoid"))
model.add(Dense(units=2, activation="linear"))
sgd = optimizers.SGD(lr=0.01, clipvalue=0.5)
model.compile(loss="mse", optimizer=sgd, learning_rate=0.01)

# random data
n_batches = 10
data = np.random.randint(0,2,93*n_batches)
data = data.reshape(-1,93)

model.predict(data)

答案 2 :(得分:-1)

重塑的事情很有效。 将数组重塑为(batch_size,your_input_dimensions)

np.reshape(batch_size,input_dimesions)