我想知道如何在TensorFlow中将裁剪应用于可训练变量。
我正在训练一个变量z
z = tf.get_variable(...)
然后我想对其进行优化,但我希望将其保持在[-1,1]范围内。现在,我正在进行裁剪,如下所示:
train_step = optimizer.minizmize(loss, var_list=[z])
z = tf.clip_by_value(z, -1, 1)
但是我感觉到剪辑没有被执行。应该怎么做?
答案 0 :(得分:1)
您尝试裁剪的操作无效,因为tf.clip_by_value
仅返回一个新的张量,该张量将保存变量的裁剪后的值,但是变量本身不会受到影响。即在代码段之后, Python变量 z
不再指向最初创建的 Tensorflow变量。
如果要手动执行此操作,则应使用tf.assign
实际将裁剪后的值分配给变量。但是,最方便的方法可能是使用constraint
的{{1}}参数。请检查the docs。这样的事情应该起作用:
get_variable
这应该在每次z = tf.get_variable(..., constraint=lambda x: tf.clip_by_value(x, -1., 1.)
调用之后应用传递给constraint
的函数。