You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keras中Loss默认显示、多任务适配及验证指标相关技术问询

Keras训练指标与Loss输出相关问题解答

相关代码与训练日志

定义的METRICS

METRICS = [
    keras.metrics.TruePositives(name='tp'),
    keras.metrics.FalsePositives(name='fp'),
    keras.metrics.TrueNegatives(name='tn'),
    keras.metrics.FalseNegatives(name='fn'),
    keras.metrics.BinaryAccuracy(name='accuracy'),
    keras.metrics.Precision(name='precision'),
    keras.metrics.Recall(name='recall'),
    keras.metrics.AUC(name='auc'),
]

训练日志

Train on 182276 samples, validate on 45569 samples
Epoch 1/100
182276/182276 [==============================] - 2s 12us/sample - loss: 0.0139 - tp: 7.0000 - fp: 124.0000 - tn: 181835.0000 - fn: 310.0000 - accuracy: 0.9976 - precision: 0.0534 - recall: 0.0221 - auc: 0.7262 - val_loss: 0.0074 - val_tp: 4.0000 - val_fp: 0.0000e+00 - val_tn: 45492.0000 - val_fn: 73.0000 - val_accuracy: 0.9984 - val_precision: 1.0000 - val_recall: 0.0519 - val_auc: 0.8742
Epoch 2/100
182276/182276 [==============================] - 0s 3us/sample - loss: 0.0076 - tp: 91.0000 - fp: 30.0000 - tn: 181929.0000 - fn: 226.0000 - accuracy: 0.9986 - precision: 0.7521 - recall: 0.2871 - auc: 0.8828 - val_loss: 0.0053 - val_tp: 39.0000 - val_fp: 7.0000 - val_tn: 45485.0000 - val_fn: 38.0000 - val_accuracy: 0.9990 - val_precision: 0.8478 - val_recall: 0.5065 - val_auc: 0.8761
Epoch 3/100
182276/182276 [==============================] - 0s 3us/sample - loss: 0.0064 - tp: 146.0000 - fp: 36.0000 - tn: 181923.0000 - fn: 171.0000 - accuracy: 0.9989 - precision: 0.8022 - recall: 0.4606 - auc: 0.8981 - val_loss: 0.0049 - val_tp: 45.0000 - val_fp: 7.0000 - val_tn: 45485.0000 - val_fn: 32.0000 - val_accuracy: 0.9991 - val_precision: 0.8654 - val_recall: 0.5844 - val_auc: 0.8828

问题解答

问题1:为何Loss未包含在METRICS中却在每个epoch后显示?Loss是否为默认输出项?回归或多分类任务中也会默认显示Loss吗?

对的,Loss确实是Keras model.fit() 方法的默认输出项——不管你有没有把它加到自定义的METRICS列表里,每个epoch结束后它都会自动打印出来。毕竟Loss是模型训练的核心目标,模型每一步都是在努力最小化这个值,所以Keras默认会把它作为最基础的监控指标展示给你。
而且不管是二分类、多分类还是回归任务,Loss都会默认显示。不同任务只是用的Loss函数类型不一样(比如二分类用BinaryCrossentropy,多分类用CategoricalCrossentropy,回归用MSE这类),但只要你在编译模型时指定了Loss函数,fit()就会自动跟踪并输出它的数值。

问题2:Keras同时显示训练集与验证集的各项METRICS,是否因为调用model.fit时传入了validation_data=(val_features, val_labels)?若未传入验证数据,是否会因无法打印验证指标而报错?

完全正确!训练日志里那些val_开头的验证集指标,就是因为你在model.fit()里传了validation_data=(val_features, val_labels)参数。Keras会在每个epoch训练完之后,用这个验证数据去计算你定义的所有METRICS,还有Loss,然后把结果一起输出。
要是没传入验证数据的话,Keras绝对不会报错,它只会输出训练集的指标(包括默认的Loss和你自定义的METRICS),不会出现任何val_相关的内容。只有当你指定了需要验证的配置但没给对应数据的时候才可能出问题,单纯不传validation_data的话,程序会正常跑,只输出训练阶段的结果。

内容的提问来源于stack exchange,提问作者user2543622

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 12:22:48