2017-08-25 45 views
3

我想檢查tensorflow變量,如果它是NaN,則將其設置爲零。檢查Tensorflow中的NaN

我該怎麼做?下面的技巧似乎不起作用:

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

你肯定is_nan()返回一個布爾值? – ospahiu

+0

它返回布爾類型的張量 –

+0

「v」的形狀是什麼?是'v'一個標量? – Psidom

回答

3

如果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 
0

你可以結合使用tf.is_nan與tf.cond如果tensorflow值NAN更改值。

0

圖書館像numpy的(在這種情況下,tensorflow)往往有自己的布爾實現,比較自定義的布爾類型的內存地址,CPython中內置的使用is會導致異常行爲。

要麼只檢查隱式布爾值 - >if tf.is_nan(v)或做一個相等比較if tf.is_nan(v) == True

0

我希望這可以幫助你。 math.is_nan

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