Keras:进行预测时的 ValueError 和准确度为零

Keras: ValueError while doing predictions and accuracy is zero

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

我正在尝试构建一个以 X 作为输入并具有 200 个神经元隐藏层的网络,最后是一个 sigmodial 神经元来预测输出 class。 objective是二进制class化。

模型的输入是 (n x 400) 作为 X 和 (n, 1) 作为 Y。X 和 Y 都是 numpy 数组。代码和报错信息如下。此外,神经网络的结果是:Loss = Infinite and Accuracy = 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 的值,我得到的所有这些都是 nan。

编辑 4:我有大约 250K 个训练样本。使用所有这些样本后,我得到 loss = nan 和所有预测为 nan。但是当我抽取 2000 个样本时,我开始获得不错的值。

编辑 5:我的模型似乎无法处理超过 2500 个训练样本。我尝试增加训练规模,在 3000 或更多时,一切都变成了 nan。

关于您收到的错误 - 当您指定输入维度时,您指定了列数,在您的情况下为 400。但是,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]))