首页 > 解决方案 > TF.Keras SparseCategoricalCrossEntropy 在 GPU 上返回 nan

问题描述

试图在 GPU 上训练 UNet 以创建二进制分类图像。每个时期都有 nan 损失。损失函数的测试总是产生 nan-return。

测试用例:

import tensorflow as tf
import tensorflow.keras.losses as ls

true = [0.0, 1.0]
pred = [[0.1,0.9],[0.0,1.0]]

tt = tf.convert_to_tensor(true)
tp = tf.convert_to_tensor(pred)

l = ls.SparseCategoricalCrossentropy(from_logits = True)
ret = l(tt,tp)

print(ret) #tf.Tensor(nan, shape=(), dtype=float32)

如果我强制我的 tf 与 CPU 一起工作(带有 Tensorflow 后端的 Keras 是否可以随意使用 CPU 或 GPU?),一切正常。是的,我的 UNet 在 CPU 上适合并正确预测。

我检查了 keras GitHub 上的几篇文章,但都指向编译 ANN 的问题,例如对分类交叉熵使用不适当的优化器。

任何解决方法?我错过了什么吗?

标签: pythontensorflowkeras

解决方案


我遇到过同样的问题。如果我在 CPU 上进行训练,我的损失是一个实数。我尝试升级TF版本,但没有解决问题。我终于通过减少 y 维度解决了我的问题。我的模型输出是一个二维数组。当我把它减少到一维时,我设法在 GPU 上得到了真正的损失。


推荐阅读