使用np.zeros初始化Tensorflow变量和使用tf.zeros之间的区别

时间:2017-06-03 00:25:04

标签: variables tensorflow initialization

使用np.zeros初始化tensorflow变量和使用tf.zeros之间是否存在一些差异?

例如,如果我们看一下MNIST softmax教程( https://github.com/tensorflow/tensorflow/blob/r1.1/tensorflow/examples/tutorials/mnist/mnist_softmax.py),变量W和b按以下方式初始化。

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

如果我们使用np.zeros,代码仍然可以正常工作,而不是使用tf.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 :(得分:1)

对于大多数实验来说,它几乎无关紧要。您还可以提供列表[[0, 0, ...], ...]的python列表。您在eval中看到的差异是因为tf.zeros默认使用float32。相反,np.zeros默认使用float64。改变一个或另一个,你不会看到差异。

在生产代码中,最好使用tf.函数进行初始化以减少开销。