keras 多任务多loss实例

 更新时间:2020年06月22日 09:01:04   作者:maocaisheng  
这篇文章主要介绍了keras 多任务多loss实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

记录一下:

# 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概率前乘以一个概率值; 这个公式里面的P值全为1;为0的忽略掉了;

三、如何优化呢?

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

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

Y代表样本的one-hot向量;yhat代表softmax输出的向量

以上这篇keras 多任务多loss实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python实现MySql数据库交互的示例

    Python实现MySql数据库交互的示例

    本文主要介绍了Python实现MySql数据库交互的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Python 中random 库的详细使用

    Python 中random 库的详细使用

    random库是使用随机数的Python标准库,python中用于生成伪随机数的函数库是random,今天通过本文给大家分享Python 中random 库的详细使用,感兴趣的朋友一起看看吧
    2021-06-06
  • 更改Ubuntu默认python版本的两种方法python-> Anaconda

    更改Ubuntu默认python版本的两种方法python-> Anaconda

    当你安装 Debian Linux 时,安装过程有可能同时为你提供多个可用的 Python 版本,因此系统中会存在多个 Python 的可执行二进制文件。一般Ubuntu默认的Python版本都为2.x, 如何改变Python的默认版本呢?下面来一起看看吧。
    2016-12-12
  • 使用PyQt5设计GUI实现程序图形界面设计

    使用PyQt5设计GUI实现程序图形界面设计

    当我们学会如何在pycharm中配置pyqt5设计GU之后,那么本文来带你熟悉PyQt5设计GUI流程并为程序设计图形界面,设计一个属于自己的GUI
    2021-08-08
  • Python多线程结合队列下载百度音乐的方法

    Python多线程结合队列下载百度音乐的方法

    这篇文章主要介绍了Python多线程结合队列下载百度音乐的方法,实例分析了Python多线程及文件下载的相关实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Python 获取指定文件夹下的目录和文件的实现

    Python 获取指定文件夹下的目录和文件的实现

    这篇文章主要介绍了Python 获取指定文件夹下的目录和文件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解

    python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解

    这篇文章主要介绍了python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解,需要的朋友可以参考下
    2020-02-02
  • Python Jupyter Notebook显示行数问题的解决

    Python Jupyter Notebook显示行数问题的解决

    这篇文章主要介绍了Python Jupyter Notebook显示行数问题的解决方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python实现截图生成符合markdown的链接

    Python实现截图生成符合markdown的链接

    之前是用的是typora来写的文章,最近typora最近开始收费了,所以就不想用了,于是找到了一个替代品MarkText。本文将介绍如何通过Python实现截图自动生成符合markdown的链接,感兴趣的可以了解一下
    2022-01-01
  • python中函数的返回值及类型详解

    python中函数的返回值及类型详解

    这篇文章主要为大家介绍了python中函数的返回值及类型详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04

最新评论