keras 多任务多loss实例


Posted in Python onJune 22, 2020

记录一下:

# 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输出的向量

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

Python 相关文章推荐
python中sets模块的用法实例
Sep 30 Python
Python中的异常处理学习笔记
Jan 28 Python
python使用点操作符访问字典(dict)数据的方法
Mar 16 Python
python 回调函数和回调方法的实现分析
Mar 23 Python
Python利用前序和中序遍历结果重建二叉树的方法
Apr 27 Python
python框架中flask知识点总结
Aug 17 Python
对python 通过ssh访问数据库的实例详解
Feb 19 Python
基于 Django 的手机管理系统实现过程详解
Aug 16 Python
python 实现turtle画图并导出图片格式的文件
Dec 07 Python
python打印异常信息的两种实现方式
Dec 24 Python
python实现发送QQ邮件(可加附件)
Dec 23 Python
总结Python使用过程中的bug
Jun 18 Python
python对execl 处理操作代码
Jun 22 #Python
Python select及selectors模块概念用法详解
Jun 22 #Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
Jun 22 #Python
利用Vscode进行Python开发环境配置的步骤
Jun 22 #Python
Python Excel vlookup函数实现过程解析
Jun 22 #Python
宝塔面板成功部署Django项目流程(图文)
Jun 22 #Python
python和php哪个更适合写爬虫
Jun 22 #Python
You might like
DC动画电影《黑暗正义联盟》曝预告 5月5日上线数字平台
2020/04/09 欧美动漫
在PHP里得到前天和昨天的日期的代码
2007/08/16 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
通过修改Laravel Auth使用salt和password进行认证用户详解
2017/08/17 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
jQuery实现textarea自动增长宽高的方法
2015/12/18 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
JS/jQuery实现简单的开关灯效果【案例】
2019/02/19 jQuery
js实现随机抽奖
2020/03/19 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
Python字符串特性及常用字符串方法的简单笔记
2016/01/04 Python
Python实现列表删除重复元素的三种常用方法分析
2017/11/24 Python
python 批量修改/替换数据的实例
2018/07/25 Python
python实现贪吃蛇游戏
2020/03/21 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
python实现控制台输出彩色字体
2020/04/05 Python
python实现npy格式文件转换为txt文件操作
2020/07/01 Python
css3的动画特效之动画序列(animation)
2017/12/22 HTML / CSS
成教毕业生自我鉴定
2013/10/23 职场文书
初中地理教学反思
2014/01/11 职场文书
医务工作者先进事迹材料
2014/01/26 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
2016公司中秋节寄语
2015/12/07 职场文书
2016年党员岗位承诺书
2016/03/24 职场文书
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP
java代码实现空间切割
2022/01/18 Java/Android
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers