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 输入形状错误的主要内容,如果未能解决你的问题,请参考以下文章