Keras 模型在 save/load 之后预测 NaN

Keras model predict NaNs after save/load

Keras 模型在 compiling/training:

之后运行良好
>>> model.predict(values)
array([[5.28525668e-10, 3.66615766e-12, 2.76005746e-10, ...,
        1.06744905e-10, 3.96939370e-09, 1.54998125e-09],
       [1.08512407e-17, 1.16371355e-20, 3.40085518e-20, ...,
        1.58855026e-15, 3.41645340e-23, 2.22618953e-18],
       [8.91928664e-07, 1.51766372e-07, 5.11579383e-05, ...,
        2.09874074e-07, 1.08243627e-08, 1.00344047e-03],
       ...,
       [1.48135211e-06, 4.81735299e-07, 7.23933127e-08, ...,
        6.75531879e-08, 2.97403737e-08, 5.35680655e-08],
       [2.52744006e-12, 1.91630305e-11, 4.30207465e-13, ...,
        6.73083234e-09, 1.56778467e-13, 6.92025376e-13],
       [2.72180110e-08, 2.60345967e-08, 6.72346505e-05, ...,
        1.04813864e-06, 8.22153803e-11, 6.33114814e-06]], dtype=float32)

但是在保存模型并在不同的脚本中加载它之后:

# script 1
model.save('./model')

# script 2:
model = tf.keras.models.load_model(f"./model")

在加载的模型上调用 model.predict() returns 仅 NaN 值,在完全相同的输入数据上:

>>> model.predict(values)
array([[nan, nan, nan, ..., nan, nan, nan],
       [nan, nan, nan, ..., nan, nan, nan],
       [nan, nan, nan, ..., nan, nan, nan],
       ...,
       [nan, nan, nan, ..., nan, nan, nan],
       [nan, nan, nan, ..., nan, nan, nan],
       [nan, nan, nan, ..., nan, nan, nan]], dtype=float32)

这在最近之前工作得很好,但现在模型突然开始表现得像这样了。同样,返回脚本 1 在完全相同的数据上工作得很好,重新启动脚本(1 和 2)并再次保存模型然后再次重新加载不会改善任何东西。

知道这里发生了什么以及如何解决这个问题吗?使用 TensorFlow 2.3.4.

原来这是因为训练数据集中的某些值 nan

因此,部分层的权重也是nan

令人惊讶的一点是 运行 model.predict() 在 GPU 上非常好,而在 CPU 上它导致了所有 nan 个预测。

我直接在 GPU 上使用拟合模型,在 CPU 上使用保存的模型,因此我认为它与模型保存有关,但根本没有。纯 GPU 与 CPU 二分法。

我最终清理了训练数据集中的 nan 值,现在该模型不受 nan 权重影响,并且在 CPU 和 GPU 上运行良好。