keras 多任务多loss实例

作者:maocaisheng 时间:2022-09-21 12:49:33 

记录一下:


# 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'])

补充知识:多分类loss函数本质理解

一、面对一个多分类问题,如何设计合理的损失函数呢?

1、损失函数的本质在数学上称为目标函数;这个目标函数的目标值符合最完美的需求;损失函数的目标值肯定是0,完美分类的损失必然为0 ;

2、损失函数分为两部分,一部分为正确的分类,一部分为错误的分类;保留其中任何一个部分都可以达到目标;就好比两条路都可以通向罗马;都可以通过转化均可以令损失函数的最小值为0时,为目标值;(当然最小值不一定要为0 );最关键是最小化方向是通向目标值的;

3、多分类问题涉及概率问题,目标函数中设计只保留正确的部分(为什么不保留错误部分,我想都可以达到目的,这里保留正确部分,计算更方便);用极值思维想象完美分类情况下,输出的正确类别的概率必然是1,所以损失函数loss=-1/n(Px1+Px2+Px3+……);Px1代表样本x为x1的情况下,输出样本类别相同的概率;最好的情况就是p值都为1;损失值为0 ,可loss函数为-1;如何设计才能等效呢?答案就是加log函数;Loss=-1/n(logPx1+logPx2+logPx3+……);目标函数最小值就是0;

二、 如何在损失函数中只保留正确的部分呢?

1、从逆向的角度而言,错误部分的前面加个系数0,正确部分为1;从简单开始做起,比如说01分类,y*(logPy=1)+(1-y)*(logPy=0); y为样本真实分类;这个就能保存了;y=1时,就保留了第一部分,y=0时就保留了第二部分;但当将01分类扩展成三分类甚至多分类时,这种情况就不能够适应了;这是因为没有明白本质问题;

2、可以将真实样本标签输出转化成概率值;只是正确的概率值为1,其他类别概率为0;这样就可以完美解决多分类的问题;就是说每一个模型输出类别Log概率前乘以一个概率值; keras 多任务多loss实例 这个公式里面的P值全为1;为0的忽略掉了;

三、如何优化呢?

1、模型输出的概率值转化为一个h(x)的函数;通过改变函数内部的w值来达到最小值;也许达不到0值;这个跟函数的Power(拟合能力)有关;

四、cross-entropy loss公式怎么写呢?

keras 多任务多loss实例 Y代表样本的one-hot向量;yhat代表softmax输出的向量

来源:https://blog.csdn.net/u012938704/article/details/79904173

标签:keras,任务,loss
0
投稿

猜你喜欢

  • python判断无向图环是否存在的示例

    2022-07-05 18:39:55
  • Python实现螺旋矩阵的填充算法示例

    2022-06-30 00:18:47
  • js实现用div层模拟的小窗口

    2007-12-02 15:01:00
  • js加密页面代码生成器

    2007-10-12 13:40:00
  • windows下安装Python虚拟环境virtualenvwrapper-win

    2023-12-23 11:24:08
  • Python爬取网站图片并保存的实现示例

    2023-06-05 18:01:29
  • Django中使用Whoosh进行全文检索的方法

    2023-03-20 05:35:43
  • 基于网格的网页设计概念及实际应用案例

    2010-03-30 14:59:00
  • 使用python+pygame开发消消乐游戏附完整源码

    2021-06-26 03:42:52
  • 老生常谈Python进阶之装饰器

    2022-05-20 10:51:23
  • Python使用grequests并发发送请求的示例

    2022-11-08 15:38:01
  • Django之全局使用request.user.username的实例详解

    2021-07-20 20:50:42
  • python+opencv图像分割实现分割不规则ROI区域方法汇总

    2021-04-25 01:50:54
  • 使用python编写批量卸载手机中安装的android应用脚本

    2022-07-04 19:41:27
  • php常用字符串长度函数strlen()与mb_strlen()用法实例分析

    2023-11-14 13:47:51
  • Python常用断言函数实例汇总

    2023-07-04 18:15:23
  • 如何判断电子邮件的地址格式是否正确?

    2010-01-12 20:12:00
  • python机器学习之随机森林(七)

    2023-10-20 00:25:13
  • Python使用bar绘制堆积/带误差棒柱形图的实现

    2021-06-26 12:42:05
  • ASP 读取MP3文件帧的信息比特率,采样频率,播放时间

    2010-06-04 12:22:00
  • asp之家 网络编程 m.aspxhome.com