gpt4 book ai didi

python - Keras:训练期间和纪元结束时的不同验证 AUROC

转载 作者:行者123 更新时间:2023-11-30 22:11:52 24 4
gpt4 key购买 nike

根据计算时间的不同,我会得到不同的 AUROC。我的代码是

 def auc_roc(y_true, y_pred):
# any tensorflow metric
value, update_op = tf.metrics.auc(y_true, y_pred)
return update_op

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

my_callbacks = [roc_callback(training_data=(x_train, y_train),validation_data=(x_test,y_test))]

model.fit(x_train, y_train, validation_data=(x_test, y_test), callbacks=my_callbacks)

其中,roc_callback 是一个 Keras 回调,它使用 sklearn 中的 roc_auc_score 计算每个时期结束时的 AUROC。我使用定义的代码 here .

当我训练模型时,我得到以下统计数据:

  Train on 38470 samples, validate on 9618 samples
Epoch 1/15
38470/38470 [==============================] - auc_roc: 0.5116 - val_loss: 0.6899 - val_acc: 0.6274 - val_auc_roc: 0.5440

roc-auc_val: 0.5973

Epoch 2/15
38470/38470 [==============================] - auc_roc: 0.5777 - val_loss: 0.6284 - val_acc: 0.6870 - val_auc_roc: 0.6027

roc-auc_val: 0.6391

.
.
.
.
.
.
.


Epoch 12/15
38470/38470 [==============================] - auc_roc: 0.8754 - val_loss: 0.9569 - val_acc: 0.7747 - val_auc_roc: 0.8779

roc-auc_val: 0.6369

那么训练过程中每个 epoch 的 AUROC 是如何计算的呢?为什么它与 epoch 结束时计算的不同?

最佳答案

在训练期间,指标是“每批处理”计算的。他们会以当前批处理指标和之前结果之间的某种“平均值”不断更新每个新批处理。

现在,您的回调计算“整个数据”,并且仅在最后计算。两种方法之间存在正常差异。

很常见的是,下一个纪元以比上一个纪元显示的值更好的指标开始,因为旧指标的平均值中包含许多当时未训练的批处理。

您可以通过调用model.evaluate(x_test,y_test)来执行更精确的比较。不确定将其称为“训练期间”是否会产生冲突,但您可以单独训练每个时期并在每个时期之间调用此方法。

<小时/>

奇怪的事情:

您的 roc_callback 中没有任何 y_pred。您是否在其中调用 model.predict()

关于python - Keras:训练期间和纪元结束时的不同验证 AUROC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51291804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com