微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Tensorflow clip_by_value 与 Keras NonNeg

如何解决Tensorflow clip_by_value 与 Keras NonNeg

我想通过约束关键字参数将 Tensorflow Variable 约束为非负值。我应该使用来自基础 tensorflow 的 clip_by_value 还是来自 Keras 的 NonNeg?这是我对 clip_by_value 约束的实现:

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

此外,如果我最终在 @tf.function 调用中包装的代码中使用变量,这两种方法是否同样有效?

解决方法

这是一个品味问题,取决于您使用它的方式。如果您使用 Keras 层定义模型并希望在训练期间放置约束,则使用 Keras 约束非常方便:

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 约束只是一个可调用的对象包装器。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。