Google colaboratory 在TPU上进行培训时,验证丢失变为nan,但在GPU上完全正常

Google colaboratory 在TPU上进行培训时,验证丢失变为nan,但在GPU上完全正常,google-colaboratory,tensorflow2.0,nan,tfrecord,tpu,Google Colaboratory,Tensorflow2.0,Nan,Tfrecord,Tpu,我在使用GPU和TPU的google colab培训中遇到了一个相当奇怪的问题,我使用了一个自定义的loss,在GPU上使用tfrecord数据集也可以,但如果切换到TPU,则会将nan作为验证损失。没有其他具体错误。此外,一个旧的验证tfrecord数据集在TPU上运行良好。这让我觉得可能有一些特定的数据。这也显示在model.evaluate(…)上,因为它位于验证集中 你知道如何最好地用TPU调试它吗?如有要求,可提供更多详细信息。我的问题可能与有关(尽管即使在非自定义损失函数中也可以看到

我在使用GPU和TPU的google colab培训中遇到了一个相当奇怪的问题,我使用了一个自定义的loss,在GPU上使用tfrecord数据集也可以,但如果切换到TPU,则会将nan作为验证损失。没有其他具体错误。此外,一个旧的验证tfrecord数据集在TPU上运行良好。这让我觉得可能有一些特定的数据。这也显示在model.evaluate(…)上,因为它位于验证集中


你知道如何最好地用TPU调试它吗?如有要求,可提供更多详细信息。

我的问题可能与有关(尽管即使在非自定义损失函数中也可以看到)。在我的例子中,我没有看到它使用开箱即用的丢失功能,而是在使用自定义丢失时点击它。自定义丢失似乎不是主要原因,因为对于任何数据集,它都在CPU和GPU下工作


不管怎样,我按照问题的提示删除了最后一批(它的大小小于batch_大小),而NaN不再出现。虽然这解决了问题,但我仍然没有明确的根本原因。

我将尝试以下步骤:1)使用随机输入/验证调用模型,2)使用随机输入/验证拟合模型,3)使用简单损失函数拟合,4)简化自定义损失函数,直到它起作用。