matlab损失函数出现nan,[译]在训练过程中loss出现NaN的原因以及可以采取的方法。...

1.梯度爆炸

原因:在学习过程中,梯度变得非常大,使得学习的过程偏离了正常的轨迹。

症状:观察输出日志(runtime log)中每次迭代的loss值,你会发现loss随着迭代有明显的增长,最后因为loss值太大以致于不能用浮点数去表示,所以变成了NaN。

可采取的方法:1.降低学习率,比如solver.prototxt中base_lr,降低一个数量级(至少)。如果在你的模型中有多个loss层,就不能降低基础的学习率base_lr,而是需要检查日志,找到产生梯度爆炸的层,然后降低train_val.prototxt中该层的loss_weight。

2.错误的学习率策略及参数

原因:在学习过程中,caffe不能得出一个正确的学习率,相反会得到inf或者nan的值。这些错误的学习率乘上所有的梯度使得所有参数变成无效的值。

症状:观察输出日志(runtime log),你应该可以看到学习率变成NaN,例如:

... sgd_solver.cpp:106] Iteration 0, lr = -nan

可采取的方法:修改solver.prototxt文件中所有能影响学习率的参数。比如,如果你设置的学习率策略是 lr_policy: "poly" ,而你又忘了设置最大迭代次数max_iter,那么最后你会得到lr=NaN...

关于caffe学习率及其策略的内容,可以在github的/caffe-master/src/caffe/proto/caffe.proto 文件中看到 (传送门)。

下面是源文件的注释部分的描述:

// The learning rate decay policy. The currently implemented learning rate

// policies are as follows:

// - fixed: always return base_lr.

// - step: return base_lr * gamma ^ (floor(iter / step))

// - exp: return base_lr * gamma ^ iter

// - inv: return base_lr * (1 + gamma * iter) ^ (- power)

// - multistep: similar to step but it allows non uniform steps defined by

// stepvalue

// - poly: the effective learning rate follows a polynomial decay, to be

// zero by the max_iter. return base_lr (1 - iter/max_iter) ^ (power)

// - sigmoid: the effective learning rate follows a sigmod decay

// return base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))

//

// where base_lr, max_iter, gamma, step, stepvalue and power are defined

// in the solver parameter protocol buffer, and iter is the current iteration.

3.错误的损失函数

原因:有时,在损失层计算损失值时会出现NaN的情况。比如,向InfogainLoss层没有归一化输入值,使用自定义的损失层等。

症状:观察输出日志(runtime log)的时候,你可能不会发现任何异常:loss逐渐下降,然后突然出现NaN。

可采取的方法:尝试重现该错误,打印损失层的值并调试。

举个栗子:有一回,我根据批量数据中标签出现的频率去归一化惩罚值并以此计算loss。如果有个label并没有在批量数据中出现,频率为0,结果loss出现了NaN的情况。在这种情况下,需要用足够大的batch来避免这个错误。

4.错误的输入

原因:你的输入中存在NaN!

症状:一旦学习过程中碰到这种错误的输入,输出就会变成NaN。观察输出日志(runtime log)的时候,你可能也不会发现任何异常:loss逐渐下降,然后突然出现NaN。

可采取的方法:重建你的输入数据集(lmdb/leveldn/hdf5...),确保你的训练集/验证集中没有脏数据(错误的图片文件)。调试时,使用一个简单的网络去读取输入,如果有一个输入有错误,这个网络的loss也会出现NaN。

5.Pooling层的步长大于核的尺寸

由于一些原因,步长stride>核尺寸kernel_size的pooling层会出现NaN。比如:

layer {

name: "faulty_pooling"

type: "Pooling"

bottom: "x"

top: "y"

pooling_param {

pool: AVE

stride: 5

kernel: 3

}

}

结果y会出现NaN。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

马的种类(七)

