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 相关文章推荐
Python3基础之函数用法
Aug 13 Python
Python中字符串格式化str.format的详细介绍
Feb 17 Python
python万年历实现代码 含运行结果
May 20 Python
老生常谈python函数参数的区别(必看篇)
May 29 Python
详解python中的线程
Feb 10 Python
基于python中theano库的线性回归
Aug 31 Python
linux下python中文乱码解决方案详解
Aug 28 Python
python通过移动端访问查看电脑界面
Jan 06 Python
MxNet预训练模型到Pytorch模型的转换方式
May 25 Python
pycharm永久激活超详细教程
Oct 29 Python
python 如何停止一个死循环的线程
Nov 24 Python
Python线程池与GIL全局锁实现抽奖小案例
Apr 13 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
发一个php简单的伪原创程序,配合商城采集用的
2010/10/12 PHP
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
PHP+jQuery翻板抽奖功能实现
2015/10/19 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
php封装一个异常的处理类
2017/06/08 PHP
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
jQuery弹出窗口打开链接的实现代码
2016/12/24 Javascript
js实现图片切换(动画版)
2016/12/25 Javascript
JS实现向iframe中表单传值的方法
2017/03/24 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
layui 设置table 行的高度方法
2018/08/17 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
Vue点击切换Class变化,实现Active当前样式操作
2020/07/17 Javascript
用Python登录Gmail并发送Gmail邮件的教程
2015/04/17 Python
Python中元组,列表,字典的区别
2017/05/21 Python
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
使用Python获取并处理IP的类型及格式方法
2018/11/01 Python
Python List列表对象内置方法实例详解
2019/10/22 Python
python3中使用__slots__限定实例属性操作分析
2020/02/14 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
纯CSS3实现3D旋转书本效果
2016/03/21 HTML / CSS
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
浅谈pc和移动端的响应式的使用
2019/01/03 HTML / CSS
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
英文版银行求职信
2013/10/09 职场文书
婚礼秀策划方案
2014/05/19 职场文书
民事授权委托书范文
2014/08/02 职场文书
医药销售自我评价200字
2014/09/11 职场文书
高中生思想道德自我评价
2015/03/09 职场文书
《认识钟表》教学反思
2016/02/16 职场文书
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python