在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。
我想念什么吗?为什么会这样?是虫子吗? 这似乎与我的直觉相反。
答案 0 :(得分:0)
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会自动将数组式转换为张量,所以对我来说有点奇怪。