我想检查一个tensorflow变量,如果它是NaN则将其设置为零。
我该怎么做?以下技巧似乎不起作用:
if tf.is_nan(v) is True:
v = 0.0
答案 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