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

Nim*_*z14 7 python nan tensorflow

我正在尝试在训练我的图形时计算权重的熵并将其用于正则化.这当然涉及到w*tf.log(w),并且随着我的权重的变化,其中一些必然会进入导致NaN返回的区域.

理想情况下,我会在图表设置中包含一行:

w[tf.is_nan(w)] = <number>
Run Code Online (Sandbox Code Playgroud)

但tensorflow不支持这样的分配.我当然可以创建一个操作,但这不起作用,因为我需要在执行整个图形时发生它.我不能等待图表执行然后"修复"我的权重,必须是图执行的一部分.

我无法np.nan_to_num在文档中找到相应的内容.

有人有想法吗?

(由于显而易见的原因,添加epsilon不起作用)

cha*_*255 17

我认为你需要使用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
Run Code Online (Sandbox Code Playgroud)

更新: TensorFlow 1.0已弃用 tf.select,支持兼容Numpy tf.where.

  • w = tf.where(tf.is_nan(w),tf.ones_like(w)*NUMBER,w)#version with tf.where - 复制速度更快,避免混淆 (4认同)
  • 对于 Tensorflow 2.0+,您需要使用 tf.math.is_nan。此代码删除了由 categorically_cross_entropy 损失函数的填充部分创建的 nan:`loss_value = tf.where(tf.math.is_nan(loss_value), tf.zeros_like(loss_value), loss_value)` (3认同)