首页 > 解决方案 > Keras 中的validation_accuracy 和validation_binary_accuracy 之间的差距很大

问题描述

我正在 Keras 中构建一个卷积神经网络,以尝试预测某些文本序列的二进制分类。

cmodel = models.Sequential()
cmodel.add(layers.Conv1D(1, kernel_size=9, activation="relu", input_shape=(64,20)))
cmodel.add(layers.MaxPooling1D(5))
cmodel.add(layers.Conv1D(1, kernel_size=9, activation="relu"))
cmodel.add(layers.GlobalMaxPooling1D())
cmodel.add(layers.Dense(1, activation="sigmoid"))

cmodel.compile(
    optimizer='adam',
    loss='binary_crossentropy',
    metrics=['accuracy', keras.metrics.BinaryAccuracy(name="binary_accuracy", dtype=None, threshold=0.5)],
)
epochs = 2000
e = range(1, epochs + 1)
history = cmodel.fit(
    train_seqs_vec,
    train_labels,
    epochs=epochs,
    validation_split=0.2
)

我训练我的模型几千个时期,我注意到以下几点:

  1. 第一次训练我的模型时,我能够将binary_accuracy(训练集指标)和validation_binary_accuracy(验证集)都提高到 ~90%。我对这种准确度感到非常惊讶,所以我重新运行了它。因为我无法超过~80%。我看到 90% 是因为随机初始化的卷积核“更好”并且达到了全局最小值(或者至少是更好的局部最小值?)。如果是这种情况,我是否继续重新训练,直到找到最好的validation_binary_accuracy并使用这些权重?

  2. accuracymy和之间的差异validation_accuracy相当大,而二进制 . Keras 如何计算accuracy……使用 0.5 阈值?如果是这样,为什么它与 有什么不同binary_accuracy

    loss: 0.3254 - accuracy: 0.8479 - binary_accuracy: 0.8020 - val_loss: 1.2466 - val_accuracy: 0.7015 - val_binary_accuracy: 0.8020
    

在我看来,训练集和测试集之间的二进制精度是相同的——我做错了什么?我是深度学习的新手,所以任何建议都值得赞赏。

在此处输入图像描述

生成情节的代码,所以你知道我没有在上面绘制相同的系列!:

history_dict = history.history
acc_values = history_dict['binary_accuracy']
val_acc_values = history_dict['val_binary_accuracy']
plt.plot(e, acc_values, 'r-', label='Training binary accuracy')
plt.plot(e, val_acc_values, 'g-', label='Validation binary accuracy')
plt.title('Training and validation binary accuracy')
plt.xlabel('Epochs')
plt.ylabel('Binary Accuracy')
plt.legend()
plt.show()

标签: tensorflowkerasdeep-learningconv-neural-network

解决方案


推荐阅读