鄂伦春马<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />鄂伦春马产于大小兴安岭山区。繁殖性能好&#xff0c;在小群自由交配的情况下&#xff0c;有些母马一年产一驹。生长缓慢&#xff0c;6~7岁时才能结束生长发育期。一般在…

OAuth 2.0 的探险之旅

前言OAuth 2.0 全称是 Open Authorization 2.0, 是用于授权(authorization)的行业标准协议。OAuth 2.0 专注于客户端开发人员的简单性&#xff0c;同时为 Web 应用程序、桌面应用程序、移动设备应用等提供了特定的授权流程。它在2012年取代了 OAuth 1.0, 并且 OAuth 2.0 协议不…

SQL 分页查询语句大全即(查找第N到M条记录的方法)

SQL 分页查询语句大全即&#xff08;查找第N到M条记录的方法&#xff09; 第一种方法&#xff0c;我的原创方法 row2 表示分页行数 page1 表示页码 getnumrow*page select * from (select top row * from (select top getnum * from Newslist order by id desc) order by id …

揭开不一样的世界,这5部纪录片绝对不能错过!

纪录片一直都是增长见识又带给你力量的东西&#xff0c;你可能忙于学业、生活、工作而不能行万里路&#xff0c;但至少你还可以看纪录片&#xff0c;从一方屏幕看到整个世界。今天就为大家整理了5部高分纪录片&#xff0c;文末附领取方式&#xff0c;快收下吧~01与摩根弗里曼一…

Linux Free命令与cache和buffer的主要区别

本文是转载的&#xff0c;不知道为啥不能直接转载到51&#xff0c;所以copy了下&#xff0c;原文地址是&#xff1a;http://blog.sina.com.cn/s/blog_7a1285bb0100ziep.html free 命令相对于top 提供了更简洁的查看系统内存使用情况&#xff0c;用来显示内存的使用情况&#xf…

算术几何平均matlab,算术-几何平均数——高斯的发现

“算术-几何平均数”既不是算术平均数&#xff0c;也不是几何平均数&#xff0c;由素有“数学王子”之称的德国数学家高斯首先发现和研究。算术-几何平均数&#xff0c;当然与“算术平均数”和“几何平均数”这两个概念有很深的关系。我们知道&#xff0c;但凡一个数学概念或定…

把nc v6的源码看懂

看懂nc v6的源码&#xff01; 碧桂园全部的正式环境的补丁都在我手里。 2015-11-18 2&#xff1a;33 谢谢两位一起努力的兄弟 谢谢超哥&#xff0c;谢谢祈冰哥&#xff0c;谢谢连老师&#xff0c;陈明大哥&#xff0c;谢谢龙哥&#xff0c;珍玉&#xff0c;谢谢廖生哥&#x…

.NET Core TLS 协议指定被我钻了空子~~~

【导读】此前&#xff0c;测试小伙伴通过工具扫描&#xff0c;平台TLS SSL协议支持TLS v1.1&#xff0c;这不安全&#xff0c;TLS SSL协议至少是v1.2以上才行&#xff0c;想到我们早已将其协议仅支持v1.3&#xff0c;那应该非我们平台问题。近日&#xff0c;第三方合作伙伴再次…

Android之CheckBox复选框控件使用inelayout.xml Xml代码

linelayout.xml Xml代码<?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android" android:layout_width"match_parent" android:layout_height&quo…

linux如何挂载U盘

挂u盘之前&#xff0c;运行命令cat /proc/partitions,看看现在系统中有哪些分区。插上u盘以后&#xff0c;再次运行上述命令&#xff0c;看看多出来什么分区&#xff08;通常是sda1&#xff0c;PS由于偶是在虚拟机下装的&#xff0c;所以是sdb1). 1、插入U盘 2、输入 fdisk -…

光通信调制方式MATLAB仿真,基于LED的紫外光通信调制方式研究

