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操作SQLite简明教程
Jul 10 Python
python访问mysql数据库的实现方法(2则示例)
Jan 06 Python
Python基于select实现的socket服务器
Apr 13 Python
详解Python的collections模块中的deque双端队列结构
Jul 07 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
May 25 Python
python 判断矩阵中每行非零个数的方法
Jan 26 Python
详解小白之KMP算法及python实现
Apr 04 Python
Python post请求实现代码实例
Feb 28 Python
python 链接sqlserver 写接口实例
Mar 11 Python
python实现简单俄罗斯方块
Mar 13 Python
python -v 报错问题的解决方法
Sep 15 Python
Python实现的扫码工具居然这么好用!
Jun 07 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
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
一步一步学习PHP(8) php 数组
2010/03/05 PHP
php运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
PHP创建多级目录的两种方法
2016/10/28 PHP
php自定义扩展名获取函数示例
2016/12/12 PHP
Thinkphp 中 distinct 的用法解析
2016/12/14 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
jQuery使用动态渲染表单功能完成ajax文件下载
2013/01/15 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
2014/05/27 Javascript
JavaScript lodash常见用法系列小结
2016/08/24 Javascript
微信小程序从注册账号到上架(图文详解)
2019/07/17 Javascript
vue实现图片上传功能
2020/05/28 Javascript
跟老齐学Python之开始真正编程
2014/09/12 Python
python实现在windows服务中新建进程的方法
2015/06/30 Python
学习python之编写简单乘法口诀表实现代码
2016/02/27 Python
浅述python中argsort()函数的实例用法
2017/03/30 Python
python 随机生成10位数密码的实现代码
2019/06/27 Python
Django中的静态文件管理过程解析
2019/08/01 Python
Python hashlib模块加密过程解析
2019/11/05 Python
python 消费 kafka 数据教程
2019/12/21 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
2020/06/24 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
python 多线程中join()的作用
2020/10/29 Python
如何选择使用结构还是类
2014/05/30 面试题
优秀教师事迹简介
2014/02/02 职场文书
求职简历自我评价范例
2014/03/12 职场文书
网络管理专业求职信
2014/03/15 职场文书
中职三好学生事迹材料
2014/08/24 职场文书
学校运动会广播稿
2014/10/11 职场文书
小学少先队辅导员述职报告
2015/01/10 职场文书
2015年度员工自我评价范文
2015/03/11 职场文书
热爱劳动主题班会
2015/08/14 职场文书
2016十一国庆节慰问信
2015/12/01 职场文书
话题作文之生命的旋律
2019/12/17 职场文书