Tensorflow:如何将 NaN 转换为数字?
Tensorflow: How to convert NaNs to a number?
我正在尝试在训练图表时计算权重的熵并将其用于正则化。这当然涉及 w*tf.log(w)
,随着我的权重发生变化,其中一些必然会进入导致返回 NaN 的区域。
理想情况下,我会在图表设置中包含一条线:
w[tf.is_nan(w)] = <number>
但是 tensorflow 不支持那样分配。我当然可以创建一个操作,但这行不通,因为我需要它在整个图的执行过程中发生。我等不及图表执行,然后 'fix' 我的权重必须成为图表执行的一部分。
我无法在文档中找到与 np.nan_to_num
等效的内容。
有人有想法吗?
(由于显而易见的原因,添加 epsilon 不起作用)
我认为你需要使用 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 有 deprecated tf.select
in favor of Numpy compatible tf.where
.
您不能将 nan 转换为数字(例如您不能将 infinite 转换为数字)。
一旦 w 为(或包含)零,nan 很可能来自 w*tf.log(w)
。您可以先加 1e-6 这样就不会被零除。
如果它是 NaN,我用它来将值转换为 0:
value_not_nan = tf.dtypes.cast(tf.math.logical_not(tf.math.is_nan(value)), dtype=tf.float32)
tf.math.multiply_no_nan(value, value_not_nan)
我正在尝试在训练图表时计算权重的熵并将其用于正则化。这当然涉及 w*tf.log(w)
,随着我的权重发生变化,其中一些必然会进入导致返回 NaN 的区域。
理想情况下,我会在图表设置中包含一条线:
w[tf.is_nan(w)] = <number>
但是 tensorflow 不支持那样分配。我当然可以创建一个操作,但这行不通,因为我需要它在整个图的执行过程中发生。我等不及图表执行,然后 'fix' 我的权重必须成为图表执行的一部分。
我无法在文档中找到与 np.nan_to_num
等效的内容。
有人有想法吗?
(由于显而易见的原因,添加 epsilon 不起作用)
我认为你需要使用 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 有 deprecated tf.select
in favor of Numpy compatible tf.where
.
您不能将 nan 转换为数字(例如您不能将 infinite 转换为数字)。
一旦 w 为(或包含)零,nan 很可能来自 w*tf.log(w)
。您可以先加 1e-6 这样就不会被零除。
如果它是 NaN,我用它来将值转换为 0:
value_not_nan = tf.dtypes.cast(tf.math.logical_not(tf.math.is_nan(value)), dtype=tf.float32)
tf.math.multiply_no_nan(value, value_not_nan)