我正在张量流中试验一些简单的模型,包括一个看起来与第一个非常相似的模型面向 ML 初学者的 MNIST 示例 http://www.tensorflow.org/tutorials/mnist/beginners/index.md,但维数稍大一些。我能够毫无问题地使用梯度下降优化器,获得足够好的收敛性。当我尝试使用 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)]]
其中抱怨未初始化的特定变量根据运行而变化。这个错误是什么意思?它表明什么是错误的?无论我使用的学习率如何,它似乎都会发生。
AdamOptimizer 类创建称为“槽”的附加变量来保存“m”和“v”累加器的值。
如果您好奇,请参阅此处的源代码,它实际上非常可读:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/training/adam.py#L39 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()after您已经添加了优化器:
...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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)