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开启多个子进程并行运行的方法
Apr 18 Python
详解Python中for循环的使用方法
May 14 Python
python+matplotlib绘制3D条形图实例代码
Jan 17 Python
python3安装pip3(install pip3 for python 3.x)
Apr 03 Python
python3调用百度翻译API实现实时翻译
Aug 16 Python
python实现京东订单推送到测试环境,提供便利操作示例
Aug 09 Python
python opencv实现证件照换底功能
Aug 19 Python
python2和python3实现在图片上加汉字的方法
Aug 22 Python
Python利用matplotlib绘制约数个数统计图示例
Nov 26 Python
python Autopep8实现按PEP8风格自动排版Python代码
Mar 02 Python
Python 多线程之threading 模块的使用
Apr 14 Python
Python测试框架pytest高阶用法全面详解
Jun 01 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
DOMXML函数笔记
2006/10/09 PHP
一个程序下载的管理程序(四)
2006/10/09 PHP
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
基于HTTP长连接的"服务器推"技术的php 简易聊天室
2009/10/31 PHP
判断是否为指定长度内字符串的php函数
2010/02/16 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
2011/09/11 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
javascript优先加载笔记代码
2008/09/30 Javascript
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
jQuery中replaceAll()方法用法实例
2015/01/16 Javascript
一个php+js实时显示时间问题
2015/10/12 Javascript
jQuery判断checkbox选中状态
2016/05/12 Javascript
bootstrap下拉列表与输入框组结合的样式调整
2016/10/08 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
浅谈HTTP 缓存的那些事儿
2018/10/17 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
JS数组方法join()用法实例分析
2020/01/18 Javascript
JavaScript实现弹出窗口效果
2020/12/09 Javascript
[41:21]夜魇凡尔赛茶话会 第三期02:看图识人
2021/03/11 DOTA
讲解Python中的递归函数
2015/04/27 Python
python中range()与xrange()用法分析
2016/09/21 Python
详解Python中类的定义与使用
2017/04/11 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
Python 继承,重写,super()调用父类方法操作示例
2019/09/29 Python
python实现猜拳游戏
2020/03/04 Python
Html5页面内使用JSON动画的实现
2019/01/29 HTML / CSS
FitFlop澳大利亚官网:英国符合人体工学的鞋类品牌
2017/06/05 全球购物
制药工程专业应届生求职信
2013/09/24 职场文书
计算机网络毕业生自荐信
2013/10/01 职场文书
企业消防安全制度
2014/02/02 职场文书
小学数学课后反思
2014/04/23 职场文书
小学生植树节活动总结
2014/07/04 职场文书
2014个人反腐倡廉思想汇报
2014/09/15 职场文书
办公室领导干部作风整顿个人整改措施
2014/09/17 职场文书
高三数学教学反思
2016/02/18 职场文书
高效笔记技巧分享:学会这些让你不再困扰
2019/09/04 职场文书