2017-06-03 84 views
1

使用np.zeros和使用tf.zeros初始化tensorflow變量之間是否存在一些差異?例如,如果我們看一下MNIST softmax教程( https://github.com/tensorflow/tensorflow/blob/r1.1/tensorflow/examples/tutorials/mnist/mnist_softmax.py),變量W和b將按照以下方式進行初始化。例如,如果我們看一下MNIST softmax教程( https://github.com/tensorflow/tensorflow/blob/r1.1/tensorflow/examples/tutorials/mnist/mnist_softmax.py),則變量W和b將按照以下方式進行初始化。使用np.zeros和使用tf.zeros初始化Tensorflow變量之間的區別

W = tf.Variable(tf.zeros([784, 10])) 
    b = tf.Variable(tf.zeros([10])) 

而不是初始化使用tf.zeros,如果我們使用np.zeros代碼仍然工作正常,如下所示。

W = tf.Variable(np.zeros([784, 10], dtype=np.float32)) 
    b = tf.Variable(np.zeros([10], dtype=np.float32)) 

所以,我認爲可能沒有區別。但是,我嘗試了下面的代碼段,假設以下ab變量是相同的。

a = tf.Variable(tf.zeros((3, 2)), tf.float32) 
b = tf.Variable(np.zeros((3, 2)), tf.float32) 
sess = tf.InteractiveSession() 
init = tf.global_variables_initializer() 
sess.run(init) 
a.eval() 

a.eval()結果如下:

array([[ 0., 0.], 
     [ 0., 0.], 
     [ 0., 0.]], dtype=float32) 

b.eval()結果如下:

array([[ 0., 0.], 
     [ 0., 0.], 
     [ 0., 0.]]) 

所以,即使值是相同的,有dtype的差異。你能向我解釋爲什麼這種差異存在嗎?

回答

1

對於大多數實驗來說,它幾乎沒有關係。您還可以提供列表[[0, 0, ...], ...]的Python列表。您在eval中看到的差異是因爲tf.zeros默認使用float32。相反,np.zeros默認使用float64。改變一個或另一個,你不會看到一個區別。

在生產代碼中,最好使用tf.函數進行初始化以減少開銷。

相關問題