Keras &引用;“增值损失”;没有';与inf相比,性能有所提高,但损耗大大降低

Keras &引用;“增值损失”;没有';与inf相比,性能有所提高,但损耗大大降低,keras,conv-neural-network,loss-function,inf,Keras,Conv Neural Network,Loss Function,Inf,我正在训练一个带有自定义函数的Keras模型,之前我已经成功地测试过了。最近,我正在用一个新的数据集对它进行训练,我得到了一个奇怪的结果:模型训练得很好,但是val_loss给出了nan。 损失如下: def Loss(y_true,y_pred): y_pred = relu(y_pred) z = k.maximum(y_true, y_pred) y_pred_negativo = Lambda(lambda x: -x)(y_pred) w = k.abs

我正在训练一个带有自定义函数的Keras模型,之前我已经成功地测试过了。最近,我正在用一个新的数据集对它进行训练,我得到了一个奇怪的结果:模型训练得很好,但是
val_loss
给出了
nan
。 损失如下:

def Loss(y_true,y_pred):
    y_pred = relu(y_pred)
    z = k.maximum(y_true, y_pred)
    y_pred_negativo = Lambda(lambda x: -x)(y_pred)
    w = k.abs(add([y_true, y_pred_negativo])) 
    if k.sum(z) == 0:
        error = 0
    elif k.sum(y_true) == 0 and k.sum(z) != 0:
        error = 100
    elif k.sum(y_true) == 0 and k.sum(z) == 0:
        error = 0
    else:
        error = (k.sum(w)/k.sum(z))*100
    return error
我试过很多东西:

  • 查看了南部的数据
  • 正常化-开和关
  • 剪辑-打开和关闭
  • 辍学-开和关
  • 有人告诉我CUDA安装可能有问题,但我不确定


    你知道问题是什么吗?或者我如何诊断它?

    问题原来是每零除法,但发生的原因有点棘手。正如您所看到的,上面的定义有一些条件,这些条件本应排除每零除法。然而,它们是用来处理NumPy对象而不是张量的,张量是Keras方法传递的对象。因此,它们从未发生过,而且每零除法也经常发生


    为了修复它,我不得不用Keras条件重写损失——提醒,避免将纯Keras与tf.Keras混合——正如我所发布的那样。欢迎任何进一步的评论

    从您所写的内容来看,我认为新的验证数据集中有一个样本给出了奇怪的结果,我将尝试做一个测试:使用验证数据集作为训练数据集(没有验证),看看在特定样本之后,损失是否会变大nan@BestDogeStackoverflow这真是个谜。我已经尽了我所能。我必须查看y_pred和y_true值,因为另一个损失度量值可以毫无问题地验证它。@BestDogeStackoverflow我正在打印损失函数中的错误值,我可以看到许多值都是nan。然而,我必须找出原因…@BestDogeStackoverflow我发现了这个问题。我用一个简单的条件来表示keras张量,所以,它不适用,而是用零除法。我必须将其重写为keras conditional。似乎您对第一个数据集很幸运:D,当您can@BestDogeStackoverflow过来看!