Tensorflow:使用Adam优化器

pyt*_*hor 47 python 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)]]
Run Code Online (Sandbox Code Playgroud)

抱怨未初始化的特定变量根据运行而变化.这个错误是什么意思?它表明什么是错的?无论我使用什么学习率,它似乎都会发生.

小智 89

AdamOptimizer类创建其他变量,称为"槽",用于保存"m"和"v"累加器的值.

如果你很好奇,请查看此处的源代码,它实际上非常易读:https: //github.com/tensorflow/tensorflow/blob/master/tensorflow/python/training/adam.py#L39.其他优化器,如Momentum和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)
Run Code Online (Sandbox Code Playgroud)

  • 这个答案是正确的,但现在该方法被`tf.global_variables_initializer()`取代 (4认同)