我是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 回答
实际上
s.toInputs()
应该是这样的基本上你必须有一个具有以下形状的数组:(
n_batches
,n_attributes
)你有93个属性,所以如果你使用tensorflow,这应该可以做到
Fully working example
错误消息告诉您,您的数据需要具有
(None, 93)
形状(None
此处表示此维度可以具有任意值 . 这是您的样本数量)但是您的输入数据的形状为
(93,1)
. 请注意,尺寸相反 . 您可以使用转置来使数据处于正确的形状:重塑的事情运作良好 . 将数组重塑为(batch_size,your_input_dimensions)
np.reshape(batch_size,input_dimesions)