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

标签 python tensorflow keras

根据计算时间的不同,我会得到不同的 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/

相关文章:

python - paramiko 文件传输操作是原子的吗?

python - TensorFlow:了解 tf.summary.scalar 中的 `collections` 参数

ubuntu - 如何从 ubuntu 中完全删除 cuda?

arrays - 检查目标 : expected dense_3 to have shape (10, 时出错,但得到形状为 (2,) 的数组?即使标签是 one-hot 编码的

python-2.7 - 我可以通过 Keras 将图像添加到 Tensorboard 吗?

python - 复制列表中的元素 x 次

python - 定时器的暂停/恢复功能

python - Keras:无法访问 on_batch_end 回调内的训练图像

Python 警告打印表达式未分配任何内容

python - TensorFlow:带轴选项的 bincount