Tensorflow:如何将NaN转换为数字?

2024-05-13 00:27:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在训练我的图时计算权重的熵,并将其用于正则化。这当然涉及到w*tf.log(w),当我的权重发生变化时,其中一些权重一定会进入一个区域,从而导致返回NaNs。

理想情况下,我会在图形设置中包含一条线:

w[tf.is_nan(w)] = <number>

但是tensorflow不支持这样的赋值。当然,我可以创建一个操作,但这不起作用,因为我需要在整个图的执行过程中执行它。我迫不及待地要执行图形,然后“修复”我的权重,这必须是图形执行的一部分。

我在文档中找不到与np.nan_to_num等价的内容。

有人知道吗?

(显然,添加epsilon不起作用)


Tags: log图形区域numberistftensorflow情况
2条回答

我想你需要用tf.select。

w = tf.select(tf.is_nan(w), tf.ones_like(w) * NUMBER, w); #if w is nan use 1 * NUMBER else use element in w

更新:TensorFlow 1.0有deprecatedtf.select支持Numpy兼容^{}

不能将nan转换为数字(例如不能将infinite转换为数字)。

当w为(或包含)0时,nan结果很可能来自w*tf.log(w)。您可以先添加1e-6,这样就不会出现被零除的情况。

相关问题 更多 >