0

我正在使用自定义功能训练 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

我尝试了很多事情:

  1. 查看了 NaN 的数据
  2. 标准化 - 打开和关闭
  3. 剪辑 - 打开和关闭
  4. 辍学 - 打开和关闭

有人告诉我可能是 CUDA 安装的问题,但我不确定。

关于问题是什么或我如何诊断它的任何想法?

4

1 回答 1

0

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

为了修复它,我不得不根据 Keras 条件重写 Loss - 提醒,避免将纯 Keras 与 tf.keras 混合 - 正如我在这里发布的那样。任何进一步的评论都非常受欢迎!

于 2021-04-11T19:24:31.950 回答