Tensorflow:从tf.Variable创建一个tf.constant

时间:2018-06-12 18:42:18

标签: python tensorflow

我想优化成本函数。此成本函数包含变量和非变量的其他参数。这些非变量参数是从变量中获得的。

这是一个玩具示例,说明了这一点:

import numpy as np
import tensorflow as tf

r_init = np.array([5.0,6.0])

x = tf.get_variable("x_var", initializer = r_init[0], trainable = True)
y = tf.get_variable("y_var", initializer = r_init[1], trainable = True)

def cost(x,y):
    a = x
    return a*((x-1.0)**2+(y-1.0)**2)

train_op = tf.train.AdamOptimizer(learning_rate=0.05).minimize(cost(x,y))

with tf.Session() as sess:

        sess.run(tf.global_variables_initializer())

        for i in range(100):
            print(sess.run([cost(x,y), train_op]))
            print('x=', x.eval(session=sess))
            print('y=', y.eval(session=sess))

如您所见,参数a是从变量x定义的,另一方面a不应该是变量,我希望优化器将其视为一个变量不变。在优化过程中更新变量x时,应更新此常量。

如何从变量a定义非变量参数x?我正在做这件事,但直觉上,我想到的是:

a = tf.to_constant(x)

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您正在寻找tf.stop_gradient

a = tf.stop_gradient(x)

引用文档,

  

只要您想使用TensorFlow计算值但需要假装该值是常量,这非常有用。