tensorflow训练时 loss在某个batch变为nan

当TensorFlow训练时遇到loss变为nan的情况,可能是数据中存在nan值、未进行数据归一化、学习率过大、梯度爆炸或者网络结构问题等。处理方法包括检查并处理数据中的nan值,数据归一化,降低学习率和batch size,使用梯度裁剪,每层应用BN,以及调整网络结构增加宽度。参考链接提供了更多解决方案。
摘要由CSDN通过智能技术生成

1. 查找数据,训练数据或标签是否有nan

最好先做这部筛查,不然白费功夫。说来惭愧,试了如下N种策略,还是有nan,于是开始查找数据的问题,果然有一波数据中有nan的值。

import numpy as np

if (np.any(np.isnan(items))):

       print(items)

#把nan的值变为0,其余不变

items = np.nan_to_num(items)

处理nan的数据因人而异,也可将脏数据舍弃。还看到有大兄弟把bachsize设为1来找数据的问题,emmm,直接在数据处理时做比较省事吧。

2.  对数据做归一化处理 (这个训练网络一般都会做吧)

3. 减小学习率,减小batchsize。(传说网络层数越深,学习率应该越小)

4. log(0)导致梯度爆炸

使用梯度裁剪,计算损失函数的过程中遇到的log的地方都加clip

tf.log(tf.clip_by_value(tf.sigmoid(self.scores),1e-8,1.0)

常见于分类网络,注意交叉熵损失

5. 每一层都用BN

6.调整网络结构,增加宽度(特征数量)

 

reference:

https://blog.csdn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值