首页 > 解决方案 > keras 约束没有被调用

问题描述

Keras 约束文档:https ://keras.io/constraints/ 。我使用NonNeg约束来保持我的一些网络密集层权重为正,用法如下:

layer1 = Dense(1, activation='sigmoid', use_bias=True, kernel_constraint=NonNeg())

但是有些层权重还是负数,我查看了keras约束的源码:https ://github.com/keras-team/keras/blob/master/keras/constraints.py#L62 ,很简单。所以我想知道是否没有调用约束。所以我写了一个自定义约束,直接抛出异常

class ConstraintDemo(Constraint):
    def __init__(self):
        logging.info("CONSTRAINT called")
    def __call__(self, w):
        raise RuntimeError("GLQ ERROR")
        logging.info("CONSTRAINT called")
        return tf.cast(tf.greater_equal(w, 0.), tf.float32)

我用类似的方式给班级打电话

layer = Dense(1, activation='sigmoid', use_bias=True, kernel_constraint=ConstraintDemo())

仅调用init方法。调用方法应引发 RuntimeError 并停止训练过程。但它没有。

为什么?

张量流版本:1.12.0

keras版本:2.0.6

标签: tensorflowkeras

解决方案


推荐阅读