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

TensorFlow中如何按指定公式组合多个加权损失函数

TensorFlow Keras 加权组合损失实现方案

报错原因

针对输出层为单个sigmoid激活神经元(输出值范围0~1)的CNN模型计算组合损失时,直接对MeanAbsoluteError、MeanSquaredError的类实例做加法、数乘操作会抛出如下类型错误:

TypeError: unsupported operand type(s) for +: 'MeanAbsoluteError' and 'MeanSquaredError'

本质原因是Keras内置的损失类实例本身不支持直接算术运算,只有传入真实标签、模型预测值调用实例后,返回的损失计算结果为张量类型,才支持加权、求和等算术操作。

实现代码

自定义符合Keras损失接口规范的函数即可,函数入参固定为y_true(真实标签)、y_pred(模型预测输出),在函数内部完成单损失计算、加权求和,返回最终组合损失:

import tensorflow as tf

# 配置损失权重
l_1 = 0.6
l_2 = 0.4

def weighted_combined_loss(y_true, y_pred):
    mae = tf.keras.losses.MeanAbsoluteError()(y_true, y_pred)
    mse = tf.keras.losses.MeanSquaredError()(y_true, y_pred)
    return l_1 * mae + l_2 * mse

模型编译

自定义损失函数可直接传入model.compile()的loss参数,和内置损失的使用方式完全一致:

model.compile(
    optimizer=opt, 
    loss=weighted_combined_loss,
    metrics = ['accuracy', sensitivity, specificity, tf.keras.metrics.RootMeanSquaredError(name='rmse')]
)

注意事项

  • 模型输出经过sigmoid激活后值域为01,需确保训练所用真实标签也缩放到01区间,避免损失计算出现量级偏差。
  • 若需要调整损失归约逻辑(如按样本求和、按批次平均),可在实例化损失类时传入reduction参数配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:21:30