Документы с ограничением 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 вызывается. Метод call должен вызвать RuntimeError и остановить процесс обучения. Но это не так.
Почему?
версия tenorflow: 1.12.0
керас версия: 2.0.6