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中的ceil()方法使用教程
May 14 Python
Python中pip安装非PyPI官网第三方库的方法
Jun 02 Python
深入理解Python中装饰器的用法
Jun 28 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
Jan 11 Python
使用Python编写Prometheus监控的方法
Oct 15 Python
Python第三方库face_recognition在windows上的安装过程
May 03 Python
Django 实现图片上传和显示过程详解
Jul 18 Python
python标记语句块使用方法总结
Aug 05 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
Apr 22 Python
keras中的卷积层&池化层的用法
May 22 Python
Django web自定义通用权限控制实现方法
Nov 24 Python
python 爬取小说并下载的示例
Dec 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
PHP操作文件方法问答
2007/03/16 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
2014/04/02 PHP
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
2014/08/21 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
2016/10/14 PHP
php学习笔记之字符串常见操作总结
2019/07/16 PHP
js 异步操作回调函数如何控制执行顺序
2013/12/24 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
js完美的div拖拽实例代码
2014/01/22 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
JavaScript实现简单图片翻转的方法
2015/04/17 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
jquery图片轮播特效代码分享
2020/04/20 Javascript
Fullpage.js固定导航栏-实现定位导航栏
2016/03/17 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
2016/04/01 Javascript
Bootstrap中的表单验证插件bootstrapValidator使用方法整理(推荐)
2016/06/21 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
vue中的面包屑导航组件实例代码
2019/07/01 Javascript
js实现多张图片每隔一秒切换一张图片
2019/07/29 Javascript
vuex存值与取值的实例
2019/11/06 Javascript
element-ui中按需引入的实现
2019/12/25 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
Python深入学习之对象的属性
2014/08/31 Python
详解Python之unittest单元测试代码
2018/01/24 Python
Python 创建TCP服务器的方法
2020/07/28 Python
HTML5中meta属性的使用方法
2016/02/29 HTML / CSS
Vertbaudet西班牙网上商店:婴儿服装、童装、母婴用品和儿童家具
2019/10/16 全球购物
广州盈通面试题
2015/12/05 面试题
二年级语文教学反思
2014/02/02 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
单位计划生育责任书
2015/05/09 职场文书
2015年办公室人员工作总结
2015/05/15 职场文书
高中运动会前导词
2015/07/20 职场文书
公司人事管理制度
2015/08/05 职场文书
Redis 限流器
2022/05/15 Redis