Tensorflow:使用Adam优化器

发布于 2021-01-29 19:04:04

我正在尝试使用张量流中的一些简单模型,包括一个看起来与第一个MNIST for ML
Beginners示例
非常相似的模型,但具有更大的维度。我能够毫无问题地使用梯度下降优化器,获得足够好的收敛性。当我尝试使用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)]]

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

关注者
0
被浏览
137
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    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)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看