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

如何在Keras模型中计算打印皮尔逊相关系数作为自定义训练指标

Keras 训练时输出预测值与真实值皮尔逊相关系数的实现方法

你只需要编写符合Keras指标规范的自定义计算函数,传入model.compile()的metrics参数即可,Keras会自动在每个epoch结束后计算训练集、验证集的对应指标,打印到训练日志中。


具体实现步骤

  1. 编写皮尔逊相关系数计算函数,注意必须使用Keras后端的张量运算接口,不能直接用numpy计算,否则无法兼容Keras的计算图模式与GPU加速,同时要加极小值避免除0错误:
from tensorflow import keras
import tensorflow as tf

def pearson_correlation(y_true, y_pred):
    # 极小值,避免分母为0出现NaN
    epsilon = 1e-7
    # 计算真实值、预测值的均值
    y_true_mean = keras.backend.mean(y_true)
    y_pred_mean = keras.backend.mean(y_pred)
    # 计算协方差项
    cov = keras.backend.sum((y_true - y_true_mean) * (y_pred - y_pred_mean))
    # 计算两个变量的标准差乘积
    std_true = keras.backend.sqrt(keras.backend.sum(keras.backend.square(y_true - y_true_mean)))
    std_pred = keras.backend.sqrt(keras.backend.sum(keras.backend.square(y_pred - y_pred_mean)))
    # 返回皮尔逊相关系数结果
    return cov / (std_true * std_pred + epsilon)
  1. 修改函数的显示名称,让日志输出的字段名和你预期的一致,再传入模型编译参数即可:
# 修改指标在日志中显示的名称
pearson_correlation.__name__ = "pearson correlation"

model = keras.Sequential([...]) # 你原有定义的模型层
model.compile(
    optimizer="adam",
    loss="mse", # 替换为你实际使用的回归损失函数
    metrics=[pearson_correlation]
)

# 正常调用fit即可,开启验证集时会自动输出验证集的皮尔逊系数(前缀为val_)
model.fit(
    X,
    y,
    validation_split=0.2 # 按你的需求配置验证集参数
)

运行效果

配置完成后训练日志会自动输出对应指标,格式和你预期的完全一致:

50261/50261 [==============================] - 100s 2ms/step - loss: 20.6613 - pearson correlation: 0.62 - val_loss: 13.3205 - val_pearson correlation: 0.56

注意事项

  • 如果你使用Keras 3多后端版本,可以把代码中keras.backend替换为keras.ops,即可兼容TensorFlow、PyTorch、JAX三种后端
  • 如果你的预测值或真实值存在全零/常数的极端情况,epsilon参数可以避免计算出现NaN值
  • 自定义指标不需要手动做张量转换,Keras会在训练、验证阶段自动把对应批次的真实值、预测值传入函数计算,整个epoch的指标会自动做批次聚合

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:15:48