Keras 输入形状错误

Ggs*_*Ggs 5 python numpy neural-network keras tensorflow

我是 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)
Run Code Online (Sandbox Code Playgroud)

我首先尝试计算(进行前向传播)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())
Run Code Online (Sandbox Code Playgroud)

但我得到了错误

ValueError:检查时出错:预期dense_1_input具有形状(无,93)但得到形状为(93,1)的数组

如何传递正确的参数?

Wil*_*ren 5

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

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

基本上你必须有一个具有以下形状的数组:( n_batches, n_attributes)

你有 93 个属性,所以如果你使用的是tensorflow,这应该可以解决问题

np.array(s.toInputs()).reshape(-1, 93)
Run Code Online (Sandbox Code Playgroud)

完全工作的示例

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)
Run Code Online (Sandbox Code Playgroud)