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

时间:2018-04-20 18:41:13

标签: python neural-network keras

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

当我运行这样的东西时(半伪代码):

for _ in range(10):
    predictions = train_and_predict_nn(features, test_size)
    print(predictions)

我不会改变任何输入参数,只会多次训练和评估神经网络。现在,当我查看测试集的预测时,大多数时候它只预测一个类。有时虽然它预测了2个类(应该如此)。我对这种行为感到非常困惑,因为我没有改变任何输入参数,仍然会出现如此高的波动。数据集大致平衡,约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)

0 个答案:

没有答案