我正在尝试tensorflow中的一些简单模型,包括一个看起来非常类似于第一个ML初学者的MNIST示例的模型,但是它的维度稍微大一些。我可以使用梯度下降优化没有问题,获得足够好的收敛性。当我尝试使用ADAM优化器时,会得到如下错误:
tensorflow.python.framework.errors.FailedPreconditionError: Attempting to use uninitialized value Variable_21/Adam
[[Node: Adam_2/update_Variable_21/ApplyAdam = ApplyAdam[T=DT_FLOAT, use_locking=false, _device="/job:localhost/replica:0/task:0/cpu:0"](Variable_21, Variable_21/Adam, Variable_21/Adam_1, beta1_power_2, beta2_power_2, Adam_2/learning_rate, Adam_2/beta1, Adam_2/beta2, Adam_2/epsilon, gradients_11/add_10_grad/tuple/control_dependency_1)]]其中,抱怨未初始化的特定变量会根据运行进行更改。这个错误意味着什么?这意味着什么是错误的?不管我使用的学习率如何,它似乎都会发生。
发布于 2015-11-21 17:53:30
AdamOptimizer类创建额外的变量,称为“时隙”,以保存"m“和"v”累加器的值。
如果您好奇的话,请参阅这里的源代码,它实际上是相当可读的:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/training/adam.py#L39。其他优化器,如动量和Adagrad也使用插槽。
必须先初始化这些变量,然后才能训练模型。
初始化变量的正常方法是调用tf.initialize_all_variables(),它在调用图形时添加ops来初始化图中的变量。
(旁白:与其名称建议不同的是,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)发布于 2017-05-04 03:47:51
FailedPreconditionError:尝试使用未初始化的值是与tensorflow相关的最常见的错误之一。来自官方文件,FailedPreconditionError
在运行一个在初始化tf.Variable之前读取它的操作时,通常会引发此异常。
在您的例子中,错误甚至解释了哪些变量没有初始化:Attempting to use uninitialized value Variable_1。其中一个TF教程解释了许多变量,它们的创建/初始化/保存/加载。
基本上,要初始化变量,您有三个选项:
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())如果您对有关变量的更多信息感到好奇,请阅读这份文件以了解如何使用report_uninitialized_variables并检查is_variable_initialized。
发布于 2017-11-28 23:23:44
您需要在您的会话中调用tf.global_variables_initializer(),比如
init = tf.global_variables_initializer()
sess.run(init)在这个伟大的教程已开始/开始/机械中提供了完整的示例。
https://stackoverflow.com/questions/33788989
复制相似问题