神经网络模型不收敛的处理

理论上,只要训练样本足够多,神经网络可以拟合原始数据分布。

遇到神经网络不收敛问题,可以
(1)先检查下输入数据(归一化,数据量);
(2)然后,检查模型优化方法(学习率,优化器(优先Adam这些自适应学习率));
(3)最后是,检查模型结构设计(模型是否太简单,已经拟合好数据了,设计更深的网络看loss能否再下降;)等等,欢迎补充。

1. learning rate设大了

0.1~0.0001.不同模型不同任务最优的lr都不一样。

比如像 ReLu 激活函数,如果学习率过大,会导致一些单元函数值小于0,不可恢复地“致死”,因为后续反向传播这些单元的梯度都会等于0!

Q: 我现在越来越不明白TensorFlow了,我设置训练次数很大的时候,它一开始就给我“收敛”到一个值,后面的值都一样?
A: 模型batch_size设置问题?网络过拟合了?

2. 归一化

一般需要事先对数据进行 归一化、标准化。归一化是把数值压缩到0~1,比如减去最小值,再除以最大值与最小值之差。标准化是,压缩到一个分布, 比如 每列减去 该列的均值,然后每列除于该列的标准差,获得标准正态分布。
python sklearn 的 StandardScaler 可以实现标准化。

3. 数据处理

首先,确保数据打乱(shuffle),(数据不打乱,网络极大可能拟合前面几个batch的样本分布);然后,确保 标签 y与loss是搭配的,比如,分类模型的交叉熵 cross entropy,pytorch中target是类别,不需要one-hot,模型输出是logit,不需要softmax;keras和TensorFlow的cross entropy可能会不一样,还得看具体的API定义。

4. 损失函数

在分类中,常用交叉熵损失函数,一定要注意真实标签的维度,比如,要求标签是2维的[[0,1,0],[0,0,1]],是否传入1维,如[1,2].

这个需要在官网确认API的输入格式。

Pytorch 的损失函数Loss function.


最近开通了个公众号,主要分享深度学习,比如推荐系统,风控,NLP等算法相关的内容,感兴趣的伙伴可以关注下。
在这里插入图片描述
公众号相关的学习资料会上传到QQ群596506387,欢迎关注。


参考:

  1. 深度学习收敛问题
  2. 训练深度神经网络
  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 24
    评论
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rosefunR

你的赞赏是我创作的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值