检查Tensorflow中是否有NaN

时间:2017-08-25 02:17:56

标签: python if-statement tensorflow nan

我想检查一个tensorflow变量,如果它是NaN则将其设置为零。

我该怎么做?以下技巧似乎不起作用:

if tf.is_nan(v) is True:
    v = 0.0

6 个答案:

答案 0 :(得分:5)

如果v是0d张量,您可以使用tf.where来测试和更新值:

import numpy as np

v = tf.constant(np.nan)                  # initialize a variable as nan  ​
v = tf.where(tf.is_nan(v), 0., v)
​
with tf.Session() as sess:    
    print(sess.run(v))

# 0.0

答案 1 :(得分:2)

对于Tensorflow 2.0

您可以:

import tensorflow as tf

if tf.math.is_nan(v):
    print("v is NaN")

或使用numpy

import numpy as np

if np.is_nan(v):
    print("v is NaN")

答案 2 :(得分:0)

如果tensorflow值为NAN,您可以将tf.is_nan与tf.cond结合使用来更改值。

答案 3 :(得分:0)

像numpy这样的库(在这种情况下,,tensorflow )通常有自己的布尔实现,比较自定义布尔类型的内存地址和使用{{1}内置的CPython会导致不稳定的行为。

要么只检查隐式布尔值 - > is或进行相等比较if tf.is_nan(v)

答案 4 :(得分:0)

要使所有内容都成为tf操作,我用它可以将单个值(如果是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)

答案 5 :(得分:-3)

我希望这可以帮到你。 math.is_nan

import math
if math.isnan(float(v)):
    v = 0.0