2017-06-03 6 views
1

nf.zerosを使用してtf.zerosを使用してテンソルフロー変数を初期化するときにいくつかの違いがありますか?np.zerosを使用し、tf.zerosを使用してTensorflow変数を初期化することの相違点

たとえば、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])) 

tf.zerosを使用して初期化する代わりに、次のようにnp.zerosを使用するとコードは正常に動作します。

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

だから、違いはないと思います。しかし、次のようなコードを試しました。abの変数は同じです。

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

しかし、次のようにb.eval()の結果は次のとおりです:

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

ので、値が同じであってもそこにある、次のように

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()の結果ですdtypeの違い。この相違がなぜ存在するのか、私に説明してください。

答えて

1

ほとんどの実験ではほとんど問題ではありません。リスト[[0, 0, ...], ...]のpythonリストを提供することもできます。 evalに表示される違いは、tf.zerosがデフォルトでfloat32を使用するためです。反対に、np.zerosはデフォルトでfloat64を使用します。 1つまたは別のものを変更すれば、違いは見えません。

生産コードでは、オーバーヘッドを減らすために初期化にtf.関数を使用する方が良いです。

関連する問題