如题,在caffe训练时,遇到这个特殊的数字之后,loss会一直就是这个数字。
网上虽然有很多针对这个问题调参的trick,但少有详细的分析,因此,有必要研究一下caffe的源代码。
softmax的公式为
pk=exp(xk)∑iexp(xi)

其中x为softmax前一层的输出

softmax的loss计算公式也很简单,就是对softmax之后预测的概率做对数似然函数
loss=−∑kyklog(pk)

其中y是label,若类别数为N,则y为N维。对于单label情况,N维中只有一维为1,其他为零,计算loss时仅需考虑label中非零那一维即可(实际使用中单label用一个数字记录)
此时
loss=−log(P{k==label})

在softmax_loss_layer.cpp的原码中,就是由label的非零维直接计算loss的

loss -= log(std::max(prob_data[i * dim + label_value * inner_num_ + j],Dtype(FLT_MIN)));
  • 1
  • 2

loss的最大值由FLT_MIN得到,FLT_MIN定义为1.17549435E-38F,这个数字的自然对数正好就是
-87.3356,算loss时需要取负值,结果就能了87.3356。

这说明softmax计算得到概率值出现了零(由于float类型所能表示的最小数值是10−38

,比这个值还小的无法表示,只能是零)
而softmax是用指数函数计算的,指数函数的值都是大于零的。因此,我们有理由相信,计算过程中出现了float溢出等异常,出现了inf,nan等异常数值导致softmax输出为零
最后我们发现,当softmax之前的feature值过大时,由于softmax先求指数,会超出float数据范围,成为inf。inf与其他任何数值的和都是inf,softmax在做除法时任何正常范围的数值除以inf都会变为0。然后求loss时log一下就出现了87.3356这样的值。

以下是模拟训练的loss代码,观察feature数值范围对loss的影响

