2017-07-28 16 views
-1

整流線性單位應該執行以下功能:Tensorflow RELU歸在我看來奇怪

relu(x) = max(x, 0) 

然而,這似乎不符合tf.nn.relu情況:

import tensorflow as tf 
import numpy as np 
rand_large = np.random.randn(10, 3)*100 
X = tf.placeholder(tf.float32, [10, 3]) 
sess = tf.Session() 
sess.run(tf.nn.relu(X), feed_dict={X:rand_large}) 

隨機矩陣看起來像這樣:

>>> rand_large 
array([[ 21.94064161, -82.16632876, 16.25152777], 
    [ 55.54897693, -93.15235155, 118.99166126], 
    [ -13.36452239, 39.36508285, 65.42844521], 
    [-193.34041145, -97.08632376, 99.22162259], 
    [ 87.02924619, 2.04134891, -27.29975745], 
    [-181.11406687, 43.55952393, 42.29312993], 
    [ -29.81242188, 93.5764354 , -165.62711447], 
    [ 17.78380711, -171.30536766, -197.20709038], 
    [ 105.94903623, 34.07995616, -7.27568839], 
    [-100.59533697, -189.88957685, -7.52421816]]) 

而且relu函數的輸出如t他:

>>> sess.run(tf.nn.relu(X), feed_dict={X:rand_large})array([[ 1. , 0.5, 0.5], 
    [ 0.5, 0.5, 0.5], 
    [ 0.5, 0.5, 0.5], 
    [ 0.5, 0.5, 0.5], 
    [ 0.5, 0.5, 0.5], 
    [ 0.5, 0.5, 0.5], 
    [ 0.5, 0.5, 0.5], 
    [ 0.5, 0.5, 0.5], 
    [ 0.5, 0.5, 0.5], 
    [ 0.5, 0.5, 0.5]], dtype=float32) 

所以,如果我正確地看到它,tf.nn.relu做某種標準化的,對不對?如果是,爲什麼不在docs中提及?

好的,我發現整個問題都與我的tensorflow installtion有關,這似乎是腐敗的。在另一臺機器上,我確實得到了預期的結果。 感謝您的幫助和有益的意見。

+0

你提到的輸出是錯誤的,你應該得到和負值爲零保持正值。 –

+0

當我運行你的代碼時,我沒有得到你提到的輸出。 –

+0

真的很奇怪......也許這是我安裝的TF? – romeasy

回答

4

tf.nn.relu不規範化數據。例如,如果我跑

import tensorflow as tf 
import numpy as np 
X = tf.placeholder(tf.float32, [2, 3]) 
relu_X=tf.nn.relu(X) 

sess = tf.Session() 
mat = np.array([[-1,2,3],[2,-5,1]]) 
sess.run(relu_X, feed_dict={X:mat}) 

結果是

array([[ 0., 2., 3.], 
     [ 2., 0., 1.]], dtype=float32)