首页 文章

Keras输入形状错误

提问于
浏览
2

我是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 回答

  • 1

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

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

    基本上你必须有一个具有以下形状的数组:( n_batchesn_attributes

    你有93个属性,所以如果你使用tensorflow,这应该可以做到

    np.array(s.toInputs()).reshape(-1, 93)
    

    Fully working example

    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)
    
  • -1

    错误消息告诉您,您的数据需要具有 (None, 93) 形状( None 此处表示此维度可以具有任意值 . 这是您的样本数量)

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

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

    重塑的事情运作良好 . 将数组重塑为(batch_size,your_input_dimensions)

    np.reshape(batch_size,input_dimesions)

相关问题