Keras 输入形状错误

Posted

技术标签:

【中文标题】Keras 输入形状错误【英文标题】:Keras input shape error 【发布时间】:2017-10-15 17:34:12 【问题描述】:

我是 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 具有形状 (None, 93) 但得到的数组具有形状 (93, 1)

如何传递正确的参数?

【问题讨论】:

【参考方案1】:

重塑的东西效果很好。 将数组重塑为 (batch_size, your_input_dimensions)

np.reshape(batch_size, input_dimesions)

【讨论】:

【参考方案2】:

其实s.toInputs()应该是这样的

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

基本上你必须有一个具有以下形状的数组:(n_batches, n_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)

【讨论】:

【参考方案3】:

错误信息告诉你,你的数据需要有(None, 93)的形状(None这里的意思是,这个维度可以是任意值。它是你的样本数)

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

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

【讨论】:

以上是关于Keras 输入形状错误的主要内容,如果未能解决你的问题,请参考以下文章

Keras LSTM 第二层(但不是第一层)的输入形状错误

如何确定keras中的输入形状?

Keras模型密集输入形状投掷误差

Keras LSTM 层输入形状

ValueError:尝试计算 ROC 曲线时输入形状错误 (2, 256, 3)

我正在尝试使用 Keras 实现神经网络。我的错误如下: