2016-07-22 104 views
4

我試圖在訓練我的圖形並將其用於正則化時計算權重的熵。這當然涉及w*tf.log(w),並且隨着我的權重發生變化,他們中的一些人必然會進入導致返回NaN的區域。Tensorflow:如何將NaN轉換爲數字?

理想我想包括我的圖設置線:

w[tf.is_nan(w)] = <number> 

但tensorflow不支持這樣的分配。我當然可以創建一個操作,但這不起作用,因爲我需要在整個圖的執行過程中發生這種操作。我不能等待圖執行,然後'修復'我的權重,必須是圖執行的一部分。

我無法在文檔中找到與np.nan_to_num等效的內容。

有人有想法嗎?

(出於顯而易見的原因,增加埃普西隆不工作)

+0

[儘量避免NaNs](http://stackoverflow.com/questions/33712178/tensorflow-nan-bug/42497444#42497444)。 – jvdillon

回答

12

我認爲你需要使用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有利於與NumPy兼容tf.wheredeprecatedtf.select

-2

您不能將nan轉換爲數字(例如,您無法將無限轉換爲數字)。

一旦w是(或包含)0,nan最可能來自w*tf.log(w)。您可能首先添加1e-6,以便不會發生零除。

+0

在原來的問題,他說他不能添加一個epsilon,所以我不認爲添加1e-6將工作。 – chasep255