Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python AdamOptimizer不依赖于tf.control\u_Python_Tensorflow - Fatal编程技术网

Python AdamOptimizer不依赖于tf.control\u

Python AdamOptimizer不依赖于tf.control\u,python,tensorflow,Python,Tensorflow,不知何故,AdamOptimizer无视tf.control\u依赖关系 这是一个测试。我要求TensorFlow执行以下操作: 计算损失 计算损失 跑亚当的一步 我使用“确保”TF在运行步骤2之后运行步骤3 如果TensorFlow按正确的顺序执行这3个步骤,则步骤1和步骤2的结果应相同 但事实并非如此。怎么了 测试: 将numpy导入为np 导入tensorflow作为tf x=tf.get_变量('x',初始值设定项=np.array([1],dtype=np.float64)) 损耗=

不知何故,
AdamOptimizer
无视
tf.control\u依赖关系

这是一个测试。我要求TensorFlow执行以下操作:

  • 计算损失
  • 计算损失
  • 跑亚当的一步
  • 我使用“确保”TF在运行步骤2之后运行步骤3

    如果TensorFlow按正确的顺序执行这3个步骤,则步骤1和步骤2的结果应相同

    但事实并非如此。怎么了


    测试:

    将numpy导入为np
    导入tensorflow作为tf
    x=tf.get_变量('x',初始值设定项=np.array([1],dtype=np.float64))
    损耗=x*x
    optim=tf.列车AdamOptimizer(1)
    ##控制依赖项##
    使用tf.control_依赖项([loss]):
    列车运行=优化最小化(损失)
    ##跑##
    init_op=tf.global_variables_initializer()
    使用tf.Session()作为sess:
    sess.run(初始化操作)
    对于范围(1000)内的i:
    a=sess.run([损失])
    b=安全运行([损失,列车运行])[0]
    印刷品(a、b)
    断言np.allclose(a,b)
    
    结果:

    [array([1.])] [2.50003137e-14]
    AssertionError
    
    [array([1.])] [1.]
    [array([2.50003137e-14])] [2.50003137e-14]
    [array([0.4489748])] [0.4489748]
    ...
    [array([1.151504e-47])] [1.151504e-47]
    [array([4.90468459e-46])] [4.90468459e-46]
    

    第1步和第2步的结果不一样。

    听起来好像您希望
    sess。运行([loss,adam_op])
    运行
    loss
    ,然后运行
    adam_op
    。唉,sess.run不是这样工作的。举一个简单的例子——它打印
    1.01.0
    ,表示
    set\ux
    op在
    get\ux
    之前运行

    import tensorflow as tf
    
    var_x = tf.get_variable("x", shape=[], initializer=tf.zeros_initializer())
    get_x = var_x.read_value()
    set_x = var_x.assign(1)
    
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        a, b = sess.run([get_x, set_x])
        print(a, b)
    

    根据
    tf.identity(loss)
    执行步骤3将神奇地解决问题

    发生了什么事

    魔法修复:

    将numpy导入为np
    导入tensorflow作为tf
    x=tf.get_变量('x',初始值设定项=np.array([1],dtype=np.float64))
    损耗=x*x
    optim=tf.列车AdamOptimizer(1)
    ##控制依赖项##
    
    loss2=tf.identity(loss)#我认为
    tf.control\u依赖关系将确保tensorflow在adam之前丢失。您的示例没有使用
    tf.control\u依赖项
    。doc:它在Adam之前确实会运行loss--即使您根本没有使用控件依赖项,它也会运行loss。但是,损失取决于Adam更新的变量,因此之后必须再次计算。