"val_loss" 没有从 inf 改进,但损失减少得很好
"val_loss" didn't improved from inf, but loss decreases nicely
我正在使用自定义函数训练 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
我试过很多东西:
- 查看了 NaN 的数据
- 标准化 - 打开和关闭
- 剪辑 - 打开和关闭
- 辍学 - 开启和关闭
有人告诉我that可能是CUDA安装的问题,但我不确定。
知道问题是什么或如何诊断吗?
问题原来是除以零,但发生的原因有点棘手。如您所见,上面的定义有一些条件,这些条件应该排除每个零的除法。但是,它们是为处理 NumPy 对象而不是张量而编写的,张量是 Keras 方法传递的对象。因此,它们从来没有发生过,每零除经常发生。
为了修复它,我不得不根据 Keras 条件重写损失 - 提醒,避免将纯 Keras 与 tf.keras 混合 - 就像我发布的 here 一样。欢迎任何进一步的评论!
我正在使用自定义函数训练 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
我试过很多东西:
- 查看了 NaN 的数据
- 标准化 - 打开和关闭
- 剪辑 - 打开和关闭
- 辍学 - 开启和关闭
有人告诉我that可能是CUDA安装的问题,但我不确定。
知道问题是什么或如何诊断吗?
问题原来是除以零,但发生的原因有点棘手。如您所见,上面的定义有一些条件,这些条件应该排除每个零的除法。但是,它们是为处理 NumPy 对象而不是张量而编写的,张量是 Keras 方法传递的对象。因此,它们从来没有发生过,每零除经常发生。
为了修复它,我不得不根据 Keras 条件重写损失 - 提醒,避免将纯 Keras 与 tf.keras 混合 - 就像我发布的 here 一样。欢迎任何进一步的评论!