赘固中文核心期刊基于&#xff2c;&#xff25;&#xff24;的紫外光通信调制方式研究何攀&#xff0c;李晓毅&#xff0c;侯倩&#xff0c;肖文林(重庆通信学院&#xff0c;重庆&#xff14;&#xff10;&#xff10;&#xff10;&#xff13;&#xff15;)摘要&#xff1a;紫…

frame buffer编程--画点功能和新增字符串代替RGBT

&#xff08;一&#xff09;&#xff1a;写在前面 这一次进行了一个比较大的迭代&#xff0c;在这里我先把相对于上一个版本的改进做一个解释&#xff1a; 1:进一步完善画点&#xff0c;增加了使用字符串代替RGBT值2:实现字符串解析出RGBT值3:增加了画圆的算法4:进一步增强了代…

这篇博士毕业论文致谢句句诛心......

全世界只有3.14 % 的人关注了爆炸吧知识本文来源&#xff1a;学术志综合自小木虫、网络等&#xff0c;作者yechm AUT博士毕业论文感谢信&#xff1a;我出生的时候是一个下雪的深夜&#xff0c;我的父亲在床边生了一堆柴火&#xff0c;我的母亲躺在四周漏风的那间破屋角落的床上…

30分钟通过Kong实现.NET网关

什么是KongOpenrestry是一个基于Nginx与Lua的高性能平台&#xff0c;内部有大量的Lua库。其中ngx_lua_moudule使开发人员能使用Lua脚本调用Nginx模块。Kong是一个Openrestry程序&#xff0c;而Openrestry运行在Nginx上&#xff0c;用Lua扩展了nginx。所以可以认为Kong Openres…

Proxy模式简介和用例

在软件系统中&#xff0c;有些对象有时候由于某些原因&#xff08;比如对象创建开销很大&#xff0c;或者某些操作需要安全控制&#xff0c;或者需要进程外的访问&#xff09;&#xff0c;如果直接访问会给使用者或者系统结构带来很多麻烦&#xff0c;这时可以在客户程序和目标…

struts2中jsp页面上验证码的生成

如何在jsp页面中显示验证码&#xff1a; 验证码&#xff1a;<img class"yzm_img" align"middle" id"validateImage" src"p_w_picpathCode.action" width"150" height"40" οnclick"this.srcp_w_picpathCo…

挑战程序设计竞赛部分题目选择排序、二分查找找出下标、深度优先算法、求三角形max周长、蚂蚁算法、操作excel

首先提供帮助类 可能这个类还需要更新 、求最大值、求最小值、选择排序、二分查找找出下标、二分查找排好序列里面是否有那个值 public class Util {//求最大值public static int maxValue(int a,int b) {int max =0;if (a > b) {max = a;} else {max = b;}return max;}//求…

nginx php oracle,第8天 ORACLE安装及NGINX整合PHP环境

oracle 11g安装在centos5.9x64下过程1.先检查是否安装开发工具、JAVA、ksh等&#xff0c;及其它如下yum search检查&#xff0c;若没有安装&#xff0c;则用yum groupinstall 开发工具 开发库 Java开发yum install pdkshyum install sysstatyum install libaio-develyum insta…

这个小姐姐真的很火辣......

1 穿着十分火辣的美女...▼2 你还有理了&#xff1f;▼3 学生&#xff1a;我们要把老师照片挂墙上&#xff01;▼4 喜悦中带着阵阵悲伤...▼5 你瞅啥&#xff1f;瞅你咋地&#xff01;▼6 一时竟没发现哪里不对▼7 老板&#xff0c;我们KTV最漂亮的都在这了▼你点的每个赞…

RPC调用框架比较分析

什么是RPC&#xff1a; RPC&#xff08;Remote Procedure Call Protocol&#xff09;——远程过程调用协议&#xff0c;它是一种通过网络从远程计算机程序上请求服务&#xff0c;而不需要了解底层网络技术的协议。 简言之&#xff0c;RPC使得程序能够像访问本地系统资源一样&am…