我是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)
如何传递正确的参数?
答案 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_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)
答案 2 :(得分:-1)
重塑的事情很有效。 将数组重塑为(batch_size,your_input_dimensions)
np.reshape(batch_size,input_dimesions)