2017-06-03 129 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.函数进行初始化以减少开销。