Python 神经网络有时只能预测一个标签

Python 神经网络有时只能预测一个标签,python,neural-network,keras,Python,Neural Network,Keras,我正在用python中的keras训练一个神经网络,以预测两个给定的短语是否是彼此的意译,但我得到了一些非常奇怪的行为 当我运行类似这样的程序(半伪代码)时: 我不改变任何输入参数,只对神经网络进行多次训练和评估。现在当我看测试集的预测时,大多数时候它只预测一个类。有时,虽然它预测了两个类(正如它应该的那样)。我对这种行为感到非常困惑,因为我没有改变任何输入参数,仍然会得到如此高的波动。数据集大致平衡,大约60%的实例具有标签1,其余实例具有标签0。该数据集大约有10k个实例。有人能解释这种奇怪

我正在用python中的keras训练一个神经网络,以预测两个给定的短语是否是彼此的意译,但我得到了一些非常奇怪的行为

当我运行类似这样的程序(半伪代码)时:

我不改变任何输入参数,只对神经网络进行多次训练和评估。现在当我看测试集的预测时,大多数时候它只预测一个类。有时,虽然它预测了两个类(正如它应该的那样)。我对这种行为感到非常困惑,因为我没有改变任何输入参数,仍然会得到如此高的波动。数据集大致平衡,大约60%的实例具有标签1,其余实例具有标签0。该数据集大约有10k个实例。有人能解释这种奇怪的行为吗

编辑:我将尝试包含更多信息。 这是我用来训练神经网络和分类测试集的方法

def classify(feature_selection, test_size, feature_file_name):

    features, labels = parse(feature_file_name)
    X_train, 
    X_test, 
    y_train, 
    y_test = get_features(features, labels, feature_selection, test_size)


    num_features = len(feature_selection)
    num_epochs = math.floor(len(X_train)/20)

    model = Sequential()
    model.add(Dense(num_features, input_dim=num_features, init='uniform', activation='relu'))
    model.add(Dense(3, init='uniform', activation='relu'))
    model.add(Dense(1, init='uniform', activation='sigmoid'))

    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

    model.fit(X_train, y_train, epochs=num_epochs, batch_size=20, verbose=0)

    #loss and accuracy
    score = model.evaluate(X_test, y_test)
    predictions = model.predict(X_train)
    rounded = [round(x[0]) for x in predictions]
    return model, score, rounded
输入特征是数字的。打印X_train给了我类似的东西:

[[0.2041 1. 0.0909 0.1667 0.]
....
[0.1     1. 0.     0.6972 0.]]

对于numpy.shape(X_train),我得到了(9800,5)

我们需要更多地了解您的网络,才能告诉您任何有用的信息。问题是我使用的是一个相当大的体系结构,无法将所有代码都放在这里。我希望有人知道这是一个普遍的问题。可能有十几个可能的问题,我们不能在不了解您的NN和数据的详细信息的情况下缩小范围
[[0.2041 1. 0.0909 0.1667 0.]
....
[0.1     1. 0.     0.6972 0.]]