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 深入理解yield
Sep 06 Python
python使用正则表达式分析网页中的图片并进行替换的方法
Mar 26 Python
python实现Decorator模式实例代码
Feb 09 Python
Python开发的十个小贴士和技巧及长常犯错误
Sep 27 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
python 将日期戳(五位数时间)转换为标准时间
Jul 11 Python
Pytorch: 自定义网络层实例
Jan 07 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
Feb 07 Python
使用python-Jenkins批量创建及修改jobs操作
May 12 Python
PyTorch: Softmax多分类实战操作
Jul 07 Python
Python实现列表索引批量删除的5种方法
Nov 16 Python
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
May 17 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 REMOTE_ADDR之获取访客IP的代码
2008/04/22 PHP
PHP _construct()函数讲解
2019/02/03 PHP
win10下 php安装seaslog扩展的详细步骤
2020/12/04 PHP
Alliance vs Liquid BO3 第一场2.13
2021/03/10 DOTA
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
从jquery的过滤器.filter()方法想到的
2013/09/29 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
Jquery修改页面标题title其它JS失效的解决方法
2014/10/31 Javascript
基于jQuery实现文本框只能输入数字(小数、整数)
2016/01/14 Javascript
javascript实现在网页中运行本地程序的方法
2016/02/03 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
react native 获取地理位置的方法示例
2018/08/28 Javascript
解决vue-cli@3.xx安装不成功的问题及搭建ts-vue项目
2020/02/09 Javascript
jQuery实现简单QQ聊天框
2020/08/27 jQuery
python基础教程之匿名函数lambda
2017/01/17 Python
python实现k-means聚类算法
2018/02/23 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
python进度条显示-tqmd模块的实现示例
2020/08/23 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
2020/11/11 Python
五一家具促销方案
2014/01/10 职场文书
给同学的道歉信
2014/01/16 职场文书
汽车装潢店创业计划书范文
2014/02/05 职场文书
班级活动策划书
2014/02/06 职场文书
打架检讨书2000字
2014/02/22 职场文书
绩效工资实施方案
2014/03/15 职场文书
酒后驾车标语
2014/06/30 职场文书
个人委托书范本汇总
2014/10/01 职场文书
个园导游词
2015/02/04 职场文书
涨价通知
2015/04/23 职场文书
食品安全责任书范本
2015/05/09 职场文书
初中美术教学反思
2016/02/17 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python
浅谈如何保证Mysql主从一致
2022/03/13 MySQL
WINDOWS下安装mysql 8.x 的方法图文教程
2022/04/19 MySQL
Nginx HTTP跳转至HTTPS
2022/05/15 Servers
python数字图像处理:图像的绘制
2022/06/28 Python