当将初始值设置为张量时,为什么会得到随机值?

时间:2018-07-24 18:43:02

标签: python tensorflow save restore

在TensorFlow中使用tf.train.Saver存储和恢复变量时,将初始值设置为张量时会得到随机值,为什么?

我有两种创建变量的方法,一种是使用函数进行初始化,另一种是使用张量:

# Way 1, works when restoring
T = tf.get_variable('T', shape=[3], initializer = tf.zeros_initializer)
# Way 2-a, doesn't work when restoring
T = tf.get_variable('T', initializer = [1,2,3]) # Doesn't restore
# Way 2-b
T = tf.Variable(name='T', initial_value=[1,2,3]) # Doesn't restore
# Way 2-c
T = tf.Variable(name='T', initial_value=tf.constant([1,2,3])) # Doesn't restore

当我尝试使用第二种方法还原变量时,值似乎是随机生成的。

我创建了一个Jupyter笔记本来查看实际问题(除了按Enter键,您无需执行任何操作):https://colab.research.google.com/drive/1QoJ_YFYZQe3GSAi3Lr7wOnsnt2jCjPR7

我想念什么吗?为什么会这样?是虫子吗? 这似乎与我的直觉相反。

1 个答案:

答案 0 :(得分:0)

尝试使用tf.constant_initializer

T = tf.get_variable('T', shape=[3], 
                    initializer=tf.constant_initializer([1,2,3]))

摘自tf.get_variable上的文档:

  

初始化程序也可以是Tensor,在这种情况下,变量将初始化为该值和形状。

因此,您也可以将其设置为显式张量,在这种情况下,您无需传递形状。像这样:

T = tf.get_variable('T', initializer=tf.constant([1,2,3]))

我认为问题出在传递列表而不是张量,尽管通常TF会自动将数组式转换为张量,所以对我来说有点奇怪。