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 控制语句
Nov 03 Python
python的常见命令注入威胁
Feb 18 Python
Python松散正则表达式用法分析
Apr 29 Python
Python实现的三层BP神经网络算法示例
Feb 07 Python
基于python神经卷积网络的人脸识别
May 24 Python
深入浅析Python的类
Jun 22 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
用python写一个定时提醒程序的实现代码
Jul 22 Python
TensorFlow 读取CSV数据的实例
Feb 05 Python
vue常用指令代码实例总结
Mar 16 Python
python线程里哪种模块比较适合
Aug 02 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获取访问者IP地址汇总
2015/04/24 PHP
php 输入输出流详解及示例代码
2016/08/25 PHP
PHP面向对象程序设计之类与反射API详解
2016/12/02 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
PHP封装返回Ajax字符串和JSON数组的方法
2017/02/17 PHP
自制PHP框架之模型与数据库
2017/05/07 PHP
基于php流程控制语句和循环控制语句(讲解)
2017/10/23 PHP
javascript编码的几个方法详细介绍
2013/01/06 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
基于jquery实现全屏滚动效果
2015/11/26 Javascript
JavaScript提高性能知识点汇总
2016/01/15 Javascript
浅析BootStrap模态框的使用(经典)
2016/04/29 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
浅谈Koa服务限流方法实践
2017/10/23 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
Angular4学习教程之HTML属性绑定的方法
2018/01/04 Javascript
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
Vue多组件仓库开发与发布详解
2019/02/28 Javascript
vue基于viewer实现的图片查看器功能
2019/04/12 Javascript
在element-ui的select下拉框加上滚动加载
2019/04/18 Javascript
js实现随机点名功能
2020/12/23 Javascript
对Python中DataFrame按照行遍历的方法
2018/04/08 Python
程序员写Python时的5个坏习惯,你有几条?
2018/11/26 Python
python itchat实现调用微信接口的第三方模块方法
2019/06/11 Python
python中的句柄操作的方法示例
2019/06/20 Python
python实现百度OCR图片识别过程解析
2020/01/17 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
Django数据库迁移常见使用方法
2020/11/12 Python
支持IE8的纯css3开发的响应式设计动画菜单教程
2014/11/05 HTML / CSS
教书育人演讲稿
2014/09/11 职场文书
婚内分居协议书范文
2014/11/26 职场文书
教师工作态度自我评价
2015/03/05 职场文书
Linux安装Nginx步骤详解
2021/03/31 Servers
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