如何解决loss NAN的问题
问题

如上图所示,第二次迭代时出现NAN值,nan表示无穷大或者非数值,一般是在一个数除以0或者log(0)时会出现无穷大。可能的原因有:1)学习率过大;2)batch过大;3)不当的损失函数等。
试着将学习率和batch分别调低,但还是会出现nan,说明不是学习率和batch的问题。
定位loss NAN的方法
使用tensorflow的代码调试模块tfdbg,可以看到运行tensorflow graph时的内部结构体和状态,方便排查变量出现NAN、inf的情况。tfdbg的官方文档介绍 https://www.tensorflow.org/versions/master/how_tos/debugger/
使用过滤器可以帮助查找异常值,命令:run -f has_inf_or_nan。如下图所示,在第一行中has_inf_or_nan过滤器在第一次Session.run调用期间第一次被触发。第一个出现异常值的tensor是计算欧式距离的tensor。

点第一个打印出来的结果如下图,发现其中有个值是-inf。

点击node_info查看该节点的信息,如下图所示。该节点的操作是SqrtGrad,有两个输入。


点击第一个input-->[Sqrt]-->print_tensor,查看Sqrt的运算结果。发现其中有个值的结果为0,所以应该是计算欧式距离的时候这些0值导致最后计算loss的时候输出为NAN。

解决方法
1、去掉tf.sqrt函数

2、直接去掉欧式距离
3、将欧式距离换成标准化欧式距离。标准化欧式距离是针对简单欧式距离缺点而做的一种改进方案。
未完待续
如何解决loss NAN的问题的更多相关文章
- 深度学习中,使用regularization正则化(weight_decay)的好处,loss=nan
刚开始训练一个模型,自己就直接用了,而且感觉训练的数据量也挺大的,因此就没有使用正则化, 可能用的少的原因,我也就不用了,后面,训练到一定程度,accuracy不上升,loss不下降,老是出现loss ...
- yolo v3 loss=nan, Avg loss=nan的一种原因
我这里是由于数据整理错误导致的,同一标注区域重复2次送入模型,具体如下: 0.798046875 0.5555555555555556 0.04296875 0.03611111111111111 0 ...
- tensorflow 训练的时候loss=nan
出现loss为nan 可能是使用了relu激活函数,导致的.因为在负半轴上输出都是0
- mmdetection训练出现nan
训练出现nan 在使用MMDetection训练模型时,发现打印信息中出现了很多nan.现象是,loss在正常训练下降的过程中,突然变为nan. 梯度裁减 在模型配置中加上grad_clip: opt ...
- GPU下train 模型出现nan
When training on GPU, the error "Model diverged with loss = NaN" is often caused by a sotm ...
- TensorFlow入门学习(让机器/算法帮助我们作出选择)
catalogue . 个人理解 . 基本使用 . MNIST(multiclass classification)入门 . 深入MNIST . 卷积神经网络:CIFAR- 数据集分类 . 单词的向量 ...
- MTCNN试用
检测工作想借用MTCNN里的48-net,源码来自CongWeilin Git 下下来就能跑,真是良心 进入pepare_data准备好数据以后进入48-net,目录下有一个pythonLayer.p ...
- [调参]CV炼丹技巧/经验
转自:https://www.zhihu.com/question/25097993 我和@杨军类似, 也是半路出家. 现在的工作内容主要就是使用CNN做CV任务. 干调参这种活也有两年时间了. 我的 ...
- DL开源框架Caffe | 模型微调 (finetune)的场景、问题、技巧以及解决方案
转自:http://blog.csdn.net/u010402786/article/details/70141261 前言 什么是模型的微调? 使用别人训练好的网络模型进行训练,前提是必须和别人 ...
随机推荐
- ajax 函数回调
var initTaxPriod = function (taxNo) { intitSearch(); $("#taxPeriod").html(""); t ...
- 【Linux】Linux简介
思维导图 什么是Linux? Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统. Linux能运行主要的UNIX工 ...
- SpringBoot使用Nacos服务发现
本文介绍SpringBoot应用使用Nacos服务发现. 上一篇文章介绍了SpringBoot使用Nacos做配置中心,本文介绍SpringBoot使用Nacos做服务发现. 1.Eureka闭源 相 ...
- Python中何时使用断言
这个问题是如何在一些场景下使用断言表达式,通常会有人误用它,所以我决定写一篇文章来说明何时使用断言,什么时候不用. 为那些还不清楚它的人,Python的assert是用来检查一个条件,如果它为真,就不 ...
- jmeter 使用问题
问题1:导入脚本失败,提示 解决:没有安装JMemter plugins manager插件,具体安装参考http://www.cnblogs.com/cxx1/p/7883820.html,第二步.
- jquery第一篇
1 jquery是什么 <1> jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team. <2>jQuery是继 ...
- Solve Error: "errcode": 48001, "errmsg": "api unauthorized hint"
当你想给微信公众号(不是测试账号)自定义菜单创建接口,遇到如下错误: OK Connection: keep-alive Date: Sat, 01 Dec 2018 05:02:08 GMT Con ...
- AJAX-wamp安装的“橙色”问题
安装wamp可能会出现的问题 ##1 正常安装wamp后,打开wamp可以在右下角看到一个图片,绿色即正常,红色或者橙色即意味着Apache+Mysql/MariaDB+Perl/PHP/Python ...
- elasticsearch视频
简单的集群管理 (1)快速检查集群的健康状况 es提供了一套api,叫做cat api,可以查看es中各种各样的数据 GET /_cat/health?v epoch timestamp cluste ...
- 九、JSP入门(2)
day12 JSP指令 1 JSP指令概述 JSP指令的格式:<%@指令名 attr1=”” attr2=”” %>,一般都会把JSP指令放到JSP文件的最上方,但这不是必须的. JSP中 ...