tensorflow - 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
)
我训练我的模型几千个时期,我注意到以下几点:
第一次训练我的模型时,我能够将
binary_accuracy
(训练集指标)和validation_binary_accuracy
(验证集)都提高到 ~90%。我对这种准确度感到非常惊讶,所以我重新运行了它。因为我无法超过~80%。我看到 90% 是因为随机初始化的卷积核“更好”并且达到了全局最小值(或者至少是更好的局部最小值?)。如果是这种情况,我是否继续重新训练,直到找到最好的validation_binary_accuracy
并使用这些权重?accuracy
my和之间的差异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()
解决方案
推荐阅读
- javascript - 使用 setTimeout 询问用户是否要等待或退出,但回调永远不会触发
- python - 在 Anaconda/Spyder/Python 3.8.5 中无法识别 Tcl 版本
- r - 增加R中时间序列中一个热编码变量的“位深度”
- javascript - 我如何使用 lodash 检查集合中的每个项目,除了那些不符合我的条件的项目?
- r - 将带有标准分隔符的字符串修改为定义的输出模式并用于分配值标签
- java - 自定义视图类正在抛出:java.lang.InstantiationException:java.lang.Class 没有零参数构造函数
- javascript - 消息:'缺少必需的参数:状态。',twitterReply:{错误:[[对象]]},状态代码:403,
- reactjs - 输入“承诺”
' 缺少类型中的以下属性 - javascript - 在 forEach 中读取和写入文件仅写入最后一个循环
- macos - 无法在 VS Code 中调试 Fortran 程序