Tensorflow clip_by_value 与 Keras NonNeg

Tensorflow clip_by_value versus Keras NonNeg

我想从 Keras 约束 Tensorflow Variable to be non-negative via the constraint keyword argument. Should I use clip_by_value from base tensorflow or NonNeg?这是我对 clip_by_value 约束的实现:

def make_nonneg(x):
    return clip_by_value(x,0.0,np.inf)

此外,如果我最终在 @tf.function 调用中包装的代码中使用该变量,它们是否同样有效?

这是一个品味问题,取决于您使用它的方式。如果你定义一个模型使用Keras layers并且想在训练的时候放一个约束,使用Keras constraints是非常方便的:

model.add(Dense(64, kernel_constraint=NonNeg()))

但它的有效作用与 clip_by_value 非常相似:

  def __call__(self, w):
    return w * math_ops.cast(math_ops.greater_equal(w, 0.), K.floatx())

https://github.com/tensorflow/tensorflow/blob/v2.4.1/tensorflow/python/keras/constraints.py#L93

因此,NonNeg 约束只是一个可调用的对象包装器。