Переменные Tensorflow поддерживают ограничения, включая переменные, созданные с помощью add_weight
. См. Документы здесь .
Например, если вы хотите, чтобы переменная имела значения 0
self.add_weight(shape=some_shape, constraint=lambda x: tf.clip_by_value(x, 0, 1))
В общем, constraint
должна быть функцией; эта функция принимает переменную в качестве входных данных и возвращает новое значение для переменной. В этом случае обрезается в 0 и 1.
Обратите внимание, что способ, которым это реализовано, заключается в том, что эта функция просто вызывается для переменной после того, как оптимизатор выполняет свой шаг градиента. Это означает, что значения, которые «хотят» быть вне диапазона, будут обрезаны до жестких 0 и 1, и вы можете получить множество значений именно на этой границе. Так что, как отмечает @ y.selivonchyk, это не «математически правильно», то есть градиенты не знают об ограничении. Возможно, вы захотите объединить ограничение с регуляризацией, которую они предлагают, для лучшего эффекта.