#include <iostream>
#include <math.h>
#include <float.h>using namespace std;int main()
{float f[] = {100, 20};cout << "feature: " << f[0] << ", " << f[1] << endl;float f_exp[] = {expf(f[0]), expf(f[1])};cout << "exp: " << f_exp[0] << ", " << f_exp[1] << endl;float sum = f_exp[0] + f_exp[1];cout << "sum: " << sum << endl;float softmax[] = {f_exp[0]/sum, f_exp[1]/sum};cout << "softmax: " << softmax[0] << ", " << softmax[1] << endl;float loss[] = {-log(max(softmax[0], FLT_MIN)), -log(max(softmax[1], FLT_MIN))};cout << "loss: " << loss[0] << ", " << loss[1] << endl;return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13https://blog.csdn.net/jkfdqjjy/article/details/52268565?locationNum=14
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

解决方法:
知道了原因,解决时就能对症下药。总体上看,softmax输入的feature由两部分计算得到:一部分是输入数据,另部分是各层权重参数。
1、观察数据中是否有异常样本或异常label导致数据读取异常
2、调小初始化权重,以便使softmax输入的feature尽可能变小
3、降低学习率,这样就能减小权重参数的波动范围,从而减小权重变大的可能性。这条也是网上出现较多的方法。
4、如果有BN(batch normalization)层,finetune时最好不要冻结BN的参数,否则数据分布不一致时很容易使输出值变的很大。

转载:https://blog.csdn.net/jkfdqjjy/article/details/52268565?locationNum=14

深度学习之---loss等于87.336相关推荐

  1. 深度学习:loss损失不下降

    这两周写代码遇到了一些问题,在训练深度学习模型时,出现损失不下降的问题.不同的state-of-art模型已经尝试很多种,损失一直维持在0.02-0.04:以下loss下降方法排除 model 影响. ...

  2. 深度学习之Loss不下降原因分析篇

    Train & Test Loss train loss 不断下降,test loss不断下降,说明网络仍在学习; train loss 不断下降,test loss趋于不变,说明网络过拟合; ...

  3. Caffe 训练时loss等于87.3365且保持不变的原因及解决方法

    如题,在caffe训练时,遇到这个特殊的数字之后,loss会一直就是这个数字. 网上虽然有很多针对这个问题调参的trick,但少有详细的分析,因此,有必要研究一下caffe的源代码. softmax的 ...

  4. 深度学习的loss变小梯度是否变小

    loss变小梯度反而没有变小. 背景sigmoid(wx+b)的二分类实验,损失函数为平方损失. 实验一:直接训练发现loss减少导致梯度减少.看代码1: 实验二:在wx+b后加上BN层梯loss减少 ...

  5. 从2019 AI顶会最佳论文,看深度学习的理论基础

    2020-01-27 13:15:38 如果能有一种理论告诉我们什么样的模型架构.运算方式能最好地表示某种数据,什么样的损失函数.迭代方式能最高效地学习到某种能力,什么样的设置又使这种能力能处理各种意 ...

  6. 深度学习中收敛是什么意思?

    原理 收敛的意思是指某个值一直在往我们所期望的阈值靠,就拿深度学习中loss损失来做示例,如下一张图是loss在每轮训练时的一个曲线图,可以看到loss一直从一开始的1.8在往1.0降,1.0就是我们 ...

  7. 周志华:浅谈深度学习

    我们都知道直接掀起人工智能热潮的最重要的技术之一,就是深度学习技术.今天,其实深度学习已经有各种各样的应用,到处都是它,不管图像也好,视频也好,声音自然语言处理等等.那么我们问一个问题,什么是深度学习 ...

  8. 周志华:深度学习不只是深度神经网络

    周志华教授是美国计算机学会 (ACM).美国科学促进会 (AAAS).国际人工智能学会 (AAAI) .国际电气电子工程师学会 (IEEE) .国际模式识别学会 (IAPR).国际工程技术 (IET/ ...

  9. 深度学习的权重衰减是什么_【深度学习理论】一文搞透Dropout、L1L2正则化/权重衰减...

    前言 本文主要内容--一文搞透深度学习中的正则化概念,常用正则化方法介绍,重点介绍Dropout的概念和代码实现.L1-norm/L2-norm的概念.L1/L2正则化的概念和代码实现- 要是文章看完 ...

最新文章

  1. 管理文库]我喜欢的10个经典管理学定律点评
  2. Chrome浏览器扩展程序的本地备份
  3. zabbix snmp自定义OID nginx监控实例(55)
  4. 带Quarkus的Qute模板
  5. mac svn工具_程序员或产品经理,这些Mac的效率工具一定不要错过
  6. 贪心算法---背包问题(物品可以分割问题)
  7. Spring的@Scheduled任务调度
  8. HackBrowserData 一键导出 浏览器保存的登录密码、历史记录、Cookies、书签
  9. 利用RobHess源码实现SIFT算法及RANSAC去错的图像特征提取匹配及去除错匹配
  10. linux 出现 -bash-4.2# 问题的解决方法
  11. PE格式第四讲,数据目录表之导入表,以及IAT表
  12. 在树莓派上搭建gitea
  13. sagemath matlab,开源跨平台数学软件SageMath v8.1
  14. CPU的内部架构和工作原理(好文)
  15. 静态路由 华三静态路由
  16. 致敬科比,实现查询科比每赛季数据的Web服务器
  17. 控件之Scale LabelScale
  18. css使背景图片旋转
  19. 迅雷7 down.php,迅雷云点播放器(KCPlayer5000)
  20. AD学习笔记(一)基础认识

热门文章

  1. java 网上医院预约系统_基于java web的医院网上预约挂号系统 代码+数据库文件 齐全...
  2. 编译原理——语法制导翻译并产生中间代码(布尔表达式和控制语句)
  3. linux系统如何安装adobe flash player
  4. React脚手架创建步骤
  5. 首席新媒体黎想教程:短视频内容运营方法论
  6. 如何在微信公众号上传PDF文件?
  7. iOS开发 ☞ Cornerstone (SVN)用法详解
  8. PSO应用TSP(引入交换子)
  9. 手机的Ram和Rom是什么意思
  10. 基于Hadoop的企业人力资源管理