如何在TensorFlow中将裁剪应用于可训练变量

时间:2018-12-03 11:53:11

标签: python tensorflow

我想知道如何在TensorFlow中将裁剪应用于可训练变量。

我正在训练一个变量z

z = tf.get_variable(...)

然后我想对其进行优化,但我希望将其保持在[-1,1]范围内。现在,我正在进行裁剪,如下所示:

train_step = optimizer.minizmize(loss, var_list=[z])
z = tf.clip_by_value(z, -1, 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的函数。