我正在尝试使用tensorflow中的一些简单模型,包括一个与第一个MNIST for ML Beginners example非常相似的模型,但具有更大的维度。我能够毫无问题地使用梯度下降优化器,获得足够好的收敛性。当我尝试使用ADAM优化器时,出现如下错误:
msbuild
抱怨未初始化的特定变量根据运行而变化。这个错误是什么意思?它表明什么是错的?无论我使用什么学习率,它似乎都会发生。
答案 0 :(得分:83)
AdamOptimizer类创建了另外的变量,称为" slots",以保存" m"和" v"蓄电池。
如果您有兴趣,请在此处查看来源,它实际上非常易读: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/training/adam.py#L39。其他优化器,如Momentum和Adagrad也使用插槽。
在训练模型之前,必须初始化这些变量。
初始化变量的常规方法是调用tf.initialize_all_variables()
,它会添加操作来初始化图形中调用的变量。
(旁白:与其名称不同,initialize_all_variables()不会初始化任何内容,它只会添加将在运行时初始化变量的操作。)
在添加优化程序后,您必须执行的是调用initialize_all_variables():
...build your model...
# Add the optimizer
train_op = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
# Add the ops to initialize variables. These will include
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()
# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
sess.run(train_op)
答案 1 :(得分:3)
FailedPreconditionError: Attempting to use uninitialized value是与tensorflow相关的最常见错误之一。从官方文档FailedPreconditionError
运行操作时最常引发此异常 在初始化之前读取一个tf.Variable。
在您的情况下,错误甚至解释了未初始化的变量:Attempting to use uninitialized value Variable_1
。其中一篇TF教程解释了很多关于变量的问题,他们的creation/initialization/saving/loading
基本上要初始化变量,你有3个选项:
tf.global_variables_initializer()
tf.variables_initializer(list_of_vars)
初始化您关心的变量。请注意,您可以使用此函数来模仿global_variable_initializer:tf.variable_initializers(tf.global_variables())
var_name.initializer
我几乎总是使用第一种方法。记住你应该把它放在会话运行中。所以你会得到这样的东西:
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
如果您对有关变量的更多信息感到好奇,请阅读this documentation以了解如何report_uninitialized_variables
并检查is_variable_initialized
。
答案 2 :(得分:1)
您需要在会话中致电tf.global_variables_initializer()
,例如
init = tf.global_variables_initializer()
sess.run(init)
这个很棒的教程中提供了完整的示例 https://www.tensorflow.org/get_started/mnist/mechanics
答案 3 :(得分:0)
在AdamOptimizer之后运行init,并且之前没有init init或运行init
sess.run(tf.initialize_all_variables())
或
sess.run(tf.global_variables_initializer())
答案 4 :(得分:-3)
我遇到了类似的问题。 (使用GradientDescent优化器训练没有问题,但在使用Adam Optimizer或任何其他具有自己变量的优化器时出错)
更改为交互式会话为我解决了这个问题。
sess = tf.Session()
到
sess = tf.InteractiveSession()