keras训练cnn模型时loss为nan

Posted kjkj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keras训练cnn模型时loss为nan相关的知识,希望对你有一定的参考价值。

keras训练cnn模型时loss为nan

    1.首先记下来如何解决这个问题的:由于我代码中 model.compile(loss=‘categorical_crossentropy‘, optimizer=‘sgd‘, metrics=[‘accuracy‘])

即损失函数用的是categorical_crossentropy所以,在pycharm中双击shift键,寻找该函数,会出现keras.loss模块中有该函数,进入该函数后,

原函数为:

 

def categorical_crossentropy(y_true, y_pred):
return K.categorical_crossentropy(y_true, y_pred)

修改为:
def categorical_crossentropy(y_true, y_pred):
return K.categorical_crossentropy(y_true, y_pred+1e-5)
网上很多都是tensorflow的解决方案,找了好久好久才在一篇博客的启发下,想着去找这个损失函数。https://www.cnblogs.com/hutao722/p/9761387.html

2.另外是为什么会出现这种现象(当然还会有其他可能,这里只记下我这种问题出现的原因)

我这里是在计算损失函数时求log的时候遇到了log(0)则会导致nan

 

以上是关于keras训练cnn模型时loss为nan的主要内容,如果未能解决你的问题,请参考以下文章

模型在训练时,经过某个步骤后显示为 loss = nan

TensorFlow Object Detection目标检测模型训练时Loss急剧上升直至为NAN

损失:执行回归时 Keras 中的 NaN

Keras 在训练分类 LSTM 序列到序列模型时给出 nan

pytorch训练时前一次迭代的loss正常后一次迭代却报nan

keras训练完模型,为啥对训练集进行evaluate和训练时的loss完全不一样?白训练了吗?