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

基于CNN监督式回归任务,如何设计自定义损失函数融合两个损失?

自定义组合损失函数用于CNN回归任务

在深度学习框架(比如TensorFlow/Keras或PyTorch)中,实现两个损失相加的自定义函数很简单,核心就是写一个能接收模型预测值和真实目标值的函数,在内部计算两个损失后返回它们的和——还可以给不同损失分配权重来调整优化优先级。

Keras/TensorFlow 实现示例

假设你想结合均方误差(MSE)和平均绝对误差(MAE),代码示例如下:

import tensorflow as tf
from tensorflow.keras.losses import MeanSquaredError, MeanAbsoluteError

def combined_loss(y_true, y_pred):
    # 计算两个基础损失
    mse_loss = MeanSquaredError()(y_true, y_pred)
    mae_loss = MeanAbsoluteError()(y_true, y_pred)
    
    # 给两个损失分配权重,比如让MSE占60%、MAE占40%
    return 0.6 * mse_loss + 0.4 * mae_loss

使用时,编译模型直接指定这个损失函数即可:

model.compile(optimizer='adam', loss=combined_loss)
model.fit(X_train, y_train, epochs=50, batch_size=32)

PyTorch 实现示例

PyTorch里自定义损失可以写成函数或类,以下是简洁的函数形式:

import torch
import torch.nn.functional as F

def combined_loss(y_pred, y_true):
    mse_loss = F.mse_loss(y_pred, y_true)
    mae_loss = F.l1_loss(y_pred, y_true)
    # 同样可设置权重,这里让MSE占70%
    return 0.7 * mse_loss + 0.3 * mae_loss

训练循环中的使用方式:

optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
for epoch in range(50):
    model.train()
    optimizer.zero_grad()
    outputs = model(X_train)
    loss = combined_loss(outputs, y_train)
    loss.backward()
    optimizer.step()

关键注意事项

  • 损失尺度要匹配:如果两个损失的数值范围差异较大,直接相加会导致模型偏向优化数值更大的那个损失。建议先单独计算两个损失的均值,再调整权重平衡它们的影响。
  • 灵活替换损失类型:你可以根据任务需求替换任意回归损失(比如Huber损失、对数损失等),只需保证输入输出符合框架要求——注意Keras损失函数的参数顺序是(y_true, y_pred),PyTorch一般是(y_pred, y_true),别搞反顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:15:35