2017-08-06 192 views
1

我試圖找出爲什麼在下面的兩種方法,方法2將引發一個錯誤,當我嘗試初始化變量在TensorflowTensorflow變量不初始化

import tensorflow as tf 
sess = tf.InteractiveSession() 

方法1

這種方法工作正常返回正確的輸出

with tf.variable_scope('layer_1'): 
    W1 = tf.get_variable(name="weights1", shape=[3, 10], initializer=tf.zeros_initializer()) 

sess.run(tf.global_variables_initializer()) 

print(sess.run(W1)) 

方法2

此方法會引發錯誤。

with tf.variable_scope('layer_2'): 
    W2 = tf.get_variable(tf.zeros(shape=[3, 10], name="weights2")) 

sess.run(tf.global_variables_initializer()) 

print(sess.run(W2)) 

我接收方法2中的錯誤信息是:

TypeError: Expected float32, got 'layer_2/' of type 'str' instead. 

回答

0

第一(位置)參數來tf.get_variable是可變的name。所以,你的第二個代碼相當於

tf.get_variable(name=tf.zeros(shape=[3, 10], name="weights2")) 

嘗試使用tf.Tensor作爲變量的名稱不工作(我很驚訝它沒有給出一個錯誤更早)。

你或許要改爲做

tf.Variable(tf.zeros(shape=[3, 10]), name="weights2")