keras 多任务多loss

本文介绍了一个多任务学习网络的设计与实现,该网络包含三个输出层,分别用于分类预测和距离判断。网络使用了Dropout和Lambda层进行特征处理,并通过自定义的损失函数和权重分配来优化模型。在训练过程中,采用SGD优化器并设置了学习率和动量参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一下:

# Three loss functions
category_predict1 = Dense(100, activation='softmax', name='ctg_out_1')(
    Dropout(0.5)(feature1)
)
category_predict2 = Dense(100, activation='softmax', name='ctg_out_2')(
    Dropout(0.5)(feature2)
)
dis = Lambda(eucl_dist, name='square')([feature1, feature2])
judge = Dense(2, activation='softmax', name='bin_out')(dis)
model = Model(inputs=[img1, img2], outputs=[category_predict1, category_predict2, judge])
model.compile(optimizer=SGD(lr=0.0001, momentum=0.9),
              loss={
                  'ctg_out_1': 'categorical_crossentropy',
                  'ctg_out_2': 'categorical_crossentropy',
                  'bin_out': 'categorical_crossentropy'},
              loss_weights={
                  'ctg_out_1': 1.,
                  'ctg_out_2': 1.,
                  'bin_out': 0.5
              },
              metrics=['accuracy'])
--------------------- 
作者:maocaisheng 
来源:优快云 
原文:https://blog.csdn.net/u012938704/article/details/79904173 
版权声明:本文为博主原创文章,转载请附上博文链接!
### 多任务学习中联合损失函数的设计与实现 在多任务学习(Multi-Task Learning, MTL)中,设计和实现联合损失函数是一个核心问题。它直接影响到模型能否有效地平衡个子任务的学习目标,并最终提升整体性能。 #### 1. 不同任务的损失函数形式 对于不同的任务类型,通常会采用特定的损失函数来衡量预测值与真实值之间的差异。例如,在分类任务中常用的交叉熵损失[^3],而在回归任务中则可能使用均方误差(MSE)、绝对误差(MAE),或者更鲁棒的 Huber Loss 和 Log-cosh Loss。 #### 2. 权重分配策略 为了综合考虑各个任务的重要性以及它们之间可能存在冲突的情况,一种常见做法是对每项单独的任务赋予一定权重系数 \( w_i \),从而构建加权求和形式的整体目标函数: \[ L_{total} = \sum_{i=1}^{n} w_i L_i \] 其中 \( n \) 表示总共有少个并行处理的任务,\( L_i \) 是第 i 个具体任务对应的独立损失表达式[^2]。 进一步地,有研究提出动态调整这些比例因子的方法——即让网络自己学会如何合理设置每个分支贡献程度的最佳数值。比如 SLAW(Scaled Loss Approximate Weighting) 提出了基于梯度范数均衡的原则自动计算合适的 weights 值集合 {wi}, 这样可以避免手动调参带来的不便同时也提高了算法适应能力面对复杂场景下的表现效果。 另外还存在不确定性估计法用于指导 multi-task 的 loss balancing process [^1], 它假设不同类型的输出具有各自的噪声水平分布特性,进而依据统计学理论推导得出相应的调节机制应用于实际优化过程中。 #### 3. Python 实现案例 下面给出一段简单的 python 代码片段展示了一个基本框架下如何定义一个多任务学习系统的总体损失计算逻辑: ```python import tensorflow as tf def compute_loss(y_true_classify, y_pred_classify, y_true_regress, y_pred_regress): classify_loss = tf.keras.losses.categorical_crossentropy(y_true_classify, y_pred_classify) regress_loss_mse = tf.reduce_mean(tf.square(y_true_regress - y_pred_regress)) delta = 1.0 # Hyperparameter for huber loss error = y_true_regress - y_pred_regress condition = tf.abs(error) < delta regress_loss_huber = tf.where(condition, 0.5 * tf.square(error), delta * (tf.abs(error) - 0.5 * delta)) log_cosh_loss = tf.math.log(tf.cosh(regress_loss_mse)) total_loss = classify_loss + regress_loss_huber + log_cosh_loss return total_loss ``` 上述例子展示了同时包含分类和回归两个部分的情形,并分别采用了标准 cross entropy、huber loss 及 log cosh loss 组成最后总的 evaluation metric 结果返回给训练环节继续反向传播更新参数直至收敛为止。 ---
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值