Keras:在做预测和准确性时的ValueError为零

时间:2017-07-09 13:24:55

标签: python keras keras-layer

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

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

模型的输入为(n×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的值,我得到了所有这些值为nan。

编辑4:我有大约250K的训练样本。在使用所有这些样本后,我得到了损失= nan和所有预测为nan。但是,当我采集2000个样本的样本时,我开始获得良好的价值。

编辑5:似乎我的模型无法处理超过2500个训练样本。我尝试增加训练规模,在3000以上,一切都变得很好。

1 个答案:

答案 0 :(得分:1)

关于您在指定输入维度时获得的错误,请指定列数,在您的情况下为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]))