tensorflow训练神经网络时出现loss一直为nan的情况

问题:
在使用model.fit()训练神经网络时,出现loss一直为nan的状态。

解决方法:

1、可能是由于学习率过大的原因:

网上很多提出减少学习率,这里可以直接将学习率设置为0,进行训练看loss还是nan,可以省去一直减少学习率的过程。
注意:keras中调整学习率时,在model.compile中设置:optimizer=tf.keras.optimizers.Adam(lr=0),实现将学习率调整为0

model.compile(optimizer=tf.keras.optimizers.Adam(lr=0),
                  loss=multi_category_focal_loss1_fixed,
                  metrics=['accuracy'])

2、如果第一种方法未能解决问题,说明与学习率无关。很大可能是定义损失函数时忽视了log的问题,在计算损失函数的时候,网络输出为0,计算log(0)自然会出现无穷大的现象,从而导致出现nan:

这种问题一般出现于自己定义损失函数,可以去定义的损失函数中寻找出现log的部分,通过tf.clip_by_value(y, 1e-7, 1.0)函数将y为0的情况替换为一个极小值。

epsilon = 1.e-7
ce = tf.log(tf.clip_by_value(y_t, epsilon, 1.0))

3、另外batch过大,数据过脏也可能导致nan

可以调节batch大小,通过isnon函数检查数据中的nan对应解决问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值