深度学习中,使用regularization正则化(weight_decay)的好处,loss=nan
刚开始训练一个模型,自己就直接用了,而且感觉训练的数据量也挺大的,因此就没有使用正则化,
可能用的少的原因,我也就不用了,后面,训练到一定程度,accuracy不上升,loss不下降,老是出现loss=nan,输出的结果也就直接不预测,比如
训练二分类器,直接判断固定为某一类别(比如固定输出为正类),这就使得准确率为0.5,阿呀呀,怎么办,不工作哦????
后面想,训练崩了会不会是learning_rate太大了,这时候我就改小learning_rate,同样的事情继续发生,只不过能维持迭代次数变多了。。
但是,对于“accuracy不上升,loss不下降”现象依旧是存在。这时候我就想呀,要想accuracy,loss变化(哪怕是变坏也好呀,总比基本不变强)
那weight 肯定变化呀,我就把regularization_loss给打印出来,发现regularization_loss,也不变化,这样说明我的算法存粹是在局部极小值那边
转悠,还亏我傻呆呆地看accuracy,loss log,还傻逼地调小learning_rate(regularization_loss变化都很小,说明learning_rat太小啦),
然后,毅然决然的添加了loss_total = classification_loss + regularization_loss,当是参数是这样的
learning_rate = 0.0000001
weight_decay = 0.0001
classification_loss = 60-70
regularization_loss = 5,
我适当增加了比例,weight_decay = 0.0003,增大了learning_rate=0.0001(大胆把,目的是要让权值动起来,太小几乎不动了)
classification_loss = 60-70
regularization_loss = old_regularization_loss *3 =15
good!!!
accuracy上升,loss开始下降(当然这时候的loss当然和之前的不一样,加了egularization_loss,但是下降趋势又回来了)
当然,后面accuracy上升到90%,又出现loss=nan,这时候
增加weight_decay = 0.0003,减小learning_rate=0.00002
哇塞,accuracy又开始上升啦。
总结,其实,当没有使用regularization,的时候,网络训练只是通过classification_loss,改变权值,这是后梯度下降的通道
只有一个,当到达一定效果时,就jj了,不能用了。增加regularization,使得改变了整个模型的梯度,跳出了局部极值的怪圈,
使得整个函数目标函数分布改变了。赞赞赞!!!从这个经验来说真好用。
不过,也不是随便用,要看classification_loss 多少? regularization_loss?,连个量的比值多少,这里我发现比值在
3:1,到5:1左右效果不错,比如
weight_decay = 0.0001
classification_loss = 60-70
regularization_loss = 5,
取3:1,那regularization_loss 要等于60/3=20,则和以前的相比要增大20/5=4倍,所以,参数改为
weight_decay = 0.0004
classification_loss = 60-70
regularization_loss = 5*4=20,这时候
accuracy上升了吧,loss开始下降了吧。
当然事不绝对!!!
附:
regularization_loss 的作用是不让某一权很大,并调节其他权值,使得所有权值都相差在一定范围,使得各个神经元都能充分使用(个人观点)。
有时需要交叉训练,比如一会儿让classification_loss做主导(learning_rate大,weight_decay小),有时则反过来,有时都小。
深度学习中,使用regularization正则化(weight_decay)的好处,loss=nan的更多相关文章
- 深度学习中正则化技术概述(附Python代码)
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 磐石 介绍 数据科学研究者们最常遇见的问题之一就是怎样避免过拟合. ...
- 深度学习中的Data Augmentation方法(转)基于keras
在深度学习中,当数据量不够大时候,常常采用下面4中方法: 1. 人工增加训练集的大小. 通过平移, 翻转, 加噪声等方法从已有数据中创造出一批"新"的数据.也就是Data Augm ...
- 深度学习中优化【Normalization】
深度学习中优化操作: dropout l1, l2正则化 momentum normalization 1.为什么Normalization? 深度神经网络模型的训练为什么会很困难?其中一个重 ...
- 深度学习中Dropout原理解析
1. Dropout简介 1.1 Dropout出现的原因 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象. 在训练神经网络的时候经常会遇到过拟合的问题 ...
- 深度学习中的Normalization模型
Batch Normalization(简称 BN)自从提出之后,因为效果特别好,很快被作为深度学习的标准工具应用在了各种场合.BN 大法虽然好,但是也存在一些局限和问题,诸如当 BatchSize ...
- [优化]深度学习中的 Normalization 模型
来源:https://www.chainnews.com/articles/504060702149.htm 机器之心专栏 作者:张俊林 Batch Normalization (简称 BN)自从提出 ...
- Hebye 深度学习中Dropout原理解析
1. Dropout简介 1.1 Dropout出现的原因 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象. 在训练神经网络的时候经常会遇到过拟合的问题 ...
- zz详解深度学习中的Normalization,BN/LN/WN
详解深度学习中的Normalization,BN/LN/WN 讲得是相当之透彻清晰了 深度神经网络模型训练之难众所周知,其中一个重要的现象就是 Internal Covariate Shift. Ba ...
- 深度学习中常见的 Normlization 及权重初始化相关知识(原理及公式推导)
Batch Normlization(BN) 为什么要进行 BN 防止深度神经网络,每一层得参数更新会导致上层的输入数据发生变化,通过层层叠加,高层的输入分布变化会十分剧烈,这就使得高层需要不断去重新 ...
随机推荐
- Mac + PyCharm 安装 Opencv3 + python2.7
本文地址:http://www.cnblogs.com/QingHuan/p/7354074.html 转载请注明本文地址,方便读者查看本文更新,谢谢! 今天要在Mac上安装OpenCV,过程非常曲折 ...
- IC卡插入与触点激活时序
当IC卡插入接口设备时,终端应确保其所有触点处于低电平状态: 当IC卡插入接口设备后,触点须按如下方式激活: 要点: 终端必须在整个激活时序中保持RST为低电平状态: 触点物理接触之后,应在IO或CL ...
- CentOS磁盘满了,导致磁盘无法写入,这么清理
输入命令 du -sh /* | sort -nr 会列出根目录文件夹的大小 看到哪个文件夹比较大 删除相应的缓存,重启服务器即可
- Tomcat下载和安装
一.Tomcat下载和安装 Tomcat 是一个免费的开放源代码的 Servlet 容器,它是 Apache 软件基金会的一个顶级项目,由 Apache,Sun和其他一些公司及个人共同开发而成.由于有 ...
- 在MySQL中快速的插入大量测试数据
很多时候为了测试数据库设计是否恰当,优化SQL语句,需要在表中插入大量的数据,怎么插入大量的数据就是个问题了. 最开始想到的办法就是写一个程序通过一个很大的循环来不停的插入,比如这样: int i = ...
- java volatile
volatile可以保证变量的可见性 当一个变量定义为volatile后,此变量对所有的线程具有可见性.这里的可见性是指当一个线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的. 每次使用v ...
- 【python】self & cls
转自 python中self,cls 普通的方法,第一个参数需要是self,它表示一个具体的实例本身. 如果用了staticmethod,那么就可以无视这个self,而将这个方法当成一个普通的函数使用 ...
- ubuntu安装nginx及其默认目录结构
一. 安装包安装 1.1 安装Nginx $sudo apt-get install nginx Ubuntu安装之后的文件结构大致为: 所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经 ...
- NodeJs中类定义及类使用
1.首先定义类Point,文件名为point.class.js: // 定义类 class Point { //构造函数 constructor(x, y) { this.x = x;//类中变量 t ...
- eclipse开发Java web工程时,jsp第一行报错,如何解决?
与myeclipse不同,eclipse开发java web项目时是要下载第三方软件(服务器)的,正是这个原因,很多初学者用eclipse学习java web的时候,总是会遇到一些小问题.其中常见的一 ...