【问题标题】:How to Increment a Variable in Tensorflow?如何在 TensorFlow 中增加变量?
【发布时间】:2016-09-24 02:39:56
【问题描述】:

当我尝试在 Tensorflow 中使用主管时,我意识到:

您的训练操作负责增加全局步长值。

(Reference)

那么如何在 Tensorflow 中增加图表中的变量呢?

【问题讨论】:

    标签: python-2.7 tensorflow


    【解决方案1】:

    非常简单的解决方案:

    global_step = tf.Variable(1, name='global_step', trainable=False, dtype=tf.int32)
    increment_global_step_op = tf.assign(global_step, global_step+1)
    

    然后,当您想增加它时,只需在当前 tf.Session sess 下运行该操作即可。

    step = sess.run(increment_global_step_op)
    

    放在step中的结果是递增后变量的值。在这种情况下,global_step 的值是递增后的值。所以2

    如果您像我一样将其用于 global_step,请与您的 training_op 一起运行它。

    result = sess.run([out, increment_global_step_op], {x: [i]})
    

    【讨论】:

    • +1 表示可训练=假。注意assign方法可以替换为tf.assign_add(global_step, 1)
    • 我不明白 global_step 如何与我的优化器相关联?我是否必须明确告诉优化器 global_step 变量是我的全局步骤,或者它是如何工作的?
    • 如果我们稍后要用变量global_step 来除某个数字,用dtype=tf.float32tf.float64 来声明它会更好,而不是tf.int32
    【解决方案2】:

    增加/减少值是一种常见的操作,所以TF有操作来简化图的创建:tf.assign_add()tf.assign_sub()。它们结合了两个操作(tf.assign()tf.add/tf.sub)。

    以下是使用示例:

    import tensorflow as tf
    
    x = tf.Variable(0, name='counter')
    inc = tf.assign_add(x, 1, name='increment')
    
    with tf.Session() as sess:
        # writer = tf.summary.FileWriter('logs', sess.graph)
        sess.run(tf.global_variables_initializer())
        for _ in xrange(5):
            print sess.run(inc)
    

    如果您将本示例中的张量板图与您自己示例中的图进行比较,您会发现该图的节点数量较少。

    【讨论】:

    • 如果变量不是原始图形的一部分,需要做什么?当使用来自 Tensorflow 网站的 retrain.py 进行迁移学习时,我试图从具有唯一名称的打开的 cv 帧中保存图像。在这种情况下,增量操作会给我错误 ValueError: Fetch argument <tf.Tensor 'increment:0' shape=() dtype=int32_ref> cannot be interpreted as a Tensor. (Tensor Tensor("increment:0", shape=(), dtype=int32_ref) is not an element of this graph.)
    猜你喜欢
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 2015-09-21
    相关资源
    最近更新 更多