Keras输入层曲解了输入形状

时间:2018-11-16 03:11:05

标签: python machine-learning keras neural-network

我正在尝试在Keras中建立一个非常简单的功能神经网络。我向网络输入了形状为(270000,)的向量,并且已经将其输入为要在输入层中接受的形状,但是我收到了如下所示的错误。鉴于为指定为错误的输入而打印的形状实际上是(270000,),所以我不知道为什么会收到此错误。

模型功能

def spectrify(A1, y1, simData, aOrigShape):
    print("A1: ", np.shape(A1))
    print("y1: ", np.shape(y1))
    print("simData", np.shape(simData))
    print("aOrigShape:", aOrigShape)
    dataIn = Input(shape=np.shape(A1))
    dataOut = Dense(np.shape(A1)[0])(dataIn)
    outShaper = Reshape((aOrigShape))(dataOut)
    model = Model(inputs = dataIn, outputs = outShaper)
    model.compile(optimizer = 'rmsprop',
                 loss = 'categorical_crossentropy',
                 metrics = ['accuracy'])
    model.fit(A1, simData)
    return model

执行

运行上面的函数会打印形状并引发以下错误:

A1:  (270000,)
y1:  (200, 540)
simData (200, 400)
aOrigShape: (500, 540)

...
<ipython-input-130-88e6c1dfc1c9> in spectrify(A1, y1, simData, aOrigShape)
     12                  loss = 'categorical_crossentropy',
     13                  metrics = ['accuracy'])
---> 14     model.fit(A1, simData)
     15     return model
...

ValueError: Error when checking input: expected input_50 to have shape (270000,) but got array with shape (1,)

1 个答案:

答案 0 :(得分:0)

shape参数是指训练数据中一个样本的形状。因此,如果您有270000个形状为(1,)的训练样本,则必须将shape参数设置为(1,)。否则,这不太可能,但有可能,如果您有一个形状为(270000,)的样本,则需要将shape参数设置为(270000,),并且A的形状必须为{{1} },表示一个形状为(1, 270000)的样本,而不是(270000,),这表示270000个形状为(270000,)的样本。

通常,如果(1,)是包含训练数据的数组,那么最好使用X_train(即每个样本的形状)作为输入形状,如下所示:

X_train.shape[1:]