代码之家  ›  专栏  ›  技术社区  ›  silent_dev

Keras:ValueError在进行预测时,准确性为零

  •  2
  • silent_dev  · 技术社区  · 9 年前

    我在Keras中编写了以下模型,但在进行预测时,我遇到了ValueError(在代码之后)。我查看了StackOverflow上的其他问题,但只发现 this one 但我无法理解答案是什么。

    我试图建立一个网络,以X为输入,有一个隐藏的200个神经元,最后是一个sigmodial神经元来预测输出类。目标是二元分类。

    模型的输入是(n x 400)作为x和(n,1)作为Y。x和Y都是numpy数组。代码和错误消息如下。此外,神经网络的结果是:损耗=无穷大,精度=0.0,这意味着我这边的某些东西明显错误。

    def create_baseline():
        # create model
        model = Sequential()
        model.add(Dense(200, input_dim=400, kernel_initializer='normal', activation='relu'))
        model.add(Dense(1, kernel_initializer='normal', activation='sigmoid'))
        # Compile model
        model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
        return model
    

    我对模型进行如下训练:

    estimator = KerasClassifier(build_fn=create_baseline, nb_epoch=5, batch_size=5, verbose=1)
    estimator.fit(X, Y)
    

    estimator.predict(X[0])
    

    我收到以下错误:

    ValueError: Error when checking : expected dense_34_input to have shape (None, 400) but got array with shape (400, 1)
    

    编辑1:训练数据X有400个特征(从文档的word2vec学习)。Y是一个只有0和1的标签。我将训练文件读入pandas数据帧,然后使用 dataframe.values 将X和Y作为numpy数组。

    编辑2:根据下面的答案,我从我的模型中预测 estimator.predict(train_X_vals[0].reshape(1,len(train_X_vals[0]))) array([[ nan]], dtype=float32)

    编辑3:我从训练集中预测1000 X的值,得到所有这些值。

    编辑5:我的模型似乎无法处理超过2500个训练样本。我试着增加训练规模,在3000多人的训练中,一切都变好了。

    1 回复  |  直到 9 年前
        1
  •  1
  •   Miriam Farber    9 年前

    x[0] 它只是一个向量,所以它的维数不是形式的维数(None,400),而是(400,1)。例如,如果您定义

    x=np.random.rand(20,400)
    

    结果 x[0].shape (400L,) .

    x[0] 因此,例如 x[0].reshape(1,len(x[0